Estou aprendendo a escrever um conselheiro... - página 7

 

Além disso, eu estou verificando corretamente o estado do pé sobre os três critérios?

  //проверяем если есть поза, стоит стоп и не стоит БУ        
       if ((OrdersTotal()>0)&& (OrderStopLoss()!=0) && (OrderStopLoss()!= SLBU))
            ModifySLinBU();   //передаем управление в ф-ю установки БУ

Ou é

  //проверяем если есть поза, стоит стоп и не стоит БУ        
       if ((OrdersTotal()>0)&& (OrderStopLoss()!=0 && SLBU))
            ModifySLinBU();   //передаем управление в ф-ю установки БУ
 

Você já ouviu falar de uma "mudança de período" neste fórum?

Deixe-me explicar. Por exemplo, os castiçais H4 são diferentes em todas as empresas de corretagem, é claro - porque o tempo do servidor é diferente. Como deslocar estes castiçais de acordo com o tempo, para obter outras características na saída - o máximo, mínimo, aberto, fechado...

Para que serve tudo isso? Minha corretora tem os mesmos castiçais e a estratégia que eu implemento pelo meu trabalho de Expert Advisor, mas há muitos erros de desencontro de gráficos. (Tanto quanto sei, este é um problema da minha empresa de corretagem e não é bem-vindo durante a análise dos participantes do fórum!)

Mas depois de baixar o histórico de MetaQuotes não há erros, mas mesmo durante os testes visuais os castiçais não mostram muitos sinais e o teste EA usando-os dá maus resultados.

Foi por isso que comecei a pensar sobre isso - para "mudar" os castiçais para coincidir com minha corretora ou com outra.

 

Como reduzir seus erros DC e melhorar a qualidade da modelagem?



EUR/0.1-10 lote/1 ano/300-322000

 

Veja se eu estou processando a mudança do pedido corretamente? Quais são as possíveis armadilhas aqui?

//+------------------------------------------------------------------+
//| Открытие позиции на покупку
//+------------------------------------------------------------------+
void OpenBuy() 
  { 
   RefreshRates();
      if ((OrdersTotal()==0) && (Ask == Enter)) //бъем до упора эту цену
         {
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_BUY, Lot, Enter, Slippage, 0, 0, 0, MAGIC,0, clOpenBuy);
                  if (OrdersTotal()>0)
                     {
                        Modify = false;                              //флаг установки SL и TP - не установлен
                        ModifySL();                        
                     }
                  else Print("Ошибка установки ордера BAY по цене ",OrderOpenPrice()," код ошибки ="+GetLastError());
               }  
         }              
      if ( UseSound) PlaySound( NameFileSound);
  } 
//+------------------------------------------------------------------+
//| Открытие позиции на продажу
//+------------------------------------------------------------------+
void OpenSell() 
  { 
   RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, 0, 0, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        Modify = false;                              //флаг установки SL и TP - не установлен
                        ModifySL();
                     }   
                  else Print("Ошибка установки ордера SELL по цене ",OrderOpenPrice()," код ошибки ="+GetLastError());
               }
         }
      if ( UseSound) PlaySound( NameFileSound);        
  } 
//+------------------------------------------------------------------+
//| Модификация ордера на установку SL и TP                                                                 |
//+------------------------------------------------------------------+
void ModifySL()
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  StopL = SLB(); 
                  TakeP = TPB();
                  Modify = OrderModify(OrderTicket(),OrderOpenPrice(), StopL, TakeP,0,Red);
                  if ( Modify == false) Print("Ошибка изменения ордера #",OrderTicket(), " при попытке установить СТОП ", StopL,". Текущая цена- ",Bid,", код ошибки ="+GetLastError());
               }
            else
               {
                  StopL = SLS(); 
                  TakeP = TPS();
                  Modify = OrderModify(OrderTicket(),OrderOpenPrice(), StopL, TakeP,0,Red);
                  if ( Modify == false) Print("Ошибка изменения ордера #",OrderTicket(), " при попытке установить СТОП ", StopL,". Текущая цена- ",Ask,", код ошибки ="+GetLastError());
               }
         }     
   }

Depois int Start () verifica se há modificações...

//+------------------------------------------------------------------+
//| Проверка открытого оредра на установку SL,TP и установка SL,TP
//+------------------------------------------------------------------+
    if ((OrdersTotal()>0) && ( Modify == false)) ModifySL();  //SL и TP - не установлен
 

Obrigado a todos que ajudaram!)

Atualmente estou aprendendo como executar um EA em símbolos diferentes ao mesmo tempo...

Você pode me dizer se esta variante é boa para encontrar uma ordem pertencente a um símbolo no qual a EA está funcionando?

for (int i=1; i<=OrdersTotal(); i++)          //Цикл по всем ордерам,..
  {                                           //отражённым в терминале
      if(OrderSelect( i-1, SELECT_BY_POS)==true)//Если есть следующий         
        {
          if(OrderSymbol()==Symbol())
            {
              if (OrderType()==OP_BUY)
               {
                 ... 
               }  
              else
               {
                 ...
               }

            }
        } 
  }                                         //Конец тела цикла
Razão: