Chiusura di mezzi lotti. - pagina 6

 
Intendi se metto "if(FirstTarget_Buy == Bid)"? (Ovviamente non questo perché non funziona).
 
DomGilberto:
Vuoi dire che se metto "if(FirstTarget_Buy == Bid)" ? (Ovviamente non questo perché non funziona).

O qualcosa come . . .

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

. . . tenendo presente i problemi di confronto dei doppi ( prezzo può != prezzo ? )

Devi anche pensare allo spread e se il tuo target è comprensivo o esclusivo dello spread.

 

(sigh) ok - Grazie per il tuo aiuto Raptor! Sta diventando frustrante. Giuro che non c'è bisogno di perdere così tanto tempo... L'istruzione If di cui sopra non funziona.

Sono onestamente a corto di idee...

Chiuderà diverse metà (metà di una metà di una metà ecc.) se non includo quella dichiarazione "if" sopra (nel qual caso non succede nulla), e metto solo l'ordine di chiusura a "Bid" - non riesco a capire come fa a sapere quando chiudere questa metà però...

Qualsiasi altro suggerimento sarà molto apprezzato, grazie per il vostro aiuto!

 
DomGilberto:

(sigh) ok - Grazie per il tuo aiuto Raptor! Questo sta diventando frustrante. Giuro che non c'è bisogno che richieda così tanto tempo... L'istruzione If di cui sopra non funziona.

Sono onestamente a corto di idee...

Chiuderà diverse metà (metà di una metà di una metà ecc.) se non includo quella dichiarazione "if" sopra (nel qual caso non succede nulla), e metto solo l'ordine di chiusura a "Bid" - non riesco a capire come fa a sapere quando chiudere questa metà però...

Se non specifichi una condizione di prezzo che deve essere soddisfatta, allora chiuderà semplicemente metà dell'ordine appena può, Bid è sempre Bid ed è valido per chiudere un OP_BUY.

L'istruzione if funzionerà . . . se non scopre il perché, aggiungete una Print() prima di essa . . . e dopo di essa.

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
   }

Non preoccupatevi, diventa più frustrante . . . quando avete il vostro codice che funziona proprio come volete e lo eseguite nello Strategy Tester e scoprite che è buono come un lancio di monete

 
Ok grazie! Puoi anche illuminarmi sul perché a volte eseguo ST, poi lo fermo e non viene stampato nulla all'interno del Journal...?

"Quando hai il tuo codice che funziona proprio come vuoi e lo esegui nello Strategy Tester e scopri che è buono come un lancio di monete"

Sì, posso solo immaginare! In realtà sono riuscito a scrivere 6 pagine (non so quante righe siano) circa di codice - sto aggiungendo queste parti cruciali... una delle quali è la chiusura del 50% a 1:1 e il passaggio al break even... MA NOOOOooo la chiusura del lotto è contro intuitiva (per quanto mi riguarda)
 
DomGilberto:
Ok grazie! Puoi anche illuminarmi sul perché a volte lancio ST, poi lo fermo e non viene stampato nulla all'interno del Journal...?

Stai guardando la scheda corretta del diario? Ce ne sono due... quella che dovresti guardare nella finestra di Strategy tester e quella che dovresti guardare accanto alla scheda degli esperti. Il modo migliore è guardare il file di log salvato in tester\logs

 
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());
                  }
Questo è perfetto - Il firsttarget_buy è esattamente giusto. Il numero di lotti da chiudere è esatto. Tutto questo viene stampato su un ordine pendente - Tuttavia, non si chiude a quel prezzo, anche se l'ho calcolato correttamente? Lo sto selezionando quando è un "OP_BUY"... Scusa se faccio tutte queste domande, ma non capisco perché non funziona?
 
DomGilberto:
Questo è perfetto - Il firsttarget_buy è esattamente giusto. Il numero di lotti da chiudere è esattamente giusto. Tutto questo viene stampato su un ordine pendente - Tuttavia, non si chiude a quel prezzo, anche se l'ho calcolato correttamente? Lo sto selezionando quando è un "OP_BUY"... Scusa se faccio tutte queste domande, ma non capisco perché non funziona?

Non hai aggiunto la stampa prima dell'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
   }

. . . senza di essa come fai a sapere che Bid era maggiore o uguale a FirstTarget_buy? se non lo era allora l'if() non è vero e l'ordine non è parzialmente chiuso . . . e se è ancora un ordine Pending allora non è un 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 vedere quando il Bid è uguale o superiore a "FirstTarget_buy"? Faccio il test su un trade che va fino all'obiettivo di takeprofit ratio 2:1 di ricompensa... Quindi so che va a 1:1 di ricompensa - che è dove i lotti dovrebbero essere dimezzati... Tutte le funzioni di stampa si stampano sugli ordini pendenti (cioè se c'è un ordine pendente e fermo il test, tutte le stampe appaiono - tuttavia, se fermo il test dopo che uno degli ordini pendenti è scattato, non c'è niente stampato in termini di "Stampa", nel giornale?)

Non posso credere di essere bloccato su questo - questa sta diventando la più grande sfida finora - eppure sento di avere altre cose che sono molto più complesse...

(aggiornamento: sto assumendo che ho bisogno di monitorare Bid su una base tick per tick per tirare il prezzo attraverso e nel mio ciclo "for"?

Perché l'istruzione "IF()" sia vera, il Bid sarà alla fine uguale al mio "FirstTarget_buy"?

 
DomGilberto:

Posso vedere quando il Bid è uguale o superiore a "FirstTarget_buy"? Faccio il test su un trade che va fino all'obiettivo di takeprofit ratio 2:1 di ricompensa... Quindi so che va a 1:1 di ricompensa - che è dove i lotti dovrebbero essere dimezzati... Tutte le funzioni di stampa vengono stampate su ordini pendenti (cioè se c'è un ordine pendente e fermo il test, tutte le stampe appaiono - tuttavia, se fermo il test dopo che uno degli ordini pendenti è scattato, non c'è niente stampato in termini di "Stampa", nel giornale?)

OK, ora stai facendo progressi . . . devi solo scoprire perché un OP_BUY non fa scattare il tuo codice che stampa tutte le variabili allo stesso modo di un ordine pendente. . . se vuoi postare quel codice lo guarderò.