assessor especializado - perguntas diversas - página 23

 

Eu o recomendo.

Quando você resolver todos esses problemas, você já poderá se considerar entre os profissionais.

Torne as coisas tão difíceis quanto possível e assim você aprenderá o máximo.

Caso contrário, você continua lutando com as coisas simples o tempo todo.

 

Antes de mais nada, muito obrigado por seus comentários.

Após seus comentários, decidi que deveria, mais uma vez, criar blocos de código de modificação de pedidos, com certeza e para teste.

 

Sr. @Marco vd Heijden

Após seus maiores comentários / exemplos - eu já escrevo um código de arrasto para Take Profit Prices.
Mas na verdade eu sou contra atualizações contínuas. Por quê? Como eu escrevo blocos de código para Take Profit Drags, vejo que meu gráfico fica lento. Talvez eu tenha cometido erros nessa parte do código. Vou verificar isso depois de resolver este problema.

( enquanto eu tentava resolver meu problema sozinho, depois de tentar várias vezes, pensei que não havia chance de parar o cálculo se eu usasse " para " operador de laço )

Eu gostaria de mencionar que já tenho cálculos para os tamanhos Take Profit e Stop Loss que fazem com que eu remova o operador "Switch" do código abaixo.
Estou apenas tentando quando o preço Take Profit será igual a " Linha " Preço - então pare de calcular / atualize até a próxima vez Preço Take Profit " != " Preço da linha.
P:
Estou lutando para corrigir o código abaixo para minha preocupação. Então, o que posso fazer por isso, por favor?
P: Estou fazendo errado, não estou usando o operador " Switch " para esta questão?

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   for(int order=OrdersTotal(); order>=0; order--)
     {
      bool selected=OrderSelect(order,SELECT_BY_POS);
        {
         if(selected==1)
           {
            if(Symbol()==OrderSymbol()) // only for current chart symbol
              {
               /* I just try for - if price not equal != "Line OBJPROP_PRICE "
                  stop updates */


               // if objects not found - create them
               // ...
               // if objects exist
               // ...
               while(price!=ObjectGetDouble(0,"line",OBJPROP_PRICE,0))
                 {
                  PlaySound("ok.wav");
                  price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
                  Comment(price);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+

Enquanto eu lia documentação e livro para OrderModify() com exemplo, eu não via exemplo exatamente para minha preocupação.

Tudo de bom para você!

 

Eu não tenho me mantido atualizado com o fio, então posso ter perdido o que você está fazendo.

Antes de mais nada, simplifique:

for(int order=OrdersTotal(); order>=0; order--)
     {
      bool selected=OrderSelect(order,SELECT_BY_POS);
        {
         if(selected==1)
Deve se tornar:
for(int order=OrdersTotal()-1; order>=0; order--)
     {
      if(OrderSelect(order,SELECT_BY_POS)

Além disso, pense na freqüência com que você move a linha. É uma vez por segundo? Provavelmente não.

Coloque seu código no OnChartEvent():

void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
  {
   if(id==CHARTEVENT_OBJECT_DRAG && sparam=="line") // the chart event of dragging the line

Você está chamando a mesma função várias vezes em cada ordem aberta que tem:

while(price!=ObjectGetDouble(0,"line",OBJPROP_PRICE,0))
  {
   PlaySound("ok.wav");
   price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
   Comment(price);
  }

Ligue uma vez antes de entrar no loop do pedido:

double lineprice=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
for(int order=OrdersTotal()-1; order>=0; order--)
  {  
 

Certifique-se de compreender o princípio do looping while.

É perigoso porque se por qualquer razão uma outra EA tentar modificar o valor do preço da linha, então como resultado, este pedaço de código ficará preso em um loop interminável e seu terminal muito provavelmente congelará.

Isto normalmente termina em terminação anormal.

Como você está usando a "linha" do objeto, o perigo, no entanto, não é tão grande como quando você fala dos níveis tp e sl que são enviados para o servidor pela OrderModify(), portanto, a menos que você esteja planejando escrever outro EA que interfira com a "linha", isso não deve ser um problema.

 
honest_knave:

Eu não tenho me mantido atualizado com o fio, então posso ter perdido o que você está fazendo.


Ligue uma vez antes de entrar no loop do pedido:

double lineprice=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
for(int order=OrdersTotal(); order>=0; order--)
  {  

Por favor, entenda o que ele está tentando fazer.

Ele deve ligar duas vezes e comparar valores a fim de ver se a linha foi movida.

Isso é impossível de se fazer sem ler o valor duas vezes.

while(price!=ObjectGetDouble(0,"line",OBJPROP_PRICE,0))// if price differs from "line" value do:
  {
   PlaySound("ok.wav");
   price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);// now overwrite old line value with new line value.
   Comment(price);
  }
 
Marco vd Heijden:

Por favor, entenda o que ele está tentando fazer.

Ele deve ligar duas vezes e comparar valores a fim de ver se a linha foi movida.

Isso é impossível de se fazer sem ler o valor duas vezes.

Você precisará me explicar isso novamente.

Se você tem um CHARTEVENT_OBJECT_DRAG e a sparam é "linha", então a linha se moveu.

Para as raras ocasiões em que ela se movimenta no mesmo tempo pelo mesmo preço, a penalidade não é muito.

 

Há muitas maneiras de fazer a mesma coisa.

Se você decidir usar o CHARTEVENT, lembre-se de que ele não funciona no testador.

 
OK, vou deixar isso para vocês. Boa sorte.
 

Eu já li seus comentários benéficos, Sr. Marco, Sr. Knave, Sr. William, muito obrigado por todos esses comentários!

Agora eu já chequei poucas coisas e também decidi que poderia escrever ( / e verificar) OrderModify() passo a passo. Porque esta OrderModify() é realmente perigosa para mim.
Várias vezes eu já enfrentei modificações erradas. Mas quando tento enfrentar os mesmos problemas / problemas, que eu sei com certeza de onde vêm esses problemas, até eu tento as mesmas coisas no gráfico que problemas / problemas não aconteceram novamente. Após algumas horas, enfrentei o mesmo problema novamente.
Ainda não sei exatamente o que causou esses problemas. O que é problema que eu quero dizer. Eu já compartilhei um deles com vocês em meus comentários anteriores. Também abro uma posição pelo meu Painel de Comércio EA, que é OK! então tento abrir o Limite de Venda pelo método de comércio manual. ( que é meu Painel de Comércio ainda não tem esse Sell Limit ou Sell Stop Pending orders )

Portanto, eu acho que deveria compartilhar esse código de bloco com vocês, mas não posso compartilhá-lo por enquanto porque ainda estou trabalhando nele. Quero mudar esses códigos de bloco para OnChartEvent() - porque também vou adicionar alguns botões a ele.

Questão: Não posso escrever um código se a Ordem fechar e depois remover seus objetos, como este, Stop Loss, Take Profit, Open, Close flechas algo como isto, por favor, me ajude.
Pergunta: Não consigo escrever um código se a ordem for fechada: Também Stop Loss, Take Profit Lines frente aos Objetos do Painel de Comércio. Eu sei que isso causado da última vez cria objetos. Mas se você me entendeu, por favor, me diga como posso fazer para que o objeto do Painel de Comércio esteja à frente de todos os outros objetos sem "Stop Loss and Take Profit" Lines.

Obrigado de antemão.

Razão: