Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1512

 

Кто подскажет следующий код:

если ЗАКРЫЛАСЬ сетка ордеров (больше 2-х одного типа), то ОСТАНОВИТЬ ТОРГОВЛЮ до конца дня (или какое-то время которое можно задать в часах, минутах).

Подсчет истории как найти по одинаковым типам ордера еще как-то смогу, но как остановить до конца дня точно не знаю. Всех с Троицей)

 
Igor Makanu:

не нормальный, по 8 байт замучаешься передавать что-нибудь

Ну смотря для каких целей, если просто напомнить о себе, тогда восьми хватит :)

 
Порт-моне тв:

Кто подскажет следующий код:

если ЗАКРЫЛАСЬ сетка ордеров (больше 2-х одного типа), то ОСТАНОВИТЬ ТОРГОВЛЮ до конца дня (или какое-то время которое можно задать в часах, минутах).

Подсчет истории как найти по одинаковым типам ордера еще как-то смогу, но как остановить до конца дня точно не знаю. Всех с Троицей)

//+----------------------------------------------------------------------------+
//| Подсчет ордеров                                                            |
//+----------------------------------------------------------------------------+
//| -1 - Все типы ордеров                                                      |
//|  0 - ордера типа BUY        3 - ордера типа SELLLIMIT                      |
//|  1 - ордера типа SELL       4 - ордера типа BUYSTOP                        |
//|  2 - ордера типа BUYLIMIT   5 - ордера типа SELLSTOP                       |
//+----------------------------------------------------------------------------+
double GetCloseOrderType(int order_type)
  { double p = 0;
   for(int pos=OrdersHistoryTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)==true)
        {
         if(OrderCloseTime()>=время начала дня)
           { 
            if(OrderType()==order_type || order_type == -1) cnt++;
           }
        }
     }
   return(p);
  }
 
Порт-моне тв:

Кто подскажет следующий код:

если ЗАКРЫЛАСЬ сетка ордеров (больше 2-х одного типа), то ОСТАНОВИТЬ ТОРГОВЛЮ до конца дня (или какое-то время которое можно задать в часах, минутах).

Подсчет истории как найти по одинаковым типам ордера еще как-то смогу, но как остановить до конца дня точно не знаю. Всех с Троицей)

/// получаем время конца (по умолч.текущего) дня. То есть время последней секунды дня

datetime EndOfDay(datetime tim=0) {

   if (tim==0) tim=TimeCurrent();

   datetime dt;

   TimeToStruct(tim,dt);

   dt.hour=23;

   dt.min=59;

   dt.sec=59;

   return StructToTime(dt);

}

/// где-то в торговой логике, отрывки

datetime tradeAllowedFrom; // в глобальной области

....

tradeAllowedFrom=EndOfDay(); // где сетку проверяем : запрещаем торговлю до конца дня

....

if (TimeCurrent()>tradeAllowedFrom) { // проверка разрешения торговли

   Buy(); // Sell();

}

если я правильно понял вопрос, то примерно так (сам по себе принцип)

 
Aleksei Stepanenko:

Ну смотря для каких целей, если просто напомнить о себе, тогда восьми хватит :)

если напомнить о себе, тогда лучше пользовательское событие в OnChartEvent() бросать, имхо, удобнее


MakarFX:

Кто подскажет следующий код:

если ЗАКРЫЛАСЬ сетка ордеров (больше 2-х одного типа), то ОСТАНОВИТЬ ТОРГОВЛЮ до конца дня (или какое-то время которое можно задать в часах, минутах).

поиск по истори ордеров с даты начала дня (сегодня, или ТФ Д1 получить нулевой бар или с datetime время тика преобразовать)

если хоть один ордер был найден в истории с датой больше заданной  - выход из функции, с результатом true 

в OnTick() в самом верху вызов такой функции с параметром дата (сегодня) 


писать лень, там с десяток строк, у Кима были функции поиска ордеров в истории по дате

 
Порт-моне тв:Подсчет истории как найти по одинаковым типам ордера еще как-то смогу, но как остановить до конца дня точно не знаю. Всех с Троицей)
bool trade_buy;
bool trade_sell;

if(кол-во закрытых ордеров buy>2)
trade_buy=false;
else
trade_buy=true;

if(кол-во закрытых ордеров sell>2)
trade_sell=false;
else
trade_sell=true;
 
Maxim Kuznetsov:

/// получаем время конца (по умолч.текущего) дня. То есть время последней секунды дня

datetime EndOfDay(datetime tim=0) {

   if (tim==0) tim=TimeCurrent();

   datetime dt;

   TimeToStruct(tim,dt);

   dt.hour=23;

   dt.min=59;

   dt.sec=59;

   return StructToTime(dt);

}

/// где-то в торговой логике, отрывки

datetime tradeAllowedFrom; // в глобальной области

....

tradeAllowedFrom=EndOfDay(); // где сетку проверяем : запрещаем торговлю до конца дня

....

if (TimeCurrent()>tradeAllowedFrom) { // проверка разрешения торговли

   Buy(); // Sell();

}

если я правильно понял вопрос, то примерно так (сам по себе принцип)

Благодарю за оперативный ответ, но вот это "запрещаем торговлю", я не знаю как реализовать, за код благодарен.  
 
MakarFX:
trade sell / trade buy - функцией как!? 
 
Порт-моне тв:
trade sell / trade buy - функцией как!? 


//+------------------------------------------------------------------+
bool trade_buy;
bool trade_sell;
//+----------------------------------------------------------------------------+
//| Подсчет ордеров                                                            |
//+----------------------------------------------------------------------------+
//| -1 - Все типы ордеров                                                      |
//|  0 - ордера типа BUY        3 - ордера типа SELLLIMIT                      |
//|  1 - ордера типа SELL       4 - ордера типа BUYSTOP                        |
//|  2 - ордера типа BUYLIMIT   5 - ордера типа SELLSTOP                       |
//+----------------------------------------------------------------------------+
double GetCloseOrderType(string symb="",int order_type)
  {
   double p = 0;
   if(symb=="0") symb=_Symbol;
   for(int pos=OrdersHistoryTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)==true)
        {
         if(OrderSymbol()==symb || symb=="")
           {
            if(OrderCloseTime()>=iTime(_Symbol,PERIOD_D1,0))
              { 
               if(OrderType()==order_type || order_type == -1) cnt++;
              }
           }
        }
     }
   return(p);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(GetCloseOrderType(_Symbol,0)>2)
      trade_buy=false;
   else
      trade_buy=true;

   if(GetCloseOrderType(_Symbol,1)>2)
      trade_sell=false;
   else
      trade_sell=true;
//---
   if(trade_buy)
     {
      твое условие открытия покупок
     }
   if(trade_sell)
     {
      твое условие открытия продаж
     }
//---
  }
//+------------------------------------------------------------------+
 
Vitaly Muzichenko:

Если что, взят отсю

Я новичок в программировании, не очень хорошо, можыте переделать и выложыть для скачивания ???

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