Apertura trade dopo numero barre con condizione
Forums › ProRealTime forum Italiano › Supporto ProOrder › Apertura trade dopo numero barre con condizione
- This topic has 23 replies, 2 voices, and was last updated 5 years ago by robertogozzi.
-
-
09/30/2019 at 12:02 PM #108905
Ciao a tutti
Domanda semplice per chi vuole imparare come me 🙂
Dovrei istruire il proorder a aprire un trade dopo un x numero di barre, SOLO SE il prezzo non ha toccato un certo livello all’interno di quel range x di barre.
Avevo pensato ad un ciclo loop sul quale però non sono molto pratico. Mi fate un esempio di codice che potrei usare?
Grazie
09/30/2019 at 2:14 PM #108923Non credo serv aun loop, ad ogni modo puoi fare un esempio (testo, non occorrono immagini)?
09/30/2019 at 2:24 PM #108924Un esempio può essere alla presenza di un pattern candlestick e identificazione del target
123If Bullsih Engulfing = 1 thenClose = My TargetEndifPoi un comando di apertura trade (es. Buy At Market) ma solo dopo 10 barre dalla identificazione del pattern. Il trade non si apre se il prezzo nelle X barre (10, nell’esempio) ha toccato “MyTarget”
L’alternativa è usare un comando a tempo…invece di 10 barre potrebbe essere 50 min (nel caso del TimeFrame a 5 min)
Probabilmente il comando barindex potrebbe aiutarmi ma non so incastrarlo con l’eccezione del “tocco” che annulla il trade.
Grazie
09/30/2019 at 4:30 PM #108937La tua riga dovrebbe essere:
1MyTarget = closeIl codice è questo (non l’ho provato):
12345678910111213141516171819202122232425ONCE Conto = 0// verificare che, se il conto è già iniziato, non abbia superato 10 o che il prezzo non abbia toccato MyTargetIF Conto > 0 ThenConto = Conto + 1If Conto > 10 Or high >= MyTarget ThenConto = 0MyTarget = 0EndifEndif// una volta a mercato azzerare il conteggio e NyTargetIf OnMarket ThenConto = 0MyTarget = 0Endif// quando si verificano le condizione settare MyTarget ed iniziare il conteggioIf BullsihEngulfing = 1 thenMyTarget = closeConto = 1Endif// entrare a mercato se già non lo si è, se il conteggio è 10 e se Mytarget non è stato toccatoIF MyTarget > 0 AND Not OnMarket And Conto = 10 ThenBuy 1 Contract At MarketSet Target pProfit 100Set Stop pLoss 50Endif09/30/2019 at 7:19 PM #108945Grazie Roberto. Puoi però cortesemente dirmi come riesco a “fissare” il target proprio quando esso è uguale al close del pattern come l’esempio?
Tu hai settato un Target Profit a 100 punti, in realtà “MyTarget” è uguale proprio al close del pattern “Bullish Engulfing”
Sto facendo un po di prove…per quanto effettivamente il codice pare apra la posizione dopo 10 barre (certificate le condizioni date), purtroppo poi esce praticamente dal trade all’apertura della barra successiva:
12345678910111213If MyTarget > 0 AND Not OnMarket And Conto = 10 ThenBuy 1 Contracts at marketELSIF MyTarget > 0 AND NOT ONMARKET And Conto = 10 ThenSellShort 1 Contracts at marketENDIF//----- Trade Closing ConditionsIF LONGONMARKET THENSELL AT MyTarget LimitELSIF SHORTONMARKET THENEXITSHORT AT MyTarget LimitENDIF09/30/2019 at 9:22 PM #108949Il tuo codice entra sempre LONG perché le condizioni sono identiche e quella LONG è la prima.
Perché sono identiche?
Quale dev’essere il tuo target?
09/30/2019 at 9:39 PM #108951Ciao Roberto
Vedi anche il “sellshort” perchè sto adattando il codice a specchio sul pattern inverso…mi sono dimenticato di toglierlo nel post precedente.
Il punto è che il trade esce sempre alla candela successiva (immagine), quando in realtà il target è pari al prezzo di close del pattern esattamente come ho riportato nell’esempio al terzo post.
Infatti non capisco come mai nel tuo codice ci siano sia MyProfit = Close e sia Set Target Profit
Come faccio a istruire proorder affinchè il target sia solo il close del pattern “Bullish Engulfing”? In altre parole ancora:
- La seconda candela (close) che compone il pattern Bullish Engulfing rappresenta il target;
- Identificato il pattern ci deve essere una istruzione che mette in standby il trade, che si attiva solo dopo N candele dal pattern;
- Se prima delle N candele il prezzo ritocca il close del pattern Engulfing, il segnale è annullato e si ricomincia il controllo per l’identificazione di un successivo pattern.
- Se le condizioni vengono rispettate (quindi sono trascorse 10 candele e il prezzo in queste 10 candele non ha mai ritestato il close del pattern) il trade si attiva e come target ha il close della seconda candela del pattern.
Spero di aver chiarito ogni dubbio e grazie in anticipo
Spero di esser stato piu chiaro.
09/30/2019 at 10:56 PM #108955Il mio è un esempio, tu metti quello che vuoi. Se il tuo target è MyTarget dovrai indicare la distanza tra il prezzo d’entrata e MyTarget. Devi indicarla in prezzo, così com’è, se usi SET TARGET PROFIT, esempio:
1SET TARGET PROFIT abs(close - MyTarget)oppure in Pips se usi SET TARGET pPROFIT:
1SET TARGET PROFIT abs(close - MyTarget) / pipsizeIl perché esce non so dirtelo. Per capirlo mi serve il codice completo in modo da replicare il backtest (su Dax a 5 minuti, hai detto).
09/30/2019 at 11:18 PM #108956Ciao Roberto
Quello che sto facendo è in larga parte per uso didattico e imparare, comunque ti riporto l’intero codice, verifica se ti torna. Basta che torni al mio post precedente per capire cosa vorrei che accadesse. Attualmente il principale problema è che, verificate le condizoni, il trade chiude subito.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465DEFPARAM Cumulateorders=FalseBullish = close > openBearish = open > close//identificazione PATTERNIF Bullish thenBullPattern = 1MyProfitBull=CloseELSE BullPattern=0ENDIFIF Bearish thenBearPattern = 1MyProfitBear=CloseELSE BearPattern=0ENDIF// verificare che, se il conto è già iniziato, non abbia superato la soglia o che il prezzo non abbia toccato i targetONCE Conto = 0IF Conto > 0 ThenConto = Conto + 1If Conto > 7 Or high >= MyProfitBull ThenConto = 0MyProfitBull = 0elsif Conto > 7 or low <= MyProfitBear thenConto = 0MyProfitBear = 0EndifEndif// una volta a mercato azzerare il conteggio e azzerare MyProfitBull/MyProfitBearIf OnMarket ThenConto = 0MyProfitBull = 0MyProfitBear = 0Endif// quando si verificano le condizioni settare MyProfitLOng/MyProfitShort ed iniziare il conteggioIf (BullPattern=1) thenMyProfitBull = Close[0]Conto = 1ELSIF (BearPattern=1) thenMyProfitBear = Close[0]Conto = 1Endif// entrare a mercato se già non lo si è, se il conteggio è pari alla soglia e se MyProfitBull/MYProfitBear non sono stati toccatiIf MyProfitBull > 0 AND Not OnMarket And Conto = 7 ThenBuy 1 Contracts at marketELSIF MyProfitBear > 0 AND NOT ONMARKET And Conto = 7 ThenSellShort 1 Contracts at market ENDIF//----- Trade Closing ConditionsIF LONGONMARKET THENSELL AT MyProfitBull LimitELSIF SHORTONMARKET THENEXITSHORT AT MyProfitBear LimitENDIF10/02/2019 at 3:14 PM #109107Non mi apre nessuna operazione sul DAX a 5 minuti, tu dove l’hai provato?
10/02/2019 at 4:20 PM #109114S&P 500 future ma quel codice ne rappresenta una sintesi. La logica che vorrei correggere è la stessa comunque ti incollo il codice intero sotto:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495DEFPARAM Cumulateorders=FalseBullish = close > openBearish = open > closeBody = (abs(open - close) > 0.5 * pipsize)UpperSHGreen = High > CloseLowerSHRed = Low < Close//------ Trading Periods ParametersIf (Time >=153000 AND Time <=154000) OR (Time < 091500 OR Time > 210000)OR (Month = 12 AND Day > 15) OR (Month = 8 AND Day >10) THENNoPattern = 1ELSENoPattern = 0ENDIF// ----- ombra assente sull'Apertura - identificazione PATTERNIF Bullish[1] and Bearish and (Open=High) and (Body[1]) AND LowerSHRed AND (NoPattern=0) THENRedNSH=1MyProfitLong=OpenELSERedNSH=0ENDIFIF Bearish[1] and Bullish and (Low=Open) and (Body[1]) AND UpperSHGreen AND (NoPattern=0)THENGreenNSH=1MyProfitShort=OpenELSEGreenNSH=0ENDIF//----- Counter Bars per apertura posizione// verificare che, se il conto è già iniziato, non abbia superato la soglia o che il prezzo non abbia toccato MyTargetONCE Conto = 0IF Conto > 0 ThenConto = Conto + 1If Conto > 7 Or high >= MyProfitLong ThenConto = 0MyProfitLong = 0elsif Conto > 7 or low <= MyProfitShort thenConto = 0MyProfitShort = 0EndifEndif// una volta a mercato azzerare il conteggio e azzerare MyProfitLong/MyProfitShortIf OnMarket ThenConto = 0MyProfitLong = 0MyProfitShort = 0Endif// quando si verificano le condizioni settare MyProfitLOng/MyProfitShort ed iniziare il conteggioIf (GreenNSH=1) thenMyProfitShort = Open[0]Conto = 1ELSIF (RedNSH=1) thenMyProfitLong = Open[0]Conto = 1Endif// entrare a mercato se già non lo si è, se il conteggio è pari alla soglia e se MyProfitLong/MYProfitShort non sono stati toccatiIf MyProfitLong > 0 AND Not OnMarket And Conto = 7 ThenBuy 1 Contracts at marketELSIF MyProfitShort > 0 AND NOT ONMARKET And Conto = 7 ThenSellShort 1 Contracts at marketENDIF//----- Trade Closing ConditionsIF LONGONMARKET THENSELL AT MyProfitLong LimitELSIF SHORTONMARKET THENEXITSHORT AT MyProfitShort LimitENDIFIF ONMARKET AND (BarIndex - TradeIndex >= 40) thenEXITSHORT AT MARKETSELL AT MARKETENDIF10/02/2019 at 5:33 PM #109123Ho modificato un pò il codice, spostando anche qualche riga.
Sembra funzionare.
Ho aggiunto alla fine le istruzioni GRAPH e GRAPHONPRICE affinché tu possa monitorare, nell’apposito riquadro evidenziato nella foto, candela per candela, i valori di tutte le variabili che t’interessano, anche colorandole diversamevte. GRAPH serve per visualizzare nel riquadro delle variabili quelle che non hanno attinenza col prezzo, mentre GRAPHONPRICE quelle che si vedono meglio visualizzandole SUL prezzo:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109DEFPARAM Cumulateorders=FalseONCE Conto = 0ONCE MaxBarre = 7Bullish = close > openBearish = open > closeBody = (abs(open - close) > 0.5 * pipsize)UpperSHGreen = High > CloseLowerSHRed = Low < Close//------ Trading Periods ParametersIf Not OnMarket AND OnMarket[1] ThenConto = 0MyProfitLong = 0MyProfitShort = 0EndifIf (Time >=153000 AND Time <=154000) OR (Time < 091500 OR Time > 210000)OR (Month = 12 AND Day > 15) OR (Month = 8 AND Day >10) THENNoPattern = 1Conto = 0MyProfitLong = 0MyProfitShort = 0ELSENoPattern = 0ENDIF//----- Counter Bars per apertura posizione// verificare che, se il conto è già iniziato, non abbia superato la soglia o che il prezzo non abbia toccato MyTargetIF Conto > 0 ThenConto = Conto + 1IF Not OnMarket ThenIf Conto > MaxBarre Or high >= MyProfitLong ThenConto = 0MyProfitLong = 0elsif Conto > MaxBarre or low <= MyProfitShort thenConto = 0MyProfitShort = 0EndifEndifEndif// ----- ombra assente sull'Apertura - identificazione PATTERNIF Bullish[1] and Bearish and (Open=High) and (Body[1]) AND LowerSHRed AND (NoPattern=0) THEN//RedNSH=1MyProfitLong=OpenConto = 1//ELSE//RedNSH=0ENDIFIF Bearish[1] and Bullish and (Low=Open) and (Body[1]) AND UpperSHGreen AND (NoPattern=0)THEN//GreenNSH=1MyProfitShort=OpenConto = 1//ELSE//GreenNSH=0ENDIF// una volta a mercato azzerare il conteggio e azzerare MyProfitLong/MyProfitShortIf OnMarket ThenConto = 0//MyProfitLong = 0//MyProfitShort = 0Endif// quando si verificano le condizioni settare MyProfitLOng/MyProfitShort ed iniziare il conteggio//If (GreenNSH=1) then//MyProfitShort = Open[0]//Conto = 1//ELSIF (RedNSH=1) then//MyProfitLong = Open[0]//Conto = 1//Endif// entrare a mercato se già non lo si è, se il conteggio è pari alla soglia e se MyProfitLong/MYProfitShort non sono stati toccatiIf MyProfitLong > 0 AND Not OnMarket And Conto = MaxBarre ThenBuy 1 Contracts at marketELSIF MyProfitShort > 0 AND NOT ONMARKET And Conto = MaxBarre ThenSellShort 1 Contracts at marketENDIF//----- Trade Closing ConditionsIF LONGONMARKET THENSELL AT MyProfitLong LimitELSIF SHORTONMARKET THENEXITSHORT AT MyProfitShort LimitENDIFIF ONMARKET AND (BarIndex - TradeIndex >= 40) thenEXITSHORT AT MARKETSELL AT MARKETENDIFgraph NoPatterngraphonprice MyProfitLong coloured(0,0,255,255)graphonprice MyProfitShort coloured(0,255,0,255)graph Contograph MaxBarregraph OnMarket1 user thanked author for this post.
10/03/2019 at 12:17 AM #10913910/03/2019 at 3:06 AM #109141Non ci avevo fatto caso.
Sostituisci la linea 58 con:
1IF Bearish[1] and Bullish and (Open=Low) and (Body[1]) AND UpperSHGreen AND (NoPattern=0)THEN10/03/2019 at 7:54 AM #109144 -
AuthorPosts
Find exclusive trading pro-tools on