Скачать MetaTrader 5

MQL4. Открытие и закрытие сделки с первого бара.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Где найти программиста? В сервисе Фриланс!
Anna_89
507
Anna_89 2015.11.20 09:51 
Здравствуйте. Подскажите, пожалуйста, как в советнике прописать открытие и закрытие сделки с первого бара. У меня советник открывает сделки с четвертого.
mmmoguschiy-new
1367
mmmoguschiy-new 2015.11.20 11:25  
а поподробнее? может код советника приложите? ))
Ihor Herasko
9072
Ihor Herasko 2015.11.20 11:27  

Нужны подробности: что за советник (прикрепите весь файл mq4 или приведите участок кода), что подразумевается под "открывает сделки с четвертого"?

Пока представляется такая картина: при запуске советник ждет 4 бара, а только потом, если есть сигнал, открывает сделку. До этого наличие сигнала не приводит к открытию сделки.

Yuri Evseenkov
2303
Yuri Evseenkov 2015.11.20 11:53  
Anna_89:
Здравствуйте. Подскажите, пожалуйста, как в советнике прописать открытие и закрытие сделки с первого бара. У меня советник открывает сделки с четвертого.
Здравствуйте. Открывать и закрывать сделки можно только по  ценам текущего-нулевого бара. Бары считаются справа налево 1,2,3,4 бары -это уже история и по ним сделок не откроишь. Если нужно открыть сделку по будущему бару, то в алгоритме нужно время нулевого бара принять за точку отсчета глобальная переменная кода long T0=Time[0] и если при следующем открытии нового бара T0<Time[0] то обращатся к торговым функциям.
long T0;
void OnInit(){T0=(long)Time[0];} 
void OnTick(){
if (T0<Time[0]){T0=(long)Time[0];// обращение к торговым функциям
}
}
 
mmmoguschiy-new
1367
mmmoguschiy-new 2015.11.20 13:17  
Yuri Evseenkov:
Здравствуйте. Открывать и закрывать сделки можно только по  ценам текущего-нулевого бара.
тут непросвещенному человеку может показаться, что открывать можно по любой цене из всего диапазона нулевого бара... на самом деле открыться ты можешь по текущим наилучшим ценам Bid либо Ask. Бары это уже формальность ))
Anna_89
507
Anna_89 2015.11.22 21:12  

Прикрепляю код.

int start()
  {
   int cnt,tiket,total;

   total=OrdersTotal();
   if(total<1)
     {
      if(GetSignal()==1 && Time[0]!=LastTime)
        {
         tiket=OrderSend(Symbol(),OP_BUY,Lot,Ask,30,0,0,"",Magic,0,clrGreen);
         if(tiket>0)LastTime=Time[0];
         return(0);
        }
      if(GetSignal()==-1 && Time[0]!=LastTime)
        {
         tiket=OrderSend(Symbol(),OP_SELL,Lot,Bid,30,0,0,"",Magic,0,clrRed);
         if(tiket>0)LastTime=Time[0];
         return(0);
        }
      return(0);
     }
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)
           {
            if(GetSignal()==-1)
              {
               OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
               return(0);
              }
           }
         else
           {
            if(GetSignal()==1)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
               return(0);
              }
           }
        }
     }

   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetSignal()
  {
   double Buf0=iCustom(Symbol(),0,"MARSI",ARSI_Period,AMA_Period,0,0);
   double Buf1=iCustom(Symbol(),0,"MARSI",ARSI_Period,AMA_Period,0,1);
   double Buf2=iCustom(Symbol(),0,"MARSI",ARSI_Period,AMA_Period,0,2);
   double Buf3=iCustom(Symbol(),0,"MARSI",ARSI_Period,AMA_Period,0,3);
   double Val0=iCustom(Symbol(),0,"MACD AlertArrow",Fast_MA_Period,Slow_MA_Period,Signal_MA_Period,0,0);

   int vSig=0;
   if(Buf2<50 && Buf0<50 && Val0>0.0)vSig=1;
   else
      if(Buf1>50 && Buf3>50 && Val0<0.0)vSig=-1;
   return(vSig);
  }  
Ihor Herasko
9072
Ihor Herasko 2015.11.22 21:20  

Еще потребуются коды индикаторов MARSI и MACD AlertArrow.

Хотя уже есть некоторая догадка: сигналы от индикатора MARSI для открытия сделки берутся по данным последних четырех баров. В итоге сигнал открытия запаздывает. Но это, к сожалению, суть всех индикаторов: они все запаздывают, т. к. рассчитываются по уже имеющимся данным. Они не могут использовать данные, которые только будут в будущем. )) 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий