Обсуждение статьи "Универсальный торговый эксперт: работа с отложенными ордерами и поддержка хеджинга (часть 5)" - страница 3

 
Сергей Криушин:
Не получается - этих строк нет в самом Impulse...
Судя по сообщениям компилятора они есть в Impulse, но их вызов недоступен, потому что функции Ask, Bid, и пр. пр. не определены в вашей версии CStrategy. 
 
Vasiliy Sokolov:
Судя по сообщениям компилятора они есть в Impulse, но их вызов недоступен, потому что функции Ask, Bid, и пр. пр. не определены в вашей версии CStrategy. 
Как их туда определить... версия должна быть моя... вставить из своей торговой стратегии... они же Ask, Bid, вроде одинаковые для всех общие...
 
Сергей Криушин:
Как их туда определить... версия должна быть моя... вставить из своей торговой стратегии... они же Ask, Bid, вроде одинаковые для всех общие...
Внизу статьи прикреплен файл strategyarticle_20.04.16.zip. Скачайте его, распакуйте и замените все предыдущие файлы CStrategy на эти новые.  
 
Сергей Криушин:
Там есть CStrategyList Manager; а класса Impuls нет... может из-за этого
Как же нет? MQL5\Include\Strategy\Samples\Impulse.mqh
 
Vasiliy Sokolov:
Как же нет? MQL5\Include\Strategy\Samples\Impulse.mqh
Да, все пошло спасибо большое.. все нормально другой счет заработал... наверное нужно было терминал перезагрузить... не знаю все компелировалось, а сов застрял... так что извините...вот так всегда где-то что-то... и ищешь пол дня...3 раза скачивал и всё проверял...))
 
Как бы стоповые сделать лимитными, так как вроде больше просит лимитники...и поменять расстояние... и как бы лот  уменьшть до 0.01... так много всего что ничего не найти...))
 
Сергей Криушин:
Как бы стоповые сделать лимитными, так как вроде больше просит лимитники...и поменять расстояние... и как бы лот  уменьшть до 0.01... так много всего что ничего не найти...))
MM.SetLotFixed(0.01);
if(buy_stop_total == 0 && task == ORDER_TASK_MODIFY)
   Trade.BuyLimit(MM.GetLotFixed(), target, ExpertSymbol(), 0, 0, NULL);
Как видите ничего сложного. Значение target придется рассчитать самостоятельно.
 
Vasiliy Sokolov:
Как видите ничего сложного. Значение target придется рассчитать самостоятельно.

Пробовал сходу так - не получается - так стоповые и идут...

//+------------------------------------------------------------------+
void CImpulse::InitSell(const MarketEvent &event)
{
   if(!IsTrackEvents(event))return;                      
   if(positions.open_sell > 0) return;                    
   int sell_limit_total = 0;
   ENUM_ORDER_TASK task;
   double target = Ask() - Ask()*(m_percent/100.0);
   if(target < Moving.OutValue(0))                    // Цена срабатывания ордера должна быть выше скользящей средней
      task = ORDER_TASK_DELETE;
   else
      task = ORDER_TASK_MODIFY;
   for(int i = PendingOrders.Total()-1; i >= 0; i--)
   {
      CPendingOrder* Order = PendingOrders.GetOrder(i);
      if(Order == NULL || !Order.IsMain(ExpertSymbol(), ExpertMagic()))
         continue;
      if(Order.Type() == ORDER_TYPE_SELL_LIMIT)
      {
         if(task == ORDER_TASK_MODIFY)
         {
            sell_limit_total++;
            Order.Modify(target);
         }
         else
            Order.Delete();
      }
   }
   if(sell_limit_total == 0 && task == ORDER_TASK_MODIFY)
      Trade.SellLimit(MM.GetLotFixed(), target, ExpertSymbol(), 0, 0, NULL);
}
//+------------------------------------------------------------------+
//| Работа с отложенными ордерами SellStop для открытия короткой     |
//| позиции                                                          |
//+------------------------------------------------------------------+
void CImpulse::InitBuy(const MarketEvent &event)
{
   if(!IsTrackEvents(event))return;                      
   if(positions.open_buy > 0) return;                    
   int buy_limit_total = 0;
   ENUM_ORDER_TASK task;
   double target = Bid() + Bid()*(m_percent/100.0);
   if(target > Moving.OutValue(0))                    // Цена срабатывания ордера должна быть выше скользящей средней
      task = ORDER_TASK_DELETE;
   else
      task = ORDER_TASK_MODIFY;
   for(int i = PendingOrders.Total()-1; i >= 0; i--)
   {
      CPendingOrder* Order = PendingOrders.GetOrder(i);
      if(Order == NULL || !Order.IsMain(ExpertSymbol(), ExpertMagic()))
         continue;
      if(Order.Type() == ORDER_TYPE_BUY_LIMIT)
      {
         if(task == ORDER_TASK_MODIFY)
         {
            buy_limit_total++;
            Order.Modify(target);
         }
         else
            Order.Delete();
      }
   }
   if(buy_limit_total == 0 && task == ORDER_TASK_MODIFY)
      Trade.BuyLimit(MM.GetLotFixed(), target, ExpertSymbol(), 0, 0, NULL);
}
 
Сергей Криушин:

Пробовал сходу так - не получается - так стоповые и идут...

Сейчас проверю...
 
Vasiliy Sokolov:
Сейчас проверю...

Добавил в сов уровни СЛ и ТП и трал - на Демо Метаквотов вообще отлично показывает себя...при переходе на реал опять что-то не видит - выдает ошибки - главное скопировал все чистоганом, всю библиотеку - и все равно ошибки... что опять не так...большая просьба - нельзя ли как-то скомпоновать в одном советнике с комментариями...так сказать, для наглядного понимания сути всего описанного...С большим уважением к вашей огромной проделанной работе...спасибо большое...Еще хотелось бы знать - это только у меня такие непонятки или еще кто-то тестирует... и без ошибок...

'Trade.mqh'     Trade.mqh       1       1
'Object.mqh'    Object.mqh      1       1
'StdLibErr.mqh' StdLibErr.mqh   1       1
'SymbolInfo.mqh'        SymbolInfo.mqh  1       
'OrderInfo.mqh' OrderInfo.mqh   1       1
'HistoryOrderInfo.mqh'  HistoryOrderInfo.mqh    1       1
'PositionInfo.mqh'      PositionInfo.mqh        1       1
'DealInfo.mqh'  DealInfo.mqh    1       1
'ENUM_ACCOUNT_MARGIN_MODE' - declaration without type   Trade.mqh       36      4
'POSITION_TICKET' - undeclared identifier       PositionInfo.mqh        84      37
'PositionGetInteger' - no one of the overloads can be applied to the function call      PositionInfo.mqh        84      18
'ENUM_ACCOUNT_MARGIN_MODE' - undeclared identifier      PositionInfo.mqh        259     4
'margin_mode' - undeclared identifier   PositionInfo.mqh        259     29
'margin_mode' - some operator expected  PositionInfo.mqh        259     29
'ACCOUNT_MARGIN_MODE' - undeclared identifier   PositionInfo.mqh        259     86
'ACCOUNT_MARGIN_MODE' - cannot convert enum     PositionInfo.mqh        259     86
'AccountInfoInteger' - some operator expected   PositionInfo.mqh        259     67
'ACCOUNT_MARGIN_MODE_RETAIL_HEDG…' - undeclared identifier      PositionInfo.mqh        264     20
'PositionSelectByTicket' - function not defined PositionInfo.mqh        325     11
'ENUM_ACCOUNT_MARGIN_MODE' - undeclared identifier      PositionInfo.mqh        332     4
'margin_mode' - undeclared identifier   PositionInfo.mqh        332     29
'margin_mode' - some operator expected  PositionInfo.mqh        332     29
'ACCOUNT_MARGIN_MODE' - undeclared identifier   PositionInfo.mqh        332     86
'ACCOUNT_MARGIN_MODE' - cannot convert enum     PositionInfo.mqh        332     86
'AccountInfoInteger' - some operator expected   PositionInfo.mqh        332     67
'ACCOUNT_MARGIN_MODE_RETAIL_HEDG…' - undeclared identifier      PositionInfo.mqh        334     20
'PositionGetTicket' - function not defined      PositionInfo.mqh        336     20
'position' - struct member undefined    Trade.mqh       196     12
'position' - struct member undefined    Trade.mqh       196     35
'position_by' - struct member undefined Trade.mqh       197     12
'position_by' - struct member undefined Trade.mqh       197     35
'position' - struct member undefined    Trade.mqh       50      85
'position_by' - struct member undefined Trade.mqh       51      85
'm_margin_mode' - undeclared identifier Trade.mqh       94      44
'ENUM_ACCOUNT_MARGIN_MODE' - undeclared identifier      Trade.mqh       94      59
'ACCOUNT_MARGIN_MODE' - undeclared identifier   Trade.mqh       94      103
'ACCOUNT_MARGIN_MODE' - cannot convert enum     Trade.mqh       94      103
'AccountInfoInteger' - some operator expected   Trade.mqh       94      84
'position' - struct member undefined    Trade.mqh       354     14
'POSITION_TICKET' - undeclared identifier       Trade.mqh       354     42
'PositionGetInteger' - no one of the overloads can be applied to the function call      Trade.mqh       354     23
'PositionSelectByTicket' - function not defined Trade.mqh       367     8
'position' - struct member undefined    Trade.mqh       373     14
possible loss of data due to type conversion    Trade.mqh       373     22
'position' - struct member undefined    Trade.mqh       427     20
'POSITION_TICKET' - undeclared identifier       Trade.mqh       427     48
'PositionGetInteger' - no one of the overloads can be applied to the function call      Trade.mqh       427     29
'PositionSelectByTicket' - function not defined Trade.mqh       472     8
'position' - struct member undefined    Trade.mqh       492     14
possible loss of data due to type conversion    Trade.mqh       492     23
'PositionSelectByTicket' - function not defined Trade.mqh       513     8
'PositionSelectByTicket' - function not defined Trade.mqh       517     8
'TRADE_ACTION_CLOSE_BY' - undeclared identifier Trade.mqh       529     26
Причина обращения: