Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Anna_89
521
Anna_89  
Здравствуйте. Подскажите, пожалуйста, как в советнике прописать открытие и закрытие сделки с первого бара. У меня советник открывает сделки с четвертого.
mmmoguschiy-new
1740
mmmoguschiy-new  
а поподробнее? может код советника приложите? ))
Ihor Herasko
11394
Ihor Herasko  

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

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

Yuri Evseenkov
2314
Yuri Evseenkov  
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
1740
mmmoguschiy-new  
Yuri Evseenkov:
Здравствуйте. Открывать и закрывать сделки можно только по  ценам текущего-нулевого бара.
тут непросвещенному человеку может показаться, что открывать можно по любой цене из всего диапазона нулевого бара... на самом деле открыться ты можешь по текущим наилучшим ценам Bid либо Ask. Бары это уже формальность ))
Anna_89
521
Anna_89  

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

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
11394
Ihor Herasko  

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

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

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