Fechamento de meio lote. - página 17

 
SDC:

Você não está pensando de forma lógica. Como modificar o número mágico o ajudaria mais do que conhecer o OrderOpenTime() ? É exatamente a mesma coisa.


Porque preciso fazer vários fechamentos parciais com um pedido... Se eu fizer um OrderClose() e comparar com OrderOpenTime() e depois fazer outro OrderClose() com o mesmo OrderClose(), mas novamente, comparar usando o OrderOpenTime(), ele não funcionará, porque haverá uma ordem fechada dentro do histórico e ele não fechará a segunda função OrderClose()...

Agora, se eu pudesse OrderClose() usando um Magicnumber 1234 e depois que o OrderClose() estivesse completo, eu poderia modificar o número mágico de ordens para 12345, portanto, a primeira função que chamou o MagicNumber 1234 não seria mais aplicável à ordem remanescente, já que a ordem remanescente foi agora atribuída a um número mágico 12345. Agora com este MagicNumber 12345, eu poderia então usar isso com outra função OrderClose() (assumindo que seja aplicável) e repetir o processo até que o que eu tenho, esteja funcionando e funcionando como eu quero que funcione.

Até lá, OrderOpenTime() só pode funcionar uma vez.
 
Eu tinha acabado de pensar, e me corrigiu se eu estava errado, mas e se eu usasse OrderOpenTime() AND OrderCloseTime()?

Se eu comparar o OrderOpenTime() atual com as posições historicamente fechadas no mesmo Symbol() e não encontrar nenhuma correspondência, então o CloseOrder() será executado. Agora, se a segunda função CloseOrder() for chamada (um preço superior ao da primeira CloserOrder(), e eu quiser fechar mais alguns lotes na mesma ordem), eu poderia comparar a OrderOpenTime() E a OrderCloseTime(). Se a OrderOpenTime(OpenPosition) == OrderOpenTime(History) && OrderCloseTime(history) > OrderOpenTime(OpenPosition) THEN OrderClose() a segunda função...?
 

Bem, você nunca disse nada sobre múltiplos fechamentos parciais antes, você disse que só queria fechar a ordem pela metade, mas de qualquer forma você está pensando demais e perdendo completamente o óbvio.

Por que a OrderOpenTime() só funciona uma vez?

data estática de fechamento parcial;

data estática hora parcialmente fechada;

se o pedido atende aos critérios de fechamento de peça nível 1 e a opção não corresponde à peça fechada, peça fechada, acrescente carimbo de data/hora à peça fechada.

se o pedido atender ao critério de fechamento de peça nível 1 e sua opentime corresponder à peça fechada uma vez, a peça já foi fechada uma vez, então não a feche novamente.

se o pedido atender ao critério de fechamento de peça nível 2 e não corresponder à peça fechada duas vezes, feche-a e adicione o carimbo de data/hora à variável, peça fechada duas vezes.

 

Também deve evitar fazer qualquer coisa com a OrderHistory. Se você fizer um longo backtest você pode ter centenas, até milhares de pedidos na história, sua EA estaria comparando seu pedido aberto com todos eles em cada tick. É muito lento fazer isso e seus backktests ficarão dolorosamente mais lentos e mais lentos à medida que mais tempo eles funcionarem, maior será a história.

 
SDC:

Também deve evitar fazer qualquer coisa com a OrderHistory. Se você fizer um longo backtest você pode ter centenas, até milhares de pedidos na história, sua EA estaria comparando seu pedido aberto com todos eles em cada tick. É muito lento fazer isso e seus backktests ficarão dolorosamente mais lentos e mais lentos à medida que mais tempo eles funcionarem, maior será a história.


De que outra forma posso fazer isso então...?
 

acabo de lhe mostrar como se faz!! Se existe uma maneira mais direta de fazê-lo do que isso, eu gostaria de saber o que é. Faça-o com a história se você quiser, eu só estava lhe dando minha opinião sobre como fazê-lo dessa maneira, é tudo.

 
SDC:

acabo de lhe mostrar como se faz!! Se existe uma maneira mais direta de fazê-lo do que isso, eu gostaria de saber o que é. Faça-o com a história se você quiser, eu só estava lhe dando minha opinião sobre como fazê-lo dessa maneira, é tudo.


Oh, eu vejo a data e hora estática do OrderClose() para que eu possa compará-la com o tempo inicial de abertura da ordem atual, ao invés de olhar para qualquer coisa que tenha a ver com o histórico?
 

sim

 
Boa - obrigado por sua ajuda!

O Static Datetime é bastante novo para mim, então amanhã estarei trabalhando nisto e verei onde chego! Espero então conseguir resolver esta parte irritante do meu código :)
 
SDC:

Bem, você nunca disse nada sobre múltiplos fechamentos parciais antes, você disse que só queria fechar a ordem pela metade, mas de qualquer forma você está pensando demais e perdendo completamente o óbvio.

Por que a OrderOpenTime() só funciona uma vez?

data estática de fechamento parcial;

data estática hora parcialmente fechada;

se o pedido atende aos critérios de fechamento de peça nível 1 e a opção não corresponde à peça fechada, peça fechada, acrescente carimbo de data/hora à peça fechada.

se o pedido atender ao critério de fechamento de peça nível 1 e sua opentime corresponder à peça fechada uma vez, a peça já foi fechada uma vez, então não a feche novamente.

se o pedido atender ao critério de fechamento de peça nível 2 e não corresponder à peça fechada duas vezes, feche-a e adicione o carimbo de data/hora à variável, peça fechada duas vezes.


Banging! Isto é um prazer - Muito mais fácil do que eu imaginava também! Apenas comecei a olhar para ele, 5 minutos depois, tenho-o funcionando :) Muito obrigado por sua ajuda! Agora vou incorporar minhas múltiplas funções OrderClose() e ver se consigo colocá-lo em funcionamento. Uma vez que eu tenha feito isto, vou fazer outro tópico para retribuir a ajuda que recebi de outros aqui! Acho que isto é definitivamente algo que outros poderiam usar em um post conciso.

Ainda não estou fora de perigo, mas essa data estática está funcionando perfeitamente com este único pedido de fechamento(). Também não vejo porque não deveria para os outros :)
Razão: