bot gold.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «bot gold.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный код представляет собой торгового советника для платформы MetaTrader 4, написанный на языке MQL4. Советник размещает отложенные ордера BUY STOP и SELL STOP на заданном расстоянии от текущей цены, с возможностью настройки количества ордеров и лотов. Лот может умножаться по заданной схеме при добавлении последующих позиций.
Советник отслеживает суммарную прибыль по открытым позициям и может автоматически закрывать позиции при достижении заданных порогов прибыли — отдельно по BUY, отдельно по SELL, а также полное закрытие при достижении общего порога. В коде реализована панель с кнопками для ручного закрытия позиций, обрабатываемая через обработчик OnChartEvent.
Для генерации торговых сигналов используются индикаторы Bollinger Bands на таймфреймах M30, H1, H4 и D1, а также скользящие средние SMA на таймфреймах M5 и M15. Параметры периодов, отклонений и включения каждого таймфрейма настраиваются отдельно. Также реализована функция трейлинга стоп-лосса и информационная панель с данными о текущих позициях.
В функции init() содержится проверка даты истечения и номера счёта, при несоответствии советник деактивируется. Торговые операции выполняются через стандартный OrderSend с последующей модификацией уровней стоп-лосса и тейк-профита.
Настройки программы
| Настройка | Описание |
|---|---|
| kieuTrade | Режим торговли — Режим торговли: ONLY_BUY — только покупка, ONLY_SELL — только продажа, ALL — оба направления. |
| maxOrderALL | Максимальное количество ордеров — Максимальное количество отложенных ордеров, размещаемых одновременно по каждому направлению. |
| khoangcach_LenhDauTien | Расстояние до первого ордера — Расстояние в пунктах от текущей цены до первого отложенного ордера. |
| khoangcach_GiuaCacLenh | Расстояние между ордерами — Расстояние в пунктах между последовательными отложенными ордерами. |
| closeAllProfit | Прибыль для полного закрытия — Порог общей прибыли (в долларах), при достижении которого закрываются все открытые позиции. |
| tongloinhuanBUY | Прибыль для закрытия BUY — Порог прибыли по BUY-позициям (в долларах), при достижении которого все BUY-позиции закрываются. Ноль — отключено. |
| tongloinhuanSELL | Прибыль для закрытия SELL — Порог прибыли по SELL-позициям (в долларах), при достижении которого все SELL-позиции закрываются. Ноль — отключено. |
| startLots | Начальный лот — Начальный размер лота для первого ордера. |
| tp_point | Тейк-профит в пунктах — Уровень тейк-профита в пунктах для открытых позиций. |
| sl_point | Стоп-лосс в пунктах — Уровень стоп-лосса в пунктах для открытых позиций. |
| ___ | ___ — Текстовый параметр, используемый в качестве разделителя сигнала в комментариях ордеров. |
| bandPeriod | Период полос Боллинджера — Период индикатора Bollinger Bands, применяемый для формирования торговых сигналов на различных таймфреймах. |
| band_dev | Отклонение полос Боллинджера — Отклонение стандартного отклонения для индикатора Bollinger Bands. |
| use_band_M30 | Использовать полосы Боллинджера M30 — Включает или отключает использование сигнала Bollinger Bands на таймфрейме M30. |
| use_band_H1 | Использовать полосы Боллинджера H1 — Включает или отключает использование сигнала Bollinger Bands на таймфрейме H1. |
| use_band_H4 | Использовать полосы Боллинджера H4 — Включает или отключает использование сигнала Bollinger Bands на таймфрейме H4. |
| use_band_D1 | Использовать полосы Боллинджера D1 — Включает или отключает использование сигнала Bollinger Bands на таймфрейме D1. |
| showInfo | Отображение информационной панели — Переключатель отображения информационной панели с данными о текущих позициях и их прибыли. |
| note | Примечание — Текстовый параметр для добавления произвольных заметок в комментарии ордеров. |
Поиск по коду файла
enum modetrade
{
ONLY_BUY = 1,
ONLY_SELL = 2,
ALL =3,
};
enum modeTrailling
{
PIP_ = 1,
PHAN_TRAM =2,
};
extern modetrade kieuTrade = 3;
int maxOrderBUY = 0;
int maxOrderSELL = 0;
extern int maxOrderALL = 5;
extern int khoangcach_LenhDauTien = 500;
extern int khoangcach_GiuaCacLenh = 250;
extern double closeAllProfit=12;
extern double tongloinhuanBUY = 0;
extern double tongloinhuanSELL = 0;
int Magic=3;
extern double startLots=0.03;
extern int tp_point=0;
extern int sl_point=0;
int hesonhanlot = 1;
extern string ___="=======Signal=========";
extern int bandPeriod = 20;
extern double band_dev=2;
extern bool use_band_M30=true;
extern bool use_band_H1=true;
extern bool use_band_H4=true;
extern bool use_band_D1=true;
string he_so_nhan_lot = "1_3_4_5_8_10_12_14_16_20";
string chuoikhoangcach ="100_200_200_300";
double maxLot = 0;
int solenhtoida = 20;
string noTradeinHourGMT ="";
bool use_trailling = false;
double start_tralling_point =60;
double Trailling_point =60;
string Com;
datetime TradeTime;
bool autoVAOLENH = false;
extern bool showInfo = true;
int ngang = 20 ;
int doc = 20 ;
int coner =3 ;
color mau = clrRed ;
bool showLinegapthep = true;
bool showLinenhoi = true;
bool chophepgiaodich = true;
/*
extern string chuoilotsell = "1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40_41_42_43_44_45_46_47_48_49_50";
extern string chuoiTPsell = "4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_4000_";
extern string chuoikhoangCachsell ="2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000_2000";
*/
double khoangcach[120],hesoLot[120],hesotp[120],hesosl[120] ;
double khoangCachLenh[120];
bool active=true;
string sym;
extern string note = "";
double bidask,stoplv;
bool testing = false;
void init()
{
// код доступен только после оплаты
}
int maxx;
void deinit()
{}
void makepanel()
{
creat_trade_button("CLOSE ALL",20,80,90,15,2,clrGreen,0);
creat_trade_button("CLOSE BUY",20,100,90,15,2,clrGreen,0);
creat_trade_button("CLOSE SELL",20,120,90,15,2,clrGreen,0);
}
void OnTick()
{
// код доступен только после оплаты
}//end void
void ObjectText(string ObjName,string ObjText,int X,int Y,int fontSize,color clr_,int coner)
{
ObjectDelete(0,ObjName);
int Check=ObjectFind(0,ObjName);
if(Check<0)
{
ObjectCreate(ObjName,OBJ_LABEL,0,0,0); //--> H?m ch?nh đḿ vḿ
}
ObjectSetText(ObjName,ObjText,fontSize,"Verdana",clr_);
ObjectSet(ObjName,OBJPROP_CORNER,coner);
ObjectSet(ObjName,OBJPROP_BGCOLOR,clrBlack);
ObjectSet(ObjName,OBJPROP_XDISTANCE,X);
ObjectSet(ObjName,OBJPROP_YDISTANCE,Y);
}
void drawHLine(string objname, double price, color c, int style, int width, int wind)
{
ObjectDelete(0,objname);
if(ObjectFind(objname)==-1)
{
ObjectCreate(objname,OBJ_HLINE,wind,0,price);
}
ObjectSet(objname, OBJPROP_COLOR, c);
ObjectSet(objname, OBJPROP_STYLE, style);
ObjectSet(objname, OBJPROP_WIDTH, width);
}
int tonglenhopenb,tonglenhopens;
void show()
{
string textb = dem[OP_BUY]+" lenh BUY = "+ tonglot[OP_BUY]+" lot --> "+sumprofit[OP_BUY]+"$\n";
string texts = dem[OP_SELL]+" lenh SELL = "+ tonglot[OP_SELL]+" lot --> "+sumprofit[OP_SELL]+"$\n";
ObjectText("ghi chu b",textb,ngang,doc,12,mau,coner);
ObjectText("ghi chu s",texts,ngang,doc+20,12,mau,coner);
ObjectText("ghi chu equity",AccountEquity()+" $ ",ngang,doc+40,12,mau,coner);
}
int indexNow;
double tonglott;
double giacaonhat[2];
double giathapnhat[2];
int demlenh[6][120],dex[6],dem[6];//,maxdex[2];
double tinhtb[2],tonglot[2],giatrungbinh[2],giatptrungbinh[2];
double tpb,slb,tps,sls;
double lotcaonhat[2],sumprofit[2],fistlot[2];//,khoangcachlonnhat[2];
double fistprice[2];
void checkOnline()
{
ArrayInitialize(demlenh,0);
ArrayInitialize(giathapnhat,100000);
ArrayInitialize(giacaonhat,0);
ArrayInitialize(dex,0);
ArrayInitialize(fistlot,0);
ArrayInitialize(dem,0);
ArrayInitialize(tinhtb,0);
ArrayInitialize(tonglot,0);
ArrayInitialize(lotcaonhat,0);
ArrayInitialize(sumprofit,0);
ArrayInitialize(fistprice,0);
tonglott=0;
for(int i=OrdersTotal(); i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
continue;
}
if(OrderSymbol() != Symbol())
{
continue;
}
int idx = StringToInteger(catchuoi(OrderComment(),"(",")",0));
if(OrderMagicNumber()!=Magic)
{
continue;
}
dem[OrderType()]++;
if(idx > dex[OrderType()])
{
dex[OrderType()] = idx;
}
demlenh[OrderType()][idx]++;
if(OrderType()>=2)
{
continue;
}
tonglott += OrderLots();
sumprofit[OrderType()]+= OrderProfit()+OrderSwap()+OrderCommission();
if(OrderType()==OP_SELL)
{
tonglot[OP_SELL]+= OrderLots();
tinhtb[OP_SELL]+= OrderOpenPrice()*OrderLots();
if(OrderOpenPrice()>giacaonhat[OP_SELL])
{
giacaonhat[OP_SELL]= OrderOpenPrice();
lotcaonhat[OP_SELL] =OrderLots();
}
if(OrderOpenPrice()<giathapnhat[OP_SELL])
{
giathapnhat[OP_SELL]= OrderOpenPrice();
}
}// end sell
if(OrderType()==OP_BUY)
{
tonglot[OP_BUY]+= OrderLots();
tinhtb[OP_BUY]+= OrderOpenPrice()*OrderLots();
if(OrderOpenPrice()<giathapnhat[OP_BUY])
{
giathapnhat[OP_BUY]= OrderOpenPrice();
lotcaonhat[OP_BUY] = OrderLots();
}
if(OrderOpenPrice()>giacaonhat[OP_BUY])
{
giacaonhat[OP_BUY]= OrderOpenPrice();
}
}// end buy
}//end for
if(fistprice[OP_BUY]>0&& giathapnhat[OP_BUY] ==100000)
{
giathapnhat[OP_BUY] =fistprice[OP_BUY];
}
if(fistprice[OP_SELL]>0&& giacaonhat[OP_SELL] ==0)
{
giacaonhat[OP_SELL] =fistprice[OP_SELL];
}
if(tonglot[OP_BUY] >0&& tp_point>0)
{
giatrungbinh[OP_BUY] = tinhtb[OP_BUY]/ tonglot[OP_BUY];
tpb = NormalizeDouble(giatrungbinh[OP_BUY]+tp_point*Point,Digits);
}
if(tonglot[OP_SELL] >0&& sl_point>0)
{
giatrungbinh[OP_SELL] = tinhtb[OP_SELL]/tonglot[OP_SELL];
tps = NormalizeDouble(giatrungbinh[OP_SELL]-tp_point*Point,Digits);
}
if(hesosl[dex[OP_SELL]]==0)
{
sls=0;
}
if(hesosl[dex[OP_BUY]]==0)
{
slb=0;
}
}
string ghichu;
int magg;
enum modedatlenh
{
PRICE=1,
POINT=2,
PIP =3,
DISTANCE = 4,
};
string catchuoi(string text,string sig1,string sig2, int lenstring)
{
int vitri1 = StringFind(text,sig1,0);
int vitri2 = StringFind(text,sig2,0);
int dodai = vitri2-vitri1-1;
int batdau = vitri1+1;
if(lenstring >0)
{
dodai = lenstring;
batdau += StringLen(sig1);
}
string res = StringSubstr(text,batdau,dodai);
return(res);
}
int vaoLenh(int typee,string symm, double lott, double pricee, double slllll,double tppppp,int Magicc, string comm,modedatlenh mode)
{
int kq = 0;
if(lott ==0)
{
return(kq);
}
int normallotunit ;
if(MarketInfo(symm, MODE_MINLOT)== 0.01)
{
normallotunit = 2;
}
if(MarketInfo(symm, MODE_MINLOT)== 0.1)
{
normallotunit = 1;
}
if(MarketInfo(symm, MODE_MINLOT)== 0.001)
{
normallotunit = 3;
}
lott = NormalizeDouble(lott, normallotunit);
double slprice, tpprice;
color mau;
if(typee== OP_BUY)
{
pricee = MarketInfo(symm,MODE_ASK);
}
if(typee== OP_SELL)
{
pricee = MarketInfo(symm,MODE_BID);
}
if(mode == DISTANCE)
{
if((typee+2)%2== OP_BUY)
{
if(slllll!=0)
slprice = pricee - slllll;
if(tppppp!=0)
tpprice = pricee + tppppp;
mau = clrBlue;
}
if((typee+2)%2== OP_SELL)
{
if(slllll!=0)
slprice = pricee + slllll;
if(tppppp!=0)
tpprice = pricee - tppppp;
mau = clrRed;
}
}
if(mode == POINT)
{
if((typee+2)%2== OP_BUY)
{
if(slllll!=0)
slprice = pricee - slllll*MarketInfo(symm,MODE_POINT);
if(tppppp!=0)
tpprice = pricee + tppppp*MarketInfo(symm,MODE_POINT);
mau = clrBlue;
}
if((typee+2)%2== OP_SELL)
{
if(slllll!=0)
slprice = pricee + slllll*MarketInfo(symm,MODE_POINT);
if(tppppp!=0)
tpprice = pricee - tppppp*MarketInfo(symm,MODE_POINT);
mau = clrRed;
}
}
if(mode == PIP)
{
if((typee+2)%2== OP_BUY)
{
if(slllll!=0)
slprice = pricee - slllll*10*MarketInfo(symm,MODE_POINT);
if(tppppp!=0)
tpprice = pricee + tppppp*10*MarketInfo(symm,MODE_POINT);
mau = clrBlue;
}
if((typee+2)%2== OP_SELL)
{
if(slllll!=0)
slprice = pricee + slllll*10*MarketInfo(symm,MODE_POINT);
if(tppppp!=0)
tpprice = pricee - tppppp*10*MarketInfo(symm,MODE_POINT);
mau = clrRed;
}
}
if(mode==PRICE)
{
slprice = slllll;
tpprice = tppppp;
}
if(typee %2 == OP_BUY)
{
tpprice = MathMax(tpprice,Bid + MarketInfo(Symbol(),MODE_STOPLEVEL)*Point);
slprice = MathMin(slprice,Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point);
}
if(typee %2 == OP_SELL)
{
slprice = MathMax(slprice,Bid + MarketInfo(Symbol(),MODE_STOPLEVEL)*Point);
tpprice = MathMin(tpprice,Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point);
}
pricee = NormalizeDouble(pricee,MarketInfo(symm, MODE_DIGITS));
slprice = NormalizeDouble(slprice,MarketInfo(symm, MODE_DIGITS));
tpprice = NormalizeDouble(tpprice,MarketInfo(symm, MODE_DIGITS));
if(slllll==0)
{
slprice =0;
}
if(tppppp==0)
{
tpprice =0;
}
/* AccountFreeMarginCheck(Symbol(),typee%2,lott);
if(
((AccountStopoutMode() == 1) && (AccountFreeMarginCheck(Symbol(), typee%2, lott) > AccountStopoutLevel()))
|| ((AccountStopoutMode() == 0) && (((AccountFreeMarginCheck(Symbol(), typee%2, lott)/AccountEquity()) * 100) > AccountStopoutLevel()))
)
{
double thanhcong = OrderSend(symm,typee,lott,pricee,20,0,0,comm,Magicc,0,mau);
if(thanhcong >0)
{
kq = thanhcong;
}
}
else
{
Alert("khong du freemargin de vao "+lott+" lot");
return(kq);
}*/
double thanhcong = OrderSend(symm,typee,lott,pricee,20,0,0,comm,Magicc,0,mau);
if(thanhcong >0)
{
kq = thanhcong;
}
bool sucess =false;
int dem;
if(thanhcong >0 &&(slprice !=0 || tpprice!=0))
{
while(sucess == false && dem<20)
{
sucess = OrderModify(thanhcong,pricee,slprice,tpprice,0,clrNONE);
dem++;
Sleep(50);
}
int error = GetLastError();
if(error !=0 && error !=1)
{
Print(thanhcong +" bi loi modify: "+ error+"/price: "+pricee+"/sl: "+slprice+"/tp: "+tpprice);
}
}
return (kq);
}
void donglenhtoanbo()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
continue;
}
if(OrderSymbol()!=sym)
{
continue;
}
if(OrderType()<2)
{
DongLenh_Ticket(OrderTicket(), OrderLots());
}
if(OrderType()>=2)
{
int rec = OrderDelete(OrderTicket(),CLR_NONE);
}
}
}
void DONGLENH_theo_danhdau(string danhdauc)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
continue;
}
if(OrderType()<2)
{
continue;
}
if(StringFind(OrderComment(),danhdauc,0)>=0)
{
OrderDelete(OrderTicket());
}
}
}
void DONGLENH_theo_type(int op1)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
continue;
}
if(OrderSymbol()!=Symbol())
{
continue;
}
if(OrderMagicNumber()!=Magic&&OrderMagicNumber()!=0)
{
continue;
}
if(OrderType()==op1)
{
DongLenh_Ticket(OrderTicket(), OrderLots());
}
}
}
void RemoveObjects(string sig)
{
for(int i = ObjectsTotal(); i >=0; i--)
{
string name = ObjectName(i);
if(StringFind(name,sig,0)>=0)
{
if(StringFind(name,"Rectangle",0)>=0)
{
continue;
}
ObjectDelete(name);
}
}
}
string thisrecname,name;
double linedn,lineup;
void DongLenh_Ticket(int ticket,double lot)
{
int Slippage=3;
if(!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
return;
}
if(lot==0)
{
lot = OrderLots();
}
if(OrderCloseTime()!=0)
{
return;
}
double price;
RefreshRates();
while(OrderCloseTime()==0)
{
if(MathMod(OrderType(),2)==0)
{
price=MarketInfo(OrderSymbol(),MODE_BID);
}
else
{
price=MarketInfo(OrderSymbol(),MODE_ASK);
}
if(OrderClose(ticket,lot,price,Slippage,Gold))
{
break;
Показано первые 50% кода (символов: 22916)
Что вы получите после оплаты
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? Адрес передаётся вместе с заказом в магазин и сохраняется для связи заказа с оплатой. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.