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

 

Se seu Expert Advisor é multi-currency, você tem que fazê-lo.

Tanto mais que os valores de Licitação e Pontos provavelmente já estão definidos (declarados) através do MarketInfo().

Uma vez iniciei uma filial no ramo de Expert Advisor Multimoedas. Dê uma olhada e algumas perguntas serão esclarecidas....

Pergunta de especialista multimoedas".

 

E aqui especificamente sobre a modificação

"Pergunta de assessor multimoedas

 

Eu fiz esta variante... Imediatamente após a abertura, eu chamo ModifyPos()

OrderSend (...);

ModifyPos();



void ModifyPos()
  {
   if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
    { 
     if (OrderType()==OP_BUY)
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,Bid- TakeProfit*Point,0,Red);
     if (OrderType()==OP_SELL)
     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,Ask+ TakeProfit*Point,0,Red);
    }  
  }

Stop - 20.

TakeProfit - 100

Mensagem no log - OrderModify error 130

 

Tente uma posição de compra para as posições de tomada

Ask+ TakeProfit*Point

Pense sobre isso! Por que é que para uma posição de compra o lucro fica subitamente abaixo do preço atual?

Não é de se admirar que um erro seja gerado

E o mesmo para a posição de venda...

Mas se você não precisa mudar Take Profit, é melhor fazer desta maneira

OrderModify(OrderTicket(), OrderOpenPrice(), Bid- Stop*Point,
                                                     OrderTakeProfit(), 0, Blue);
Da mesma forma, para o lado da venda
 
rid >> :

Pense sobre isso! Por que é que seu lucro em uma posição de compra está subitamente abaixo do preço atual?

Não é de se admirar que um erro esteja sendo gerado!

Muito obrigado!

Eu não estava prestando atenção)... funcionou e até funcionou)

void ModifyPos()
   {
        if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
            { 
               if (OrderType()==OP_BUY)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,OrderTakeProfit(),0,Red);
               if (OrderType()==OP_SELL)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,OrderTakeProfit(),0,Red);
            }      
   }
 

O último erro que está agora no registro durante os testes é OrderSend error 138.

Este erro ocorre sem interrupção quando não há trocas, ou seja, para cada marca este erro ocorre.

Assim que uma ordem é acionada, o erro desaparece... a ordem fecha e o erro vai novamente...

Parece que está tentando enviar um pedido sem nenhum sinal... Mas não entendo por que, já que há uma(se) condição para vender e comprar

 
ALex2008 писал(а) >>

O último erro que está agora no registro durante os testes é OrderSend error 138.

Este erro ocorre sem interrupção quando não há trocas, ou seja, para cada marca este erro ocorre.

Assim que uma ordem é acionada, o erro desaparece... a ordem fecha e o erro vai novamente...

Parece que está tentando enviar um pedido sem nenhum sinal... Mas não entendo por que, já que temos condições(se) de vender e de comprar.

não leia com atenção https://book.mql4.com/ru/content está tudo aí

 

A leitura e a compreensão são coisas diferentes... Eu quero entender na prática)

Há uma condição para entrar, depois que estas condições são cumpridas o controle é passado para a função que abre a ordem...

Não consigo entender como a OrderSend está tentando trabalhar contornando as condições... e logicamente gera um erro... porque não há condições de entrada

 
RefreshRates( )

Atualiza dados em variáveis pré-definidas e matrizes de séries temporais. Esta função é utilizada quando um Expert Advisor ou roteiro tem realizado cálculos há muito tempo e precisa de dados atualizados. Ele retorna VERDADEIRO se os dados forem atualizados, caso contrário FALSO. Os dados não podem ser atualizados somente porque correspondem ao estado atual do terminal do cliente. Conselheiros especializados e roteiros trabalham com sua própria cópia de dados históricos. A cópia dos dados sobre o símbolo atual é criada no lançamento inicial do Expert Advisor ou roteiro. A cada próximo lançamento do Expert Advisor (lembre-se, o roteiro é executado uma vez e não depende de ticks recebidos), a cópia inicialmente criada é atualizada. Durante o tempo de execução do Expert Advisor ou roteiro, um ou mais carrapatos novos podem vir, de modo que os dados podem ficar desatualizados.

//------------------------------------------------------------------------------

Tente inserir esta função antes de executar OrderSend

Veja também: Abertura e estabelecimento de pedidos 2008-05. :

Abertura e fixação de ordens2008-05-05 14:26:13

"Para que o programa funcione de forma estável, com um número mínimo de ordens de negociação rejeitadas, antes de executar a função OrderSend(), os parâmetros do ambiente de informação usado pelo programa devem ser atualizados usando as funções MarketInfo() e RefreshRates()".

 
   RefreshRates();
   OrderSend(Symbol(), OP_SELL, Lot, Price, Slippage, 0, Profit, Comment, MAGIC,0, colorsell);

não ajuda...

Razão: