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

ms_5.mq4

Похожие материалы по тегам

the gold reaper v4.1 mt5.mq4MQL4 / MetaTrader 4 · 1 общих теговquantum queen x 4.3 (1).mq5MQL5 / MetaTrader 5 · 1 общих теговlizard_1.85.mq4MQL4 / MetaTrader 4 · 1 общих теговoverlaychart.mq4MQL4 / MetaTrader 4 · 1 общих теговmarket crusher ea guidlines.txtMQL · 1 общих теговrobot_wti ea.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Советник для MetaTrader 4, реализующий сеточную торговую логику с управлением сериями ордеров. При запуске размещает начальные ордера buy и sell с фиксированными стопами и лимитами, отслеживает состояние позиций и переходит между состояниями при срабатывании ордеров по тейк-профиту. В зависимости от текущего состояния и количества шагов советник удаляет ненужные отложенные ордера, выставляет новые уровни и модифицирует стоп-лоссы существующих позиций.

Настройки программы

НастройкаОписание
grid Шаг сетки — Базовый размер шага сетки в пунктах, используемый для расчёта ценовых уровней размещения ордеров и стоп-лоссов.
Получить полный код

Поиск по коду файла

#include <stdlib.mqh>
#include <stderror.mqh>

extern double grid             = 30;
       double gridstep         = 6;
       double multk[25]        = {1,1,1,1,1,1,1};
       int    limit            = 3;
       double lotseq[25]       = {1,1,2.5,5.2,9.7,20.9};
       double stepseq[25];
       double gridseqbuy[25];
       double gridseqsell[25];
       double spred;
       int    lastlock, step;
       int    stateold, statecur;
       int    sleeppage        = 3;
       int    magic            = 120976;
       double currentprice, oldprice;
       bool   setall;
       int    lastbuy, lastsell, profitorder;
       double bsp, bstp, slp, sltp, ssp, sstp, blp, bltp;

int Initialization() { 

    statecur = 0;
    stateold=statecur;
    spred=MarketInfo(Symbol(), MODE_SPREAD)*Point;
    RefreshRates();
    currentprice = Bid;
    OpenOrder (OP_SELL, LotSize(0), Bid, Bid+400*Point, Ask-grid*Point, "", magic, Red);
    OpenOrder (OP_BUY, LotSize(0), Ask, Ask-400*Point, Bid+grid*Point, "", magic, Green);
    step = 0;
    for(int i=0;i<=gridstep;i++)
      {
       stepseq[i]=multk[i]*grid*Point;
      }
    setall = SetOrders (LotSize(1), LotSize(1), LotSize(1), LotSize(1));
    SearchLastSellBuy();
    lastlock=0;
  return(0);
}

bool First(){

  int ordcnt=0;
  for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)
      {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       if ((OrderSymbol() == Symbol()) && (OrderTicket() > lastlock) && ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))) {ordcnt++;}
      }
  if (ordcnt>0) {return(false);}
  else {return(true);}
}

double LotSize(int tstep) {

  for (int i=0;i<=limit;i++)
    double alots=lotseq[i]+alots;
  alots++;

  double rez = lotseq[tstep];
  if (rez < 0.1) {rez = 0.1;}

  return(rez);
}

bool AllPresent() {

     int buycnt = 0;
     int sellcnt = 0;
     int buystopcnt = 0;
     int buylimitcnt = 0;
     int sellstopcnt = 0;
     int selllimitcnt = 0;
     for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)
         {
          OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
          if ((OrderSymbol() == Symbol()) && (OrderTicket() > lastlock))
             {

              switch (OrderType())
                  {
                   case 0: buycnt++;
                           break;
                   case 1: sellcnt++;
                           break;
                   case 2: buylimitcnt++;
                           break;
                   case 3: selllimitcnt++;
                           break;
                   case 4: buystopcnt++;
                           break;
                   case 5: sellstopcnt++;
                           break;
                  }
             }
         }
     if (buycnt > sellcnt) {step = buycnt-1;} else {step = sellcnt-1;}
     Print ("Step=",step," Buy=",buycnt," Sell=",sellcnt," BuyStopCnt==",buystopcnt," BuyLimitCnt==",buylimitcnt," SellStopCnt==",sellstopcnt," SellLimitCnt==",selllimitcnt," Bid=",Bid);
     if ((buystopcnt==0) || (buylimitcnt==0) || (sellstopcnt==0) || (selllimitcnt==0)) {return(false);}
     else {return(true);}
} 

int SearchLastSellBuy(){

  lastbuy=0;
  lastsell=0;
  for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)
      {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       if ((OrderSymbol() == Symbol()) && (OrderTicket() > lastlock) && (OrderType() == OP_BUY))
          {
           if (OrderTicket()>lastbuy) {lastbuy=OrderTicket();}
          }
       if ((OrderSymbol() == Symbol()) && (OrderTicket() > lastlock) && (OrderType() == OP_SELL))
          {
           if (OrderTicket()>lastsell) {lastsell=OrderTicket();}
          }   
      }

  return(0);
}

bool OpenOrder(int cmd, double vol, double prc, double stl, double tpt, string com, int mag, color clr) {
  int err, max;

  prc=NormalizeDouble(prc,Digits);
  stl=NormalizeDouble(stl,Digits);
  tpt=NormalizeDouble(tpt,Digits);
  vol=NormalizeDouble(vol,1);
  int ticket = -1;
  max = 100;
  while ((ticket < 0) && (max != 0)) 
    {
     RefreshRates();
     ticket=OrderSend(Symbol(), cmd, vol, prc, sleeppage, stl, tpt, com, mag, 0, clr);

     err=GetLastError();
     if (ticket == -1) 
        {
         Comment("Error=", err, "   ", ErrorDescription(err));
         Sleep(6000);
        }
     else
        {Comment("                                             ");}
     max--;
    }
  Sleep(1000);
  if (max != 0) {return(true);}
  else {return(false);}
}

int TakeProfit(){

   profitorder=0;
   for (int cnt=HistoryTotal()-1;cnt>=0;cnt--)
       {
        OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
        if ((OrderSymbol() == Symbol()) && (OrderType() == OP_SELL) || (OrderType() == OP_BUY))
           if (OrderTicket() > profitorder)
              if (OrderClosePrice() == OrderTakeProfit()) {profitorder = OrderTicket();}
       }

   return(profitorder);
}

int LockSearch(){

  lastlock = 0;
  for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)
      {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == 1001001) && (OrderType() == OP_BUY))
          {
           if (OrderTicket()>lastlock) {lastlock=OrderTicket();}
          }
       if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == 1001001) && (OrderType() == OP_SELL))
          {
           if (OrderTicket()>lastlock) {lastlock=OrderTicket();}
          }   
      }
  return(0);
}

bool SetOrders(double bs, double sl, double ss, double bl){

  bool rez, temp;
  rez = true;
  if (statecur==0)
    {
     bsp=currentprice+stepseq[0]+spred;
     bstp=currentprice+stepseq[0]+stepseq[0];
     slp=currentprice+stepseq[0];
     sltp=currentprice+spred;
     ssp=currentprice-stepseq[0];
     sstp=currentprice-stepseq[0]-stepseq[0]+spred;
     blp=currentprice-stepseq[0]+spred;
     bltp=currentprice;

    }
  if (statecur==-1)
    {
     bsp=currentprice+stepseq[step-1]+spred;
     bstp=currentprice+stepseq[step-1]+stepseq[0];
     slp=currentprice+stepseq[step-1];
     sltp=currentprice+stepseq[step-1]-stepseq[0]+spred;
     ssp=currentprice-stepseq[step];
     if (step == limit) {sstp=currentprice-stepseq[step]-stepseq[0]+spred;}
     else {sstp=currentprice-stepseq[step]-stepseq[step+1]+spred;}
     blp=currentprice-stepseq[step]+spred;
     if (step == limit) {bltp=currentprice-stepseq[step]+stepseq[0];}
     else {bltp=currentprice;}

    }
  if (statecur==1)
    {
     bsp=currentprice+stepseq[step]+spred;
     if (step == limit) {bstp=currentprice+stepseq[step]+stepseq[0];}
     else {bstp=currentprice+stepseq[step]+stepseq[step+1];}
     slp=currentprice+stepseq[step];
     if (step == limit) {sltp=currentprice+stepseq[step]-stepseq[0]+spred;}
     else {sltp=currentprice+spred;}
     ssp=currentprice-stepseq[step-1];

Показано первые 50% кода (символов: 8465)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
846,50₽ ≈ $10.35