[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 361

 
vilard:
como fazer com que indicadores de diferentes prazos sejam levados em conta no testador, e isso é mesmo possível?
O que significa considerar um indicador no Testador de Estratégia? (1) Talvez o indicador de outro período de tempo deva ser exibido durante a visualização, ou (2) no código EA, na função indicadora você deve calcular um valor para outro período de tempo?
 
vilard:
como fazer com que indicadores de diferentes prazos sejam levados em conta no testador, e isso é mesmo possível?

possível: https://docs.mql4.com/ru/indicators/icustom

https://docs.mql4.com/ru/constants/timeframes

 

O EA é projetado para gerar sinais em barras com índices 1 e 2 (ou seja, abrir e fechar ordens na abertura de uma nova barra).

No testador, ele alternativamente gera erros 138 e 4051 (parece estar jurando no bilhete) para OrderClose.

Por favor, ajude-me a resolver este problema.

   if(Mas_Ord_New[0][0]!=0)
    {
     if(Signal==2)
      {
        for(i=0; i<=Mas_Ord_New[0][0]; i++)
         {
           ticket=Mas_Ord_New[i][4];
           lts=Mas_Ord_New[i][5];
           Ans=OrderClose(ticket,lts,Bid,5);
           if(Ans==false) 
           Alert("Закрыть BUY ",ticket, " не удалось. Ошибка: ", GetLastError());
         }
      }
     if(Signal==3)
      {
        for(i=0; i<=Mas_Ord_New[0][0]; i++)
         {
           ticket=Mas_Ord_New[i][4];
           lts=Mas_Ord_New[i][5];            
           Ans=OrderClose(ticket,lts,Ask,5);
           if(Ans==false) 
            Alert("Закрыть SELL ",ticket, " не удалось. Ошибка: ", GetLastError());
         }       
      }
    }

 // Функция из учебника

int Terminal()
 {
   int Qnt=0;
   
   ArrayCopy(Mas_Ord_Old, Mas_Ord_New); // Сохранение информации
   Qnt=0; // Обнуление счетчика
   ArrayInitialize(Mas_Ord_New,0);  // Обнуление массива
   ArrayInitialize(Mas_Tip,0);  // Обнуление массива
   
   for (int n=0; n<=OrdersTotal(); n++)
    {
      if ((OrderSelect(n,SELECT_BY_POS)==true) &&
          (OrderSymbol()==Symbol()) && (OrderMagicNumber()==Magic))
       {
         Qnt++;
         Mas_Ord_New[Qnt][1]=OrderOpenPrice();
         Mas_Ord_New[Qnt][2]=OrderStopLoss();
         Mas_Ord_New[Qnt][3]=OrderTakeProfit();
         Mas_Ord_New[Qnt][4]=OrderTicket();
         Mas_Ord_New[Qnt][5]=OrderLots();
         Mas_Tip[OrderType()]++;
         Mas_Ord_New[Qnt][6]=OrderType();
         Mas_Ord_New[Qnt][7]=OrderMagicNumber();
         if (OrderComment()=="")
            Mas_Ord_New[Qnt][8]=0;
         else
            Mas_Ord_New[Qnt][8]=1;
       }
    }
   Mas_Ord_New[0][0]=Qnt;
   return;
 }
 
silhouette:

O EA é projetado para gerar sinais em barras com índices 1 e 2 (ou seja, abrir e fechar ordens quando uma nova barra abre).

No testador, ele alternativamente gera erros 138 e 4051 (parece estar jurando no bilhete) para OrderClose.

Por favor, ajude-nos a resolver este problema.

Tente a seguinte construção para fechar a posição:

int err;
// ---
if (...) // условие закрытия позиции
{  if (OrdersTotal()>0)
   {  for (int i=OrdersTotal()-1; i>=0; i--)
      {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {  // фильтрация позиции по текущему символу:
            if (OrderSymbol()!=Symbol()) continue;
            // фильтрация позиции по магик-номеру:
            if (OrderMagicNumber()!=MagNum) continue;
            // ... можно и другие фильтры поставить.
            // --- закрытие позиции Buy.
            if (OrderType()==OP_BUY)
            // перед открытием или закрытием позиции
            // обновляйте котировки с помощью RefreshRates()
            // дабы избежать устаревание запрошенной цены,
            // возможной причины ошибки 138
            {  RefreshRates(); 
               OrderClose(OrderTicket(),OrderLots(),Bid,30);
               err=GetLastError();
               if (err>0)  Alert("Ошибка при закрытии позиции Buy (",err,").");
               if (err==0) Alert("Позиция Buy закрыта успешно.");
               err=0; return(0);
            }
            // --- закрытие позиции Sell.
      else  if (OrderType()==OP_SELL)
            {  RefreshRates();
               OrderClose(OrderTicket(),OrderLots(),Ask,30);
               err=GetLastError();
               if (err>0)  Alert("Ошибка при закрытии позиции Sell (",err,").");
               if (err==0) Alert("Позиция Sell закрыта успешно.");
               err=0; return(0);
            }
   }  }  }
}
 
chief2000:
USDJPY


obrigado
 
Roman.:


0,01 - Conta em centavos NDD. TR e SL = 0.

Tudo é o mesmo em todos os lugares.

No 4º - em pares de moedas - sem dúvida tudo é testado de acordo com o algoritmo.

Nos Alpes - ouro - testado de acordo com o algoritmo.

Gostaria de acrescentar metais ao meu GRAAL, que funciona em 4°, até agora apenas em moedas.


Então não há problema com moedas?
 
Vinin:

Então não há problemas com moedas?


Sim, não há problemas.

Victor Ivanovich, obrigado do fundo do meu coração, descobri isso em suas principais perguntas.

Não há metais, apenas moedas no NDD em 4, por isso o erro #131 é descartado durante os testes - volume errado. Eu não estava ciente disso.

Em ouro e prata, já comecei a otimizar os parâmetros nos Alpes.

 
paladin80:

Para fechar uma posição, tente esta construção:


Obrigado, está funcionando!
 

Você pode me dizer como inserir o código HTML para um banner, por exemplo?

 
Colocá-lo onde?
Razão: