Fechamento de meio lote. - página 6

 
Você quer dizer se eu colocar "if(FirstTarget_Buy == Bid)" ? (Obviamente não é isso, pois não funciona).
 
DomGilberto:
Você quer dizer se eu colocar "if(FirstTarget_Buy == Bid)" ? (Obviamente não é isso, pois não funciona).

Ou algo como . . .

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   //  close the Order
   }

. . tendo em mente os problemas de comparação de duplas ( Can price != preço ? )

Você também precisa pensar sobre o spread e se o seu alvo é inclusivo ou exclusivo do spread.

 

(suspiro) ok - Obrigado por sua ajuda Raptor! Isto está se tornando frustrante. Juro que não precisa ser tão demorado... Que se a afirmação acima, não vai funcionar.

Sinceramente, eu estou no fim...

Vai fechar várias metades (metade de metade de metade etc.) se eu não incluir essa declaração "se" acima (nesse caso nada acontece), e apenas colocar a fronteira próxima a "Licitação" - não consigo entender como é saber quando fechar essa metade...

Quaisquer outras sugestões serão muito apreciadas, obrigado por sua ajuda!

 
DomGilberto:

(suspiro) ok - Obrigado por sua ajuda Raptor! Isto está se tornando frustrante. Juro que não precisa ser tão demorado... Que se a afirmação acima, não vai funcionar.

Sinceramente, eu estou no fim...

Vai fechar várias metades (metade de metade de metade etc.) se eu não incluir essa declaração "se" acima (nesse caso nada acontece), e apenas colocar a fronteira próxima a "Licitação" - não consigo entender como é saber quando fechar essa metade...

Se você não especificar uma condição de preço que deve ser cumprida, então ele apenas fechará metade da Ordem assim que puder, a Licitação é sempre Licitada e é válida para fechar um OP_BUY.

A declaração se funcionará . . se não descobrir o porquê, acrescente uma impressão() antes dela . . . e depois dela.

Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

   //  close the Order
   }

Não se preocupe, fica mais frustrante . . quando você tem seu código funcionando exatamente como você quer e o executa no Strategy Tester e descobre que é tão bom quanto um Coin Toss

 
Ok, obrigado! Você também pode me esclarecer por que às vezes eu dirijo o ST, depois pará-lo e nada é impresso dentro do Jornal...?

" quando você tem seu código funcionando exatamente como você quer e você o executa no Testador de Estratégia e acha que é tão bom quanto um lançamento de moedas".

Sim, eu só posso imaginar! Na verdade, consegui escrever 6 páginas (não sei quantas linhas isso é) aproximadamente de código - estou acrescentando nestas partes cruciais... uma das quais está fechando 50% à 1:1 e se movendo para o break even... MAS NOOOOooo o fechamento do lote é contra intuitivo (no que me diz respeito)
 
DomGilberto:
Ok, obrigado! Você também pode me esclarecer por que às vezes eu dirijo o ST, depois pará-lo e nada é impresso dentro do Jornal...?

Você está olhando para a aba correta do diário ? há duas . . . a que você deve estar olhando na janela do Strategy tester e a que você deve olhar ao lado da aba dos especialistas. A melhor maneira é olhar para o arquivo de log salvo nos logs do testador.

 
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 10
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.08.01 13:44:27     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000
   if(OrderType()==OP_BUY && Bid >= FirstTarget_Buy +(Point / 2)){
                  Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                  bool Close_Half_Order_Buy = OrderClose(OrderTicket(),half,Bid,3,CLR_NONE);
                  if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ", GetLastError());
                  }
Isso é perfeito - A primeira compra_alvo está exatamente certa. O número de lotes a serem fechados é exatamente o correto. Tudo isso é impresso em um pedido pendente - No entanto, não fecha a esse preço, mesmo que eu o tenha calculado corretamente? Estou selecionando-o quando é um "OP_BUY"... Desculpe-me por fazer todas estas perguntas, mas não entendo porque isto não vai funcionar?
 
DomGilberto:
Isso é perfeito - A primeira compra_alvo está exatamente certa. O número de lotes a serem fechados é exatamente o correto. Tudo isso é impresso em uma ordem pendente - No entanto, não fecha a esse preço, mesmo que eu tenha calculado corretamente... Estou selecionando-o quando se trata de um "OP_BUY"... Desculpe-me por fazer todas estas perguntas, mas não entendo porque isto não vai funcionar?

Você não adicionou a impressão antes do if( . . . . .

Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );   //  add this line too . . .

if(Bid >= FirstTarget_Buy + (Point / 2) )
   {
   Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );

   //  close the Order
   }

. . sem ela como você sabe que Bid foi maior ou igual a FirstTarget_buy ? se não foi então o if() não é verdadeiro e a Ordem não está parcialmente fechada . . . e se ainda é uma Ordem Pendente então não é um OP_BUY.

 
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Current Bid: 1.35972 FirstTarget_Buy: 1.37931
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 9
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.08.01 14:19:36     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000

Posso ver quando a Proposta é igual ou maior que "FirstTarget_buy"? Eu testo em um negócio que vai até o alvo de takeprofit 2:1 de recompensa... Então eu sei que vai 1:1 de recompensa - que é onde os lotes devem ser reduzidos pela metade... Todas as funções de impressão imprimem em ordens pendentes (isto é, se houver uma ordem pendente e eu parar o teste, todas as impressões aparecem - entretanto, se eu parar o teste depois que uma das ordens pendentes for acionada, não há nada impresso em termos de "Imprimir", no diário?)

Não acredito que estou pendurado nisto - este está se tornando o maior desafio até agora - mas sinto que tenho outras coisas que são muito mais complexas...

(atualização: estou assumindo que preciso monitorar o Bid em uma base de tique por tique para puxar o preço através e dentro do meu "para" loop?

Para que a afirmação "IF()" seja verdadeira, o Bid eventualmente será igual ao meu "FirstTarget_buy"?

 
DomGilberto:

Posso ver quando a Licitação é igual ou maior que "FirstTarget_buy"? Eu testo em um negócio que vai até o alvo de takeprofit 2:1 de recompensa... Então eu sei que vai 1:1 de recompensa - que é onde os lotes devem ser reduzidos pela metade... Todas as funções de impressão imprimem em ordens pendentes (isto é, se houver uma ordem pendente e eu parar o teste, todas as impressões aparecem - entretanto, se eu parar o teste depois que uma das ordens pendentes for acionada, não há nada impresso em termos de "Imprimir", no diário?)

OK, agora você está fazendo progressos . . . você só precisa descobrir porque um OP_BUY não está acionando seu código que imprime todas as variáveis da mesma forma que uma Ordem pendente é . . . se você quiser postar esse código eu vou procurar.