← К каталогу
Исходный код · ID 756

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 и перейдите к оплате.

Стоимость полного кода
2 292₽