Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Bezhan
35
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
Модератор
85406
Vladimir Karputov  
Код в сообщение форума лучше вставлять так: Правильно вставляем код на форуме
Victor Nikolaev
Модератор
15901
Victor Nikolaev  
bezhan.ganj:

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

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

Renat Akhtyamov
7926
Renat Akhtyamov  
Dmitiry Ananiev:

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

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

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

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

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

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

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

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

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

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


NDS13
5
NDS13  

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

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


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