Fechamento de meio lote. - página 13

 
Desculpe, mas não entendo como isso me ajudaria em nada. Não importa o que acontece no loop e o vazio que é chamado. Trata-se do que eu estou chamando primeiro no "int start()", certamente?

Como eu coli acima, se eu tiver colado a metade da ordem, irrelevante o que é o OrderTicket(), QUALQUER "OP_BUY" aberto será chamado de novo e de novo?

Eu preciso de uma maneira de escrever o código para que dentro do "in start()" e do código acima, ele NÃO continue chamando o "OP_BUY" toda vez APÓS já ter fechado uma metade?
 
DomGilberto:
Desculpe, mas não entendo como isso me ajudaria em nada. Não importa o que acontece no loop e o vazio que é chamado. Trata-se do que eu estou chamando primeiro no "int start()", certamente?

Como eu coli acima, se eu tiver colado a metade da ordem, irrelevante o que é o OrderTicket(), QUALQUER "OP_BUY" aberto será chamado de novo e de novo?

Eu preciso de uma maneira de escrever o código para que dentro do "in start()" e do código acima, ele NÃO continue chamando o "OP_BUY" toda vez APÓS já ter fechado uma metade?

O vazio que é chamado é apenas uma função que está sendo chamada desde o início() . . é exatamente o mesmo que se o código estivesse diretamente no início().

pseudo código:

procurar por OP_BUYs

se encontrado - o TP está na BE ?

se TP não estiver em BE e Bid >= primeiro alvo move TP para BE e fecha metade do pedido

se TP estiver na BE não faça nada

 

SIM!!! Obrigado RaptorUK!

Desculpe, eu não sou tão estúpido quanto o que eu faço com que você saiba ;) - Só que às vezes as coisas têm que ser ligeiramente reiteradas para mim quando sou novo em alguma coisa...

Percebi que todos têm me dito isso há páginas atrás - peço desculpas por não pegar ou entender isso!


CORRETO! Conseguimos finalmente fechar pela metade, nos movimentar para quebrar o equilíbrio e parar o fechamento contínuo das metades pelo mesmo preço :D! Portanto, é praticamente perfeito!!

Tudo o que vou fazer agora, é essencialmente copiar e colar isto para minhas outras saídas e mudar algumas regras e presto de feno! Bobs seu tio = é classificado :)

Vou colocar tudo aqui para que seja justo para outros usarem se assim o desejarem - Depois de tudo, muita paciência dos outros me permitiu não só codificá-lo, mas compreendê-lo também :)

 
Isso é estranho - às vezes quando faço um back-test a metade fecha @ 1:1 não funciona, mas então quando faço um back-test mais curto é se funciona? Estranho... isso é porque o teste de estratégia é uma porcaria, ou eu tenho uma falha com o código?
 
Oh, e o que se sugere fazer se o preço não atingir a primeira meta de 1:1 MAS o prejuízo é MAIS GRANDE do que a entrada....? Como eu criaria uma regra em torno dessa então....
 
DomGilberto:
Oh, e o que se sugere fazer se o preço não atingir a primeira meta de 1:1 MAS o prejuízo é MAIS GRANDE do que a entrada....? Como eu criaria uma regra em torno dessa então....


quando se modifica para atingir o ponto de equilíbrio ??

se o objetivo não alcançado será fechado na OrderStopLoss()

 
deVries:


quando você modifica para quebrar o equilíbrio ??

se o objetivo não alcançado será fechado na OrderStopLoss()


Eu fecho a metade usando OrderClose() e se isso retornar verdadeiro, então eu chamo o vazio de breakeven para mover o stoploss para o breakeven? Assim, o resto da posição aberta em lotes não será fechada continuamente porque se a posição foi movida para o break even, então eu escrevi que não haverá mais fechamento dessa posição até que ela atinja seu preço fixo de tomada de lucro de 1:2.

Entretanto, algumas negociações irão igualar a entrada ou além do break even ANTES que a negociação tenha atingido a primeira meta, NÃO desencadeando o meio fechamento...

Além disso, algumas profissões que saem pela metade e depois se movem para quebrar o equilíbrio funciona perfeitamente.... algumas profissões em que deveria funcionar, não faz nada? Isto pode ser devido a dados pobres e uma falha no testador de estratégia, ou há uma inconsistência com meu código?

E ainda estou recebendo OrderModify 1 - irritante como o caralho...

 

Como você está identificando o pedido depois de fechá-lo para depois modificar o SL para quebrar o equilíbrio? Você sabe que não pode usar corretamente o número original do bilhete ? Quando você fecha uma peça, o número original do bilhete é fechado. A parte restante recebe um novo número de bilhete. Uma maneira de identificá-lo é obter o OrderOpenTime() antes de fechar a peça. Depois de fechar uma peça, a peça restante receberá um novo número de bilhete, mas o OrderOpenTime() será o mesmo de antes.

Você também pode usar essa OrderOpenTime() para identificá-la e evitar que ela seja fechada repetidamente.

Alternativamente, você poderia modificá-la antes de fechá-la. A parte restante de seu pedido manterá o SL ou TP modificado.

Aqui está um teste. Aberto a 0,09 parte fechada 0,07 deixando 0,02

Observe como o número do ticket muda, mas o tempo de abertura permanece o mesmo:

23:42:48 2013.08.01 11:28 SDCMegaTrend EURUSD,M1: aberto #14 comprar 0,09 EURUSD a 1,3240 sl: 1,3037 tp: 1,3737 ok
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: fechar #14 comprar 0,07 EURUSD a 1,3240 sl: 1,3037 tp: 1,3737 ao preço 1,3253
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: Alerta: Ticket 14 OrderOpenTime antes do fechamento da parte: 1375356521
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: Alerta: Ticket 15 OrderOpenTime: 1375356521
23:42:48 2013.08.01 12:45 SDCMegaTrend EURUSD,M1: fechar #15 comprar 0,02 EURUSD a 1,3240 sl: 1,3037 tp: 1,3737 ao preço 1,3242

 
SDC:

Como você está identificando o pedido depois de fechá-lo para depois modificar o SL para quebrar o equilíbrio? Você sabe que não pode usar corretamente o número original do bilhete ? Quando você fecha uma peça, o número original do bilhete é fechado. A parte restante recebe um novo número de bilhete. Uma maneira de identificá-lo é obter o OrderOpenTime() antes de fechar a peça. Depois de fechar uma peça, a peça restante receberá um novo número de bilhete, mas o OrderOpenTime() será o mesmo de antes.

Você também pode usar essa OrderOpenTime() para identificá-la e evitar que ela seja fechada repetidamente.

Alternativamente, você poderia modificá-la antes de fechá-la. A parte restante de seu pedido manterá o SL ou TP modificado.

Aqui está um teste. Aberto a 0,09 parte fechada 0,07 deixando 0,02

Observe como o número do ticket muda, mas o tempo de abertura permanece o mesmo:

23:42:48 2013.08.01 11:28 SDCMegaTrend EURUSD,M1: aberto #14 comprar 0,09 EURUSD a 1,3240 sl: 1,3037 tp: 1,3737 ok
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: fechar #14 comprar 0,07 EURUSD a 1,3240 sl: 1,3037 tp: 1,3737 ao preço 1,3253
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: Alerta: Ticket 14 OrderOpenTime antes do fechamento da peça: 1375356521
23:42:48 2013.08.01 12:26 SDCMegaTrend EURUSD,M1: Alerta: Ticket 15 OrderOpenTime: 1375356521
23:42:48 2013.08.01 12:45 SDCMegaTrend EURUSD,M1: fechar #15 comprar 0,02 EURUSD a 1,3240 sl: 1,3037 tp: 1,3737 ao preço 1,3242


Ah - Fantástico, obrigado. Esqueci completamente a OrderOpenTime() - é uma ótima maneira de fazer isso! Obrigado pela dica - vou experimentar com isso agora.

Seguindo o meu post anterior, consegui fazer com que funcionasse muito mais suavemente agora - o OrderModify error 1 só aparece raramente agora. Parece estar funcionando mais suavemente agora.

O único problema é que, se eu tiver uma troca em que o stop loss é >= do que OrderEntry() - (assumindo que estamos falando de um longo), então ele não fechará metade da ordem porque o critério principal para fechar a metade, não foi cumprido.

Este código isolado aqui é o que inicia o fechamento da metade dos lotes, e a parada do fechamento contínuo da metade pelo mesmo preço - (não é a única coisa em "in start()", apenas tornou mais fácil de ver):



   

int start()
{

   if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
      {
      if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss())
         {
         CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }
      
      if(OrderType()==OP_SELL && OrderOpenPrice() < OrderStopLoss())
         {
         CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }   
      } 
}
Como eu incorporaria a função OrderOpenTime() para ter um melhor controle ao garantir que cada comércio feche lá meio lote à 1:1 SEM que falte algum lugar na parada É >= a OrderOpen()?
 

Há várias maneiras de se certificar de que cada pedido esteja parcialmente fechado, minha maneira favorita de fazê-lo é modificar o TP por um tubo quando eu o fecho.

Assim, por exemplo, preciso de um TP de 100 pips, então abro o pedido com um TP de 99 pips. Sei que antes que o lucro seja alcançado, meu pedido será fechado em 40 pips. Quando isso acontece, eu modifico o TP para 100 pips. Portanto, qualquer pedido que tenha um lucro >= 40 pips e um TP < 100 pips precisa ser parte fechada. Qualquer pedido com um TP > 99 pips já foi parcialmente fechado. Se você o fizer dessa maneira não faz diferença o que é o SL. Apenas certifique-se de normalizar todos os pedidos duplicando o preço antes de fazer cálculos sobre eles.