помогите исправить советник

 

 Советник должен открыт каждый час по один ордер. В сутки 24 ордеров.  

int start(){
//+------------------------------------------------++------------------------------------------------+
//+------------------------------------------------++------------------------------------------------+
double Lots   =0.1;
datetime Time_Stamp;

int varH1BiasDirection,OrderSetFlag,Pending_Order_Distance;
double Price_Buy=NormalizeDouble(Ask,Digits)+(Pending_Order_Distance*Point);
double Price_Sell=NormalizeDouble(Bid,Digits)-(Pending_Order_Distance*Point);

if(varH1BiasDirection == 1 && Time_Stamp != Hour())
{
   if(OrderSend(Symbol(),OP_BUY,Lots,Ask,4,0,0,0,0,0,Green)>0)
   {
      OrderSetFlag = 1; Time_Stamp = Hour();
   }
   
   if(OrderSend(Symbol(),OP_SELL,Lots,Bid,4,0,0,0,0,0,Red)>0)
   {
      OrderSetFlag = 1; Time_Stamp = Hour();
   }
}

return(0);}
 
Код в сообщение форума лучше вставлять так: Правильно вставляем код на форуме
 
bezhan.ganj:

 Советник должен открыт каждый час по один ордер. В сутки 24 ордеров.  

Похоже Вы из советника все выкинули. Пока используются для анализа не инициализированные переменные
 
input int mag=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//+------------------------------------------------++------------------------------------------------+
//+------------------------------------------------++------------------------------------------------+
   double Lots=0.1;

   int varH1BiasDirection=1,Pending_Order_Distance;
   double Price_Buy=NormalizeDouble(Ask,Digits)+(Pending_Order_Distance*Point);
   double Price_Sell=NormalizeDouble(Bid,Digits)-(Pending_Order_Distance*Point);

   bool BUY,SELL;
   CheckOpenHour(BUY,SELL,mag);

   if(varH1BiasDirection==1 && !BUY)
      int ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,4,0,0,0,0,0,Green);

   if(varH1BiasDirection==1 && !SELL)
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,4,0,0,0,0,0,Red);

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

void CheckOpenHour(bool &BUY,bool &SELL,int _mag)
  {

   BUY=SELL=false;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==_mag)
        {
         datetime opentime=OrderOpenTime();
         MqlDateTime d;
         TimeToStruct(opentime,d);

         if(d.year==Year() && d.mon==Month() && d.day==Day() && d.hour==Hour())
           {
            if(OrderType() ==OP_BUY) BUY = true;
            if(OrderType() ==OP_SELL) SELL = true;
           }

        }
     }
  }
//+------------------------------------------------------------------+

Обратите внимание на выделенные переменные. mag лучше использовать, чтоб советник не трогал чужие ордера. 

varH1BiasDirection принудительно поставил равным одному для проверки. Если это какео то условие, то его надо посчитать заранее и присвоить соответствущее значение.

 
Dmitiry Ananiev:

Обратите внимание на выделенные переменные. mag лучше использовать, чтоб советник не трогал чужие ордера. 

varH1BiasDirection принудительно поставил равным одному для проверки. Если это какео то условие, то его надо посчитать заранее и присвоить соответствущее значение.

5 часов равно 5-ти в течении всего часа// пример

подозреваю что не будет работать

нужно держать в уме предыдущее время

а также инициализировать эту же самую переменную, чтобы при часе равном нулю все работало нормально

то есть если включить советник в это время

например, int prevHour=-1;

также, запоминать предыдущее время желательно только в случае успешного открытия ордера

int prevHour=-1;
//======
 if(d.hour!=prevHour)
{...}
prevHour=d.hour;


 

помогите исправить советник

ДЕКОМПИЛЯЦИЯ ЗАПРЕЩЕНА!


Причина обращения: