Singola operazione MultiTimeFrame
Forums › ProRealTime forum Italiano › Supporto ProOrder › Singola operazione MultiTimeFrame
- This topic has 9 replies, 2 voices, and was last updated 3 years ago by robertogozzi.
-
-
05/04/2021 at 8:54 PM #168794
Ciao Roberto, ho provato un tuo snippet code sul multitimeframe (MTF), attraverso il quale si dovrebbe aprire un unica operazione nel timeframe superiore, ma nel mio semplice esempio non funziona
(riferimento libreria snippetcode di GraHal , n.3 – https://docs.google.com/spreadsheets/d/1rgboqj7sVwsP9ZRhOduOefye48QMWC07jWVXCl-KJPU/edit#gid=0).
Nel mio esempio di prova si utilizza un MTF ad 1 ora ed uno operativo (default) ad 1 minuto.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647DEFPARAM CumulateOrders=FalseDEFPARAM Flatbefore=080000DEFPARAM Flatafter=220000//-------------------------------------------------------------------------------timeframe(1hour,updateOnClose)C1= closeH1 = HighL1= Low//------------------------------------------timeframe(1 minute)if low[1]<L1 and close>L1 thenbuy 1 contract at marketendifif high>H1 thensell 1 contract at marketendif//----------------------------------------------------pointToReach=50*pointSizepointToKeep=20*pointSizeIf not onmarket thennewSL=0endifIf longonmarket thenIf newSL=0 and close-tradeprice[1]>pointToReach thennewSL=tradeprice(1)+pointToKeependifIf newSL>0 and close-newSL>pointToReach thennewSL = newSL+pointToKeependifendifIf shortonmarket thenIf newSl=0 and tradeprice(1)-close>pointToReach thennewSL = tradeprice(1)-pointToKeependifIf newSl>0 and newSL-close>pointToReach thennewSL = newSl-pointToKeependifendifif newSL>0 thensell at newSL STOPexitshort at newSL STOPendif//----------------------------------------------------set stop %loss 0.3Quando aggiungo lo snippetcode, secondo esempio, non funziona più bene. Puoi controllare? Grazie (provato su Nasdaq 1 minuto – 30K, CFD)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263DEFPARAM CumulateOrders=FalseDEFPARAM Flatbefore=080000DEFPARAM Flatafter=220000//-------------------------------------------------------------------------------timeframe(1hour,updateOnClose)IF Not OnMarket THENBarCount = 0ELSEBarCount = BarCount + 1ENDIFC1= closeH1 = HighL1= Low//------------------------------------------timeframe(1 minute) //defaultONCE TradeON = 1IF IntraDayBarIndex = 0 THENTradeON = 1ENDIFTradeBar = BarCountIF Not OnMarket AND TradeBar <> TradeBar[1] THENTradeON = 1ENDIFif low[1]<L1 and close>L1 and not onMarket and tradeON thenbuy 1 contract at markettradeOn= 0endifif high>H1 thensell 1 contract at marketendif//----------------------------------------------------pointToReach=50*pointSizepointToKeep=20*pointSizeIf not onmarket thennewSL=0endifIf longonmarket thenIf newSL=0 and close-tradeprice[1]>pointToReach thennewSL=tradeprice(1)+pointToKeependifIf newSL>0 and close-newSL>pointToReach thennewSL = newSL+pointToKeependifendifIf shortonmarket thenIf newSl=0 and tradeprice(1)-close>pointToReach thennewSL = tradeprice(1)-pointToKeependifIf newSl>0 and newSL-close>pointToReach thennewSL = newSl-pointToKeependifendifif newSL>0 thensell at newSL STOPexitshort at newSL STOPendif//----------------------------------------------------set stop %loss 0.305/05/2021 at 9:49 AM #168807E’ errato, devi sostituire (nel secondo codice), le righe 7-11 con questa sola riga:
1BarCount = BarIndexho anche modificato il post originale.
Grazie per averlo segnalato 🙂
05/25/2021 at 10:20 AM #170326Ciao Roberto, puoi controllare perchè con il codice sotto riportato (snippetcode) il TS in allegato (semplficato) apre più operazioni al giorno (ne dovrebbe aprire una soltanto come il primo codice). Ho evidenziato le differenze dei due codici per agevolare il confronto. Grazie
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556// Primo codice (corretto)DEFPARAM CumulateOrders=FalseDEFPARAM Flatbefore=000000DEFPARAM Flatafter=220000//——————————————-timeframe(daily,updateOnClose)dayHigh = Dhigh(0)dayLow = Dlow(0)//——————————————–timeframe(1 hour)if low[1]<dayLow and close>dayLow and (barIndex-tradeIndex(1)>intradayBarIndex) thenbuy 1 contract at marketendifif high[1]>dayHigh and close<dayHigh and (barIndex-tradeIndex(1)>intradayBarIndex) thensellshort 1 contract at marketendif//——————————————————————————–set stop %loss 0.5set target %profit 1.5//————-————-————-————-————-————-// Secondo codice MTFDEFPARAM CumulateOrders=FalseDEFPARAM Flatbefore=000000DEFPARAM Flatafter=220000//——————————————-timeframe(daily,updateOnClose)BarCount = barIndexdayHigh = Dhigh(0)dayLow = Dlow(0)//——————————————–timeframe(1 hour)ONCE TradeON = 1IF IntraDayBarIndex = 0 THENTradeON = 1ENDIFTradeBar = BarCountIF Not OnMarket AND TradeBar <> TradeBar[1] THENTradeON = 1ENDIFif low[1]<dayLow and close>dayLow and tradeOn thenbuy 1 contract at marketendifif high[1]>dayHigh and close<dayHigh and tradeOn thensellshort 1 contract at marketendif//——————————————————————————–set stop %loss 0.5set target %profit 1.505/25/2021 at 11:51 AM #170355Lo scopo del mio codice è d’impedire che entri più volte nel TF inferiore, ma quando c’è un TF di default ancora più piccolo, tipo 5 minuti.
Così non fa assolutamente niente.
Per fare una sola operazione al giorno usa questo nel TF più piccolo:1OTD = (Barindex - TradeIndex(1) > IntradayBarIndex) // IntradayBarIndex < (Barindex - TradeIndex(1)) limits the (opening) trades till 1 per day (OTD One Trade per Day)e aggiungi OTD alle condizioni di entrata.
05/25/2021 at 12:08 PM #170360Il codice OTD è lo stesso utilizzato nel mio primo esempio sopra riportato e funzionante.
Volevo sostituirlo con lo snippetcode come prova. Mi “sembrava” che il codice riportato nello snippet serviva ad effettuare 1 operazione NON nel TF inferiore, ma in uno a scelta in cui si inseriva la prima parte del codice, corretta in: BarCount = BarIndex:
“should be added to only one TF, i.e. if you are using Daily+h4+h1+10-minute+default(1-second), then if you add that code on the 10-minute TF your next trade would not open till the next 10-minute bar.
If you add it, instead, to your 1-hour TF, only one trade per hour will be allowed, and so on…”
In sintesi, basta inserire: (barIndex–tradeIndex(1)>intradayBarIndex) nel TF in cui si vuole fare una sola operazione senza usare più lo snippet?
05/25/2021 at 12:24 PM #170364Un esempio per capire meglio:
lo snippet ha due parti da inserire ognuna in un TF differente:
A) BarCount = barIndex // che “dovrebbe” essere inserita nel TF dove si vuole fare una sola operazione
B) ONCE TradeON = 1 //che “dovrebbe” essere inserito nel TF più piccolo (default)
IF IntraDayBarIndex = 0 THENTradeON = 1ENDIFTradeBar = BarCountSupponiamo di avere 3 TF:1) timeframe (daily, updateOnClose)2) timeframe (1 hour)3) timeframe (5 minutes) – defaultPer effettuare fare una sola operazione ogni ora, mi “sembrava” che dovevo inserire la parte A in 2 e la parte B in 3.05/25/2021 at 1:41 PM #170373Esatto.
Solo che usi il TF daily, quindi più di una al giorno non può fartela.
Però devi azzerare TradeON quando entri a mercato, quindi dopo le linee 48 e 51 devi aggiungere:
1TradeON = 005/25/2021 at 2:33 PM #170384Perfetto, mi ero scordato nel secondo codice con MTF di azzerare i flag (ecco perchè era diverso = faceva più operazioni).
Ti chiedo due cose veloci, la prima è solo una conferma:
A) Se si utilizzano il TF daily ed un TF di default a 5 minuti, e scrivo:
timeframe (daily, updateOnClose)
dayHigh = Dhigh(0)
con dayHigh mi stò riferendo al massimo della candela daily di ieri, dato che la candela di oggi non è ancora terminata, mentre se scrivo:
timeframe (daily)
dayHigh = Dhigh(0)
con dayHigh mi stò riferendo al massimo della candela di oggi in corso, lo stesso giorno del TF a 5 minuti. Corretto? (se si, updateOnClose determina quindi anche il giorno di riferimento della candela daily)
B) Se volessi utilizzare la candela daily con updateOnClose per avere, ad esempio, il minimo della giornata di ieri per entrare, ma contemporaneamente mi servirebbe utilizzare il “divenire” della candela per uscire (quindi senza updateOnClose) c’è un modo migliore che utilizzare 2 TF: ad 1 ora con updateOnclose ed a 59 minuti senza?
Grazie
05/25/2021 at 2:48 PM #170385scusa, nel caso B mi riferisco sempre alla candela oraria con e senza updateOnClose:
B) Se volessi utilizzare la candela oraria con updateOnClose per avere, ad esempio, il minimo orario per entrare, ma contemporaneamente mi servirebbe utilizzare il “divenire” della candela oraria per uscire (quindi senza updateOnClose) c’è un modo migliore che utilizzare 2 TF: ad 1 ora con updateOnclose ed a 59 minuti senza?
05/25/2021 at 3:01 PM #170386Esatto.
Puoi utilizzare entrambi (sono due TF diversi, quindi non possono avere le variabili con lo stesso nome):
123456timeframe (daily, updateOnClose)..timeframe (daily, default) (DEFAULT non è obbligatorio, puoi ometterlo)..però sono considerati come un unico TF per i limiti di ProOrder (5 TF + quello di default sono il masimo utilizzabile), quindi è come se tu ne usassi solo due (Daily + default).
Con DAILY non c’è bisogno di usare DHIGH, DOPEN, ecc… basta HIGH, OPEN, ecc… in quanto so i valori giornalieri.
Semmai 1 minuto, 59 non è accettato perché 1 ora e Daily non sono multipli di 59.
-
AuthorPosts
Find exclusive trading pro-tools on