Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 911

 
Viktorline14:
Pessoal, por favor, ajudem!!!

É mais fácil fazer uma captura de tela e publicá-la aqui do que copiar o texto da EA? Você acha que alguém vai digitar manualmente em seu ME a partir de uma captura de tela e tentar descobrir isso?

Se o compilador disser que deve verificar o resultado da função, ele deve ser verificado. Não é difícil:

if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) Print("Opening Buy error #", GetLastError()); //ну и другие действия по усмотрению, в случае ошибки
 

 if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, SL, TP, NULL, 0, 0,clrBlue);

     MyOrderStateB = 1; 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 

   Print("Opening Buy error #", GetLastError());}

   else Sleep(2);

Obrigado. Certo ou errado, porém... O aviso ainda vem à tona.

 
Você tem o stoploss e o takeprofit em valores absolutos, e precisa dele em valores relativos, como Bid - Sl*Point.
 
abeiks:

Olá!

Em meu consultor especializado, o castiçal anterior é verificado e, se as condições permitirem, a posição é aberta, se não, não é aberta. O problema é que a posição é aberta antes que o estado da vela anterior seja verificado. Depois vejo a abertura da posição no tronco e depois vejo que ela não deve ser aberta. Como consertá-lo?

Obrigado, eu mesmo o descobri. Coloco a função de verificação da vela anterior acima da função de abertura de uma posição.
 
Peço desculpas pelo desleixo
 
if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )
{OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, Bid - SL * Ponto, Ask + TP * Ponto, NULL, 0, 0,clrBlue);
MyOrderStateB = 1;
if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue))
Imprimir("Erro de Abertura de Compra #", GetLastError());}
senão Dormir(2);

if(S1a == S1b && S1a>80.0000 && S1b>80.0000 )

{OrderSend(Symbol(), OP_SELLL, OrderValue, NormalizeDouble(Bid, Digits), Slippage, Ask + SL * Ponto, Bid - TP * Ponto , NULL, 0, 0,clrRed);
MyOrderStateS = 1; }

senão Dormir(2);

E com relação a isso dá a mesma coisa(

 
Viktorline14:

 if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, SL, TP, NULL, 0, 0,clrBlue);

     MyOrderStateB = 1; 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 

   Print("Opening Buy error #", GetLastError());}

   else Sleep(2);

Obrigado. Certo ou errado, porém... O aviso ainda vem à tona.

Errado, você não precisa ligar duas vezes para OrderSend. E devemos calcular SL e TP em relação ao preço, não em pips. E devemos normalizar não os preços de Ask e Bid abertos, mas o resultado dos cálculos de SL e TP.

Em geral, "aprender, aprender e aprender de novo" ))))

 
evillive:

Errado, não há necessidade de ligar duas vezes para OrderSend. E SL e TP devem ser calculados em relação ao preço, não em pontos. E devemos normalizar não os preços de Ask e Bid abertos, mas o resultado dos cálculos de SL e TP.

Em geral, "aprender, aprender e aprender de novo" ))))

Muito obrigado)))) Você tem me ajudado muito, agora tudo funciona:3
 

Muito obrigado mais uma vez!

Agora há um problema, a EA abre vários pedidos seguidos, não um como eu queria(

int start()



  { S1a = NormalizeDouble(iStochastic(NULL, 0, S1_period, 3, S1_slowing, MODE_SMA, 1, MODE_MAIN, 1), 0);

   S1b = NormalizeDouble(iStochastic(NULL, 0, S1_period, 3, S1_slowing, MODE_SMA, 1, MODE_SIGNAL, 1), 0);

   

   if(MyOrderStateB == 1)Sleep(300000);

    else MyOrderStateB = 0;

   if(MyOrderStateS == 1)Sleep(300000);

    else MyOrderStateS = 0;

    

 

     

   if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, Bid - SL * Point, Ask + TP * Point, NULL, 0, 0,clrBlue))

   Print("Opening Buy error #", GetLastError());  

     else Sleep(2);

   MyOrderStateB = 1;

  

   


      

   if(S1a == S1b && S1a>80.0000 && S1b>80.0000 )


    

    

       if(!OrderSend(Symbol(), OP_SELL, OrderValue, NormalizeDouble(Bid, Digits), Slippage, Ask + SL * Point, Bid - TP * Point , NULL, 0, 0,clrRed))

       Print("Opening Sell error #", GetLastError()); 

       else Sleep(2);

       MyOrderStateS = 1;

       

      

       

       

       

   return(0);}

 

Tenho visto algum comportamento estranho no testador de estratégias. Meus conjuntos EA e redes de arrasto pendentes de ordens de parada. Acontece o seguinte. O Expert Advisor estabelece uma parada de compra e venda a 30 pips do preço atual (símbolo - GbpUsd. Quatro dígitos. Nível mínimo = 3 pips). Depois de um tempo, ele os puxa para cima seguindo o mercado, se eles não acionaram. Então o que eu vejo. a modificação é bem sucedida, a modificação é bem sucedida, e então em algum momento aparece o slams e o erro nº 1. Ou seja, tudo estava bem, a EA estava fazendo as mesmas ações e de repente este erro aparece. Todos os preços foram normalizados em dígitos. Em geral, todos os valores que são passados para a função OrderModify() são normalizados!

Qual pode ser a razão para tal comportamento da EA no testador?