Discussão do artigo "Expert Advisor Universal: Ordens Pendentes e Suporte para Cobertura de Risco (Parte 5)" - página 3

 
Сергей Криушин:
Não funciona - essas linhas não estão no próprio Impulse....
De acordo com as mensagens do compilador, elas estão no Impulse, mas não podem ser chamadas porque as funções Ask, Bid, etc. não estão definidas em sua versão do CStrategy.
 
Vasiliy Sokolov:
De acordo com as mensagens do compilador, elas estão no Impulse, mas sua chamada não está disponível porque as funções Ask, Bid etc. não estão definidas em sua versão do CStrategy.
Como defini-las lá... a versão deve ser a minha versão... inserir em sua estratégia de negociação... As funções Ask, Bid, etc. são as mesmas para todas as estratégias comuns...
 
Сергей Криушин:
Como você os define lá... a versão tem que ser minha... inserida em minha estratégia de negociação... Eles são Ask, Bid, parece ser o mesmo para todos os comuns...
O arquivo strategyarticle_20.04.16.zip está anexado no final do artigo. Faça o download, descompacte-o e substitua todos os arquivos CStrategy anteriores por esses novos.
 
Сергей Криушин:
Existe o CStrategyList Manager, mas a classe Impuls não está lá... talvez seja esse o motivo.
Por que não? MQL5\Include\Strategy\Samples\Impulse.mqh
 
Vasiliy Sokolov:
Como não? MQL5/Include/Strategy/Samples/Impulse.mqh.
Sim, funcionou bem, muito obrigado... a outra conta funcionou bem.... Acho que eu deveria ter reiniciado o terminal... Não sei, tudo estava sendo compilado, mas a coruja ficou presa... Sinto muito... é assim que acontece, sempre há algo em algum lugar... e procurei por meio dia... 3 vezes baixei e verifiquei tudo... )))))
 
Como os stop ones se tornariam limit ones, já que parece que há mais pedidos de limit ones... e mudaria a distância..... e como reduzir o lote para 0,01.... tantas coisas que não consigo encontrar nada...))))
 
Сергей Криушин:
Como os stop ones se tornariam limit ones, já que parece que há mais pedidos de limit ones... e mudaria a distância..... e como reduzir o lote para 0,01.... tantas coisas que é impossível encontrar qualquer coisa...))))
MM.SetLotFixed(0.01);
if(buy_stop_total == 0 && task == ORDER_TASK_MODIFY)
   Trade.BuyLimit(MM.GetLotFixed(), target, ExpertSymbol(), 0, 0, NULL);
Como você pode ver, nada complicado. O valor do alvo terá de ser calculado por você mesmo.
 
Vasiliy Sokolov:
Como você pode ver, nada complicado. Você mesmo terá de calcular o valor-alvo.

Tentei fazer isso do zero - não funciona - os stops continuam assim....

//+------------------------------------------------------------------+
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))                    // O preço de disparo da ordem deve estar acima da média móvel
      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);
}
//+------------------------------------------------------------------+
//| Trabalhando com ordens pendentes SellStop para abrir posições vendidas
//| posições|
//+------------------------------------------------------------------+
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))                    // O preço de disparo da ordem deve estar acima da média móvel
      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);
}
 
Сергей Криушин:

Tentei assim - não funciona - as paradas ainda estão acontecendo assim.....

Deixe-me verificar...
 
Vasiliy Sokolov:
Vou verificar agora...

Eu adicionei os níveis SL e TP e o trawl ao owl - ele se mostra perfeitamente na demonstração do Metaquotes... ao mudar para o real novamente, algo não aparece - ele dá erros - o principal é que eu copiei tudo de forma limpa, toda a biblioteca - e ainda assim os erros... o que está errado novamente....Um grande pedido - é possível, de alguma forma, combinar em um EA com comentários... por assim dizer, para uma compreensão clara da essência de tudo o que foi descrito... Com grande respeito ao seu excelente trabalho realizado... muito obrigado... Eu também gostaria de saber - sou apenas eu com tais incompreensões ou alguém mais está testando.... e sem erros...

'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