Preocupado com o erro, não há operações comerciais - página 21

 
Arkadii Zagorulko:

Exatamente MT5...

Eles dizem que apenas o MT4 é o problema.

Talvez seja uma sabotagem mudar para o MT5.

 

Se isso ajuda alguém, eis como passei na validação. EA sem paradas e modificações de pedidos, mas em todos os prazos.

O validador deu o erro 131 (lote errado) e nenhuma negociação. Esta é minha primeira EA, portanto provavelmente houve todos os erros que eu cometi.

Primeiro adicionei todos os comentários em inglês para verificar as funções comerciais, ou seja, se a EA não comercializa, deve emitir erro em Print().

Também acrescentei a verificação de margem livre e removi ExpertRemove() mas não ajudou, os erros ainda permaneceram os mesmos.

void buy()
  {
   if(AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)>0)
     {
      if(OrderSend(_Symbol,OP_BUY,Lots,Ask,Slip,SLb,0,comment,Magic,0,Green)<1)
         Print(" Buy ​​order error !"+ IntegerToString(_Period,0) +" Error code = " + IntegerToString(GetLastError(),0));
     }
   else
      Print("Not enough money!" +" Error code = " + IntegerToString(GetLastError(),0));
      /// ExpertRemove();
   return;   
  }

Fiz várias outras mudanças ao mesmo tempo, e não sei qual delas ajudou.

Reiniciei erros no início e no final do Expert Advisor, verifiquei as citações de todas as TFs

int OnInit()
  {
    ResetLastError();   

      for(int cycle=1; cycle<=5; cycle++)
     {
      switch(cycle)
        {
         case 1:
            TF = PERIOD_D1;
            break;
         case 2:
            TF = PERIOD_H4;
            break;
         case 3:
            TF = PERIOD_H1;
            break;
         case 4:
            TF = PERIOD_M15;
            break;
         case 5:
            TF = PERIOD_M5;
            break;
        }
   if(iTime(_Symbol,TF,Limit)<1)
     Print("Missing quotes! " + IntegerToString(TF,0) + " Timeframe"+" Error = " + IntegerToString(GetLastError(),0));            
     }      
   return(INIT_SUCCEEDED);
  }
//****************************
void OnDeinit(const int reason)
  {  
   Alert("Error = "+ IntegerToString(GetLastError(),0));
   ResetLastError();
  }

e o cálculo do lote é recalculado para todos os casos, se a etapa for (0,1), (0,01) e até (0,001)

double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP);

   Lots = NormalizeDouble(AccountEquity()/10000*Lot_for_10K,3);
   if(lotstep>0.001)
   Lots = (MathRound(Lots/lotstep))*lotstep;    
   Lots = MathMax(Lots,MarketInfo(Symbol(),MODE_MINLOT));
   Lots = MathMin(Lots,MarketInfo(Symbol(),MODE_MAXLOT));

como resultado, posso dizer que consegui consertar tudo rapidamente, apenas 2 dias e cerca de 10 tentativas

 
Vou descrever minhas experiências com "não há operações comerciais":

1. Depois de recompilar a antiga EA do Mercado e tentar carregar no site, o erro "não há operações comerciais" apareceu:
test on EURUSD,H1
there are no trading operations
test on NZDUSD,H1
there are no trading operations
test on GBPUSDcheck,M30
there are no trading operations
test on XAUUSDcheck,Daily
there are no trading operations
2. A verificação da disponibilidade de cotações para todas as TFs não mostrou nenhum erro (usei divisão por 0).
3. Então comecei a verificar o volume das operações comerciais, mas ao mesmo tempo recebi o erro "não há operações comerciais".
4. Em seguida, alterou o número de lotes em todos os OrderSend para SYMBOL_VOLUME_MIN - "não há operações comerciais"
5. Obviamente, algo está errado com o validador testador. E tentou adicionar abertura de posição no OnInit():
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
int ticket1=OpenPosition(NULL,OP_SELL,min_volume,0,0,magic);

e isto é o que eu recebi (a propósito, esta é a primeira vez que eu o vejo tão detalhado no validador):

 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134


O erro "não há operações comerciais" já está claro aqui. Se tivermos um saldo de 1,00, obviamente não podemos abrir um pedido com 0,20 (SYMBOL_VOLUME_MIN). E a verificação de saldo no código cumpre sua finalidade e não permite colocar tal pedido e exibe uma impressão na revista sobre saldo insuficiente (só que não é mostrado no validador).

Como você acha que o validador está bem?


Aguardaremos até que o validador seja fixado.

 
A margina grátis não me incomoda, porque estou farto de Honduras.
 
Алексей Тарабанов #:
A margina grátis não me incomoda, estou farto de Honduras.

Difícil? Estou falando de expressão.

 
Sim, estou falando sobre os parâmetros de teste
 
Limpe sua memória de todos os tipos.
 

Encontrei o problema, por padrão tenho um limite para o lote máximo de posições nos parâmetros de entrada.

input double MaxLots=0.1;
...
lots = MathMin(lots, MaxLots);

É por isso que não permitiu a abertura de posições se SYMBOL_VOLUME_MIN no validador for 0,20. Você não pode definir um limite tão pequeno no lote máximo de posições por padrão para o validador.