Erro nº 1 na modificação de ordens - página 5

 
borilunad:

Victor, por que você modificou o SL e TP nas posições pendentes? Em geral, faz sentido definir o SL somente após a abertura de uma posição, e o TP após a transferência do SL para o B/S! Então por que incomodar tanto o servidor por nada e por que você tem que passar por todo esse trabalho?!

Devemos minimizar e simplificar o código, para que ele funcione rápido e claro, e então será mais fácil ajustá-lo por causa dos caprichos do mercado! Considere cuidadosamente todas as nuances das realidades do mercado!

Eu também pus fim à perda das ordens pendentes, caso a conexão seja interrompida ou alguma outra coisa me impeça de estabelecer uma parada mais precisa (do ponto de vista do sistema) após o acionamento da ordem.

Se tudo estiver bem, então, após o acionamento do pedido, eu coloco um ponto final no nível correto.

 
Stells:

Eu também pus um fim à perda das ordens pendentes imediatamente, caso a conexão seja interrompida ou alguma outra coisa me impeça de estabelecer uma parada mais correta, do ponto de vista do sistema, após a ordem ter sido acionada.

Se tudo estiver bem, então, após o acionamento do pedido, eu coloco um ponto final no nível correto.

Nisso você está certo, se de acordo com o TS você definir seu SL próximo ao preço de abertura! Mas para modificar o preço de abertura, SL e TP várias vezes não é razoável, gasta tanto esforço e complica o código, não vale a pena o esforço!
 

Victor, se você realmente precisa disso, você pode facilitar! Verifique apenas o preço de abertura, e marque SL e TP da mesma forma que você faz quando estabelece um pedido pendente com SL e TP!

Isso significa que para o SL escreva Ask-SL ou Bid+SL, e para TP, respectivamenteAsk+TP ou Bid-TP! Experimente, deve funcionar bem! Portanto, nada é impossível! :)

 
borilunad:

Você quer a função Modificar()?

Eu não diria não. E até estou esperando em algum lugar... Desde ontem à noite.

keekkenen:
o código parece bom... mas em real (não em demo) funciona?
Sim. Em muitos EAs onde eu não precisei modificar 3 parâmetros de entrada de uma só vez, funciona. Note que eu baixei uma variante para o testador e há também uma variante para o mundo real.

borilunad:

Victor, por que você começou a modificar o SL e TP nas ordens pendentes? Em geral, faz sentido ajustar o SL somente após a abertura de uma posição e TP após o SL ser movido para B/B! Então por que incomodar tanto o servidor por nada e por que você tem que passar por todo esse trabalho?!

Você precisa minimizar e simplificar o código, para que ele funcione rápido e claro, e então será mais fácil ajustá-lo por causa dos caprichos do mercado! Pense cuidadosamente em todas as nuances relacionadas com as realidades do mercado!

Boris, se de acordo com a documentação 3 parâmetros podem ser modificados simultaneamente, por que não utilizá-lo? Afinal de contas, é conveniente! Estou pensando em mudar a parada e tomar opções. Entretanto, quero que esta opção funcione corretamente, se este recurso estiver especificado na documentação. Se não for possível, devemos escrever que não é possível. Então a questão desaparecerá por si só.
 
borilunad:
Nisso você está certo, se de acordo com a TS você colocar seu SL perto do preço de abertura! Mas para modificar o preço de abertura, SL e TP várias vezes não é razoável desperdiçar tanto esforço e complicar o código, não vale a pena o esforço!

Boris, quem disse que eu estou batendo no servidor com muita freqüência? Eu não estava falando sobre o sistema comercial. Há variações diferentes. Algumas vezes apenas STOP é movido, outras vezes STOP e TAKE também são movidos. Estas são variantes diferentes. Mas neste caso, no meu caso, as paradas são movimentadas a cada várias horas, em média. Ou uma vez a cada hora. Isso é um monte de complica código?

Pelo contrário, o código torna-se... mais simples. Você chama uma função de modificação... colocar 3 parâmetros e modificá-lo... Idealmente, sem contar com qualquer falha no terminal.

Mas, se não for assim. Então teremos que modificar o PREÇO ABERTO, então as condições são cumpridas... o preço STOP, e depois que algumas condições forem cumpridas ou algum tempo tiver passado, teremos que modificar o preço TAKE. Isto é como Simplificando código?

 
hoz:

Não vou dizer não. E até estou esperando em algum lugar... Portanto, desde ontem à noite.

Sim. Em muitos EAs onde eu não precisei modificar 3 parâmetros de entrada de uma só vez, funciona. Note que eu descontei a versão para o testador, e há também a versão para o real.

Boris, se de acordo com a documentação 3 parâmetros podem ser modificados simultaneamente, por que não utilizá-lo? Afinal de contas, é conveniente! Estou pensando em mudar a parada e tomar opções. Entretanto, quero que esta opção funcione corretamente, se este recurso estiver especificado na documentação. Se não for possível, devemos escrever que não é possível. E a questão desaparecerá por si só.

Victor, confira meu próximo post onde eu lhe dei a idéia de verificar apenas o preço de abertura, e redefinir o SL e TP a partir do preço sem nenhum alarido!

E eu vou postar a função agora! Eu também "esperei" em algum lugar que você respondeu ontem! Seremos mais simples.

#include <stderror.mqh>//штатные инклюдники, чтобы 
#include <stdlib.mqh>  //вызывался ErrorDescription()



//------------------------/  Modify Order  \------------------------\\
void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3) {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0) { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(5000); RefreshRates(); ModifyCnt++;
} } }

Qualquer dúvida, pergunte, não espere até amanhã! ;)

A função é universal, serve para quaisquer modificações com posições pendentes e abertas! Boa sorte!

Agora mesmo, como ontem, indo almoçar! Tudo de bom!

 
borilunad:

Vou postar a função agora! Eu estava esperando em algum lugar para que você respondesse ontem, também! Vamos manter as coisas simples.

Se você tiver alguma dúvida, não espere até amanhã! ;)

A função é universal, serve para quaisquer modificações com posições pendentes e abertas! Boa sorte!

E quanto aos controles de parada e frizzle? Ou não é necessário hoje em dia? :) Com relação ao seu código de função, concordo. É simples e direto. Mas os cheques... eles não estão lá. Por que não?

Eu vou jantar:

Agora mesmo, como ontem, indo almoçar! Tudo!

Quem está almoçando e quem já está jantando neste momento...
 
hoz:

Como posso me livrar deste maldito erro? Estou farto disso. Estou verificando cada parâmetro de entrada da função. Para mim, no momento, é assim:

Ou seja, se o parâmetro não tiver sido alterado, não há necessidade de alterá-lo. Nunca tinha feito isso antes, mas decidi...

Em seguida, os parâmetros são passados para o método de modificação do pedido, como segue:

Nw saída no registro:

Então, a revista nos notifica, como modificação: OK, mas então um erro. Nenhum dos parâmetros foi alterado.

O pedido está pendente. Portanto, podemos mudar aberto, parar e tomar preço. E isto, pelo que entendi, não contradizia a documentação.

Quem já encontrou algo assim? Como resolvê-lo?

Remover outro.
 
hoz:

Boris, e quanto às verificações de nível de parada e nível de frizz. Ou isso é desnecessário hoje em dia? :) Em relação ao seu código de função... Concordo. É simples e direto. Mas os cheques... eles não estão lá. Por que não?

Quem está almoçando e quem já está jantando neste momento...

Todas as verificações são feitas antes do loop, que tem condições relativas a cada tipo e uma chamada para esta função, que só verifica se há erros em Modify():

            ModifyOrder(OrderTicket(),OOP,SL,0,0,clrBlue); return(0);

Qualquer outra coisa, pergunte, mas estou indo jantar agora. ;)

 
Como você votou?