Fechamento de meio lote.

 

Assim, consegui incorporar um loop que apaga a ordem pendente e aplica novamente outro com base no fato de que a parada está sincronizada com a média móvel. Os lotes seriam calculados com base na distância da tubulação de entrada para parar. Não apenas isto, mas consegui descobrir como o objetivo de lucro trabalhando com a distância de parada como uma relação (int externa - algo que eu escolho 1-2-3 R;R etc.) - portanto, isto também se move também.

Portanto, obrigado pelos comentários em posts anteriores com relação à impressão do meu código e outros bits e bobs!


De qualquer forma - estou tentando fechar metade da posição quando o preço atingir 50% da minha meta de lucro de 2x... Sei que preciso imprimir as coisas para o Jornal e estou escrevendo isso agora, mas alguém poderia me dizer se estou escrevendo isso errado de qualquer forma? Talvez com relação a "OrderLots()/2"?

"btp" = retorna um preço específico.

         if(Bid == btp-OrderOpenPrice()/2+OrderOpenPrice()){
         
         for(int q=OrdersTotal()-1; q >=0; q--)
         {
            if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==true){
              Print(" Stop loss value for the order is ", OrderStopLoss());
              Print("lots for the order ",OrderLots());
            }
            else if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==false){
              Print(" OrderSelect failed error code is ",GetLastError());
            }
            if(OrderMagicNumber()==MagicNumber)
             if(OrderSymbol()==Symbol())
              if(OrderType()==OP_BUYSTOP)
               
               CloseHalfLong = OrderClose(OrderTicket(),OrderLots()/2,Bid,3,CLR_NONE);
         
            if(CloseHalfLong!=TRUE)Print("LastError = ", GetLastError());
         }
         }
 
DomGilberto:

Assim, consegui incorporar um loop que apaga a ordem pendente e aplica novamente outro com base no fato de que a parada está sincronizada com a média móvel. Os lotes seriam calculados com base na distância da tubulação de entrada para parar. Não apenas isto, mas consegui descobrir como o objetivo de lucro trabalhando com a distância de parada como uma relação (int externa - algo que eu escolho 1-2-3 R;R etc.) - portanto, isto também se move também.

Portanto, obrigado pelos comentários em posts anteriores com relação à impressão do meu código e outros pedaços e bobs!


De qualquer forma - estou tentando fechar metade da posição quando o preço atingir 50% da minha meta de lucro de 2x... Eu sei que preciso imprimir coisas para o Jornal e estou escrevendo isso agora, mas alguém poderia me dizer se estou escrevendo isso errado de qualquer forma? Talvez com relação a "OrderLots()/2"?

"btp" = retorna um preço específico.

Eu não acho que a OrderLots()/2 irá cortá-lo ( perdoe o trocadilho ) em todas as situações, eu tenho certeza que você precisa validar o tamanho da posição que você está procurando fechar contra MarketInfo() MODE_LOTSTEP e MODE_MINLOT

Veja aqui: https://www.mql5.com/en/forum/143966

 
RaptorUK: Eu não acho que a OrderLots()/2 irá cortá-lo ( perdoe o trocadilho ) em todas as situações, eu tenho certeza que você precisa validar o tamanho da posição que você está procurando fechar contra MarketInfo() MODE_LOTSTEP e MODE_MINLOT
Exatamente. Veja meu CloseOrder()
 

Obrigado RaptorUK - Não sei onde estou procurando WHRoeder em seu link, mas obrigado.

É impressão minha, ou o processo de fechamento de lotes em uma posição aberta é um pouco contra intuitivo... parece desnecessariamente complicado, considerando o que eu estou querendo fazer...

Cara, acho que já olhei este código o suficiente para um dia - não estou entendendo como uso MarkerInfo() com OrderClose... parece desnecessariamente complexo.

 
DomGilberto:

Obrigado RaptorUK - Não sei onde estou procurando WHRoeder em seu link, mas obrigado.

É impressão minha, ou o processo de fechamento de lotes em uma posição aberta é um pouco contra intuitivo... parece desnecessariamente complicado, considerando o que eu estou querendo fazer...

Cara, acho que já olhei este código o suficiente para um dia - não estou entendendo como uso MarkerInfo() com OrderClose... parece desnecessariamente complexo.

Se o tamanho de sua posição de Pedido for 0,3 lotes e você quiser fechar metade, isso seria 0,15 lotes, se o MODE_LOTSTEP de seu Corretor for 0,1 então 0,15 é um tamanho de lote inválido . . então antes de usar o OrderClose() valide o tamanho de sua posição que você está prestes a fechar.
 
Ah, consegui! Obrigado RaptorUK! Última pergunta, quando você diz validar o tamanho do lote, você está dizendo compará-lo usando declarações If?
 
DomGilberto: Não tenho certeza de onde estou procurando WHRoeder em seu link, mas obrigado.
O link mais alto dessa página
 
Ah gotchya! Isso é uma codificação épica... :o!

Espero poder manter um dia esse nível de programação... (com um pouco mais de paciência em seu nome - só brincadeira :P)


Obrigado WHRoeder!
 
DomGilberto:
Ah, eu entendi! Obrigado RaptorUK! Última pergunta, quando você diz validar o tamanho do lote, você está dizendo compará-lo usando declarações If?

Não, estou dizendo para ajustá-lo de modo que ele esteja de acordo com MODE_LOTSTEP e MODE_MINLOT . . então ele é válido ( validado ), se você olhar para o link que eu postei . .

mlots = MathFloor(mlots / lotstep) * lotstep; 

Suponha que os lotes foi 0,15 lotes (MODE_MINLOT) foi 0,1 e o lote (MODE_LOTSTEP) foi 0,1, então o código faria isso

mlots = MathFloor(0.15 / 0.1) * 0.1; 
//  MathFloor(0.15 / 0.1) ==  MathFloor( 1.5 )  gives 1

//  mlots = 1 * 0.1;  

portanto, os tramas seriam ajustados de 0,15 para 0,1 e seriam válidos.

 
Ah, ponto em cima! Obrigado por esclarecer isso - entendi!