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

 

Tudo é selecionado normalmente, mas os erros são estranhos, não consigo descobrir isso com o testador.

Diz que eu fechei o lote 0,3 e vendi o lote 0,7 ao mesmo tempo. É assim que parte de um acordo é fechado no testador? Também me pergunto de onde vêm tais volumes quando uma parte de um negócio é fechada; não vejo nenhuma informação sobre tais volumes em meu Consultor Especialista.

   for(Counter1=0;Counter1<OrdersTotal();Counter1++)
     {
     if(OrderSelect(Counter1,SELECT_BY_POS,MODE_TRADES) == false) break;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
       {
       if(OrderType() == OP_BUY)
         {
         
         BuyOpened = 1;
         if((Bid - OrderOpenPrice()) / Point >= TrailingLevel1 && (Bid - OrderOpenPrice()) / Point < TrailingLevel2)
           {
           // Перенести в безубыток
           }
         }
       if(OrderType() == OP_SELL)
         {
         TrailingPrice1 = OrderOpenPrice() - TrailingLevel1*Point;
         MyOrderStopLoss1 = NormalizeDouble(OrderStopLoss(),4);
         MyOrderStopLoss1 = OrderOpenPrice() - BreakEven*Point;
         SellOpened = 1;
         if((OrderOpenPrice() - Ask) / Point >= TrailingLevel1 && (OrderOpenPrice() - Ask) / Point < TrailingLevel2 && OrderStopLoss() != MyOrderStopLoss1)
           {
           ClosingLot = OrderLots() / 100 * ClosingPercent;
           ClosingLot = NormalizeDouble(ClosingLot,3);
           OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           }
         }
       }
     }
 
sss2019:

Tudo é selecionado normalmente, mas os erros são estranhos, não consigo descobrir isso com o testador.

Diz que eu fechei o lote 0,3 e vendi o lote 0,7 ao mesmo tempo. É assim que parte de um acordo é fechado no testador? Além disso, não sei de onde vêm tais volumes quando uma parte de um comércio é fechada e depois abre 0,16, 0,24, 0,12; o Expert Advisor não tem tais volumes.

sim, é assim que parte do fechamento é exibida - primeiro tudo é fechado, depois parte é aberta


tenho duas perguntas:

1) como você sabe o que não fechar em seguida?

no próximo tick, a condição será cumprida novamente para esta função

2) se não estou enganado, o bilhete de pedido muda após o fechamento parcial, ou seja

OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           

não haverá mudanças na segunda linha


3) E não esqueçamos a normalização...

 
ilunga:

sim, é assim que é exibido o fechamento de uma peça - primeiro tudo fechado, depois a parte aberta


duas perguntas imediatamente:

1) como você sabe que não há necessidade de fechar mais?

a condição no próximo tick será cumprida novamente para esta função

2) se não estou enganado, o bilhete de pedido muda após o fechamento parcial, ou seja

não haverá mudanças na segunda linha


3) E não esqueçamos a normalização...


O bilhete está realmente mudando? Essa deve ser a razão de todos os erros. Então por que o bilhete não muda quando o pedido é alterado manualmente? Preciso saber ao certo se o bilhete muda ou não.
 


Realmente mudando, muito obrigado
 
Ouvi dizer que quando você recebe um preço de um par de moedas para continuar trabalhando com ele, ele deve ser normalizado, por exemplo, um preço obtido a partir de um mínimo e deve ser normalizado para que ele pare de perder, isso é verdade?
 
sss2019:
Ouvi dizer que quando você recebe um preço de um par de moedas, você precisa normalizá-lo, por exemplo, você recebe um preço baixo e precisa normalizá-lo para uma parada de perda, isto é verdade?

Sim, mas nos referimos à normalização no momento de sua colocação no Orderend/OrderModify/... antes destas funções, você pode trabalhar com ele e realizar operações
 
sergeev:

Sim. Mas a normalização se destina no momento da substituição em Orderend/OrderModify/... antes destas funções, você pode trabalhar com ele e realizar operações

A quantos dígitos deve ser normalizado? Por padrão, o preço parece ter 4 dígitos após o ponto decimal, mesmo para valores de preço de cinco dígitos, pelo menos Baixo[0] e Alto[0] sempre têm apenas 4 dígitos após o ponto decimal, eu tentei produzi-lo via Alerta ou via Impressão,
 
sss2019:

A quantos dígitos deve ser normalizado? Por padrão, o preço parece ter 4 dígitos após o ponto decimal mesmo para valor de cinco dígitos, pelo menos Baixo[0] e Alto[0] sempre tem apenas 4 dígitos após o ponto decimal, eu tentei emitir via Alerta ou via Impressão,

por padrão, o preço dos dígitos tem dígitos após o ponto decimal

e Alerta e Saída de impressão apenas 4 por padrão. Use a string DoubleToStr( valor duplo, dígitos int) para mais.

 

Ajude então a implementar uma parada de trilha, como esta. Ordem de venda

         if((OrderOpenPrice() - Ask) / Point > Trailing) //Если прибыль в пунктах больше чем уровень трейлинг стопа
           {
           NewStopLoss = Ask + TrailingLevel2*Point;
           double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }
           OrderModify(OrderTicket(),OrderOpenPrice(),NewStopLoss2,OrderTakeProfit(),OrderExpiration(),Black);
           }

O problema é que a perda de tempo só deve ser revertida para frente, mas, na minha ordem, ela também reverte para trás.

________________________________

Minha pergunta se foi, desculpe.

 
sss2019:

Ajude então a implementar uma parada de trilha, como esta. Ordem de venda

O problema é que a perda de tempo só deve ser adiada, mas eu também a fiz recuar.

double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }

é equivalente a

NewStopLoss2 = NewStopLoss;
Razão: