Скачать MetaTrader 5

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

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

 Советник должен открыт каждый час по один ордер. В сутки 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);}
Vladimir Karputov
Модератор
55819
Vladimir Karputov  
Код в сообщение форума лучше вставлять так: Правильно вставляем код на форуме
Victor Nikolaev
Модератор
14954
Victor Nikolaev  
bezhan.ganj:

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

Похоже Вы из советника все выкинули. Пока используются для анализа не инициализированные переменные
Dmitiry Ananiev
7117
Dmitiry Ananiev  
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 принудительно поставил равным одному для проверки. Если это какео то условие, то его надо посчитать заранее и присвоить соответствущее значение.

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