Aiuto creazione strategia acquisto fine mese
Forums › ProRealTime forum Italiano › Supporto ProOrder › Aiuto creazione strategia acquisto fine mese
- This topic has 11 replies, 2 voices, and was last updated 5 years ago by robertogozzi.
-
-
05/15/2019 at 10:07 AM #98539
Volevo testare una strategia molto semplice:
- Acquisto a N giorni da fine mese.
- Chiusura a fine mese.
Chiedo se qualcuno può aiutarmi. Grazie
Stefano
05/15/2019 at 10:20 AM #98541Occorre calcolare quanti giorni ha un mese e confrontarlo con il giorno corrente, se è <= N (che stabilirai tu) apri un trade.
Devi stabilire se per giorni del mese intendi i giorni di calendario o quelli di trading. Ad esempio, se vuoi entrare a mercato 10 giorni prima della fine di maggio, vuoi entrare il 21 (31 – 10) oppure il 17 (31 – 10 giorni lavorativi)?
05/15/2019 at 10:58 AM #9854305/15/2019 at 3:04 PM #98559Non sono riuscito a trovare il codice per determinare la differenza.
Qual’e il codice per dire a 10 giorni lavorativi dal fine mese?
05/15/2019 at 3:17 PM #98560Non c’è, devi calcolarli te.
Quando sei ad inizio mese (month<>month[1]) devi:
- calcolare di quanti giorni è il mese (tenendo conto dei possibili anni bisestili)
- fare un ciclo FOR…NEXT da 1 a fine mese e sommare i giorni che hanno OpenDayOfWeek >= 1 e <= 5 (tra lunedì e venerdì)
a questo punto hai il totale di dei giorni lavorativi, ogni giorno di trading decrementi il conteggio e quando arrivi al numero che vuoi, ad esempio 10, entri a mercato. Per verificare se sei in un giorno diverso, sul giornaliero non è un problema perché quando la strategia viene eseguita è trascorso un altro giorno, mentre sui time frame intraday lo determini quando IntraDayBarIndex = 0, questo è un indice delle barre intraday trascorse (BarIndex è il totale delle barre dal momento del lancio della strategia).
Non sarà mai preciso perché non puoi calcolare le giornate festive, magari all’estero, o i giorni di chiusura della borsa, ecc… però è il massimo che puoi ottenere!
05/15/2019 at 3:23 PM #9856105/15/2019 at 4:34 PM #98567Ho provato con il seguente codice
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596defparam cumulateorders = falsei = 0FOR i = 1 to 31 dogglav = summation[31](OpenDayOfWeeK >= 1 and OpenDayOfWeeK <=5)NextggEntrata = gglav - 10if month = 1 and day = ggEntrata thenbuy 1 shares at marketendifif month = 2 thensell 1 shares at marketendifif month = 3 and day = ggEntrata thenbuy 1 shares at marketendifif month = 4 thensell 1 shares at marketendifif month = 5 and day = ggEntrata thenbuy 1 shares at marketendifif month = 6 thensell 1 shares at marketendifif month = 7 and day = ggEntrata thenbuy 1 shares at marketendifif month = 8 thensell 1 shares at marketendifif month = 9 and day = ggEntrata thenbuy 1 shares at marketendifif month = 10 thensell 1 shares at marketendifif month = 11 and day = ggEntrata thenbuy 1 shares at marketendifif month = 12 thensell 1 shares at marketendif//Mesi con 30 ggi = 0FOR i = 1 to 30 dogglav30 = summation[30](OpenDayOfWeeK >= 1 and OpenDayOfWeeK <=5)NextggEntrata30 = gglav30 - 10if month = 4 and day = ggEntrata30 thenbuy 1 shares at marketendifif month = 5 thensell 1 shares at marketendifif month = 6 and day = ggEntrata30 thenbuy 1 shares at marketendifif month = 7 thensell 1 shares at marketendifif month = 8 and day = ggEntrata30 thenbuy 1 shares at marketendifif month = 9 thensell 1 shares at marketendifif month = 10 and day = ggEntrata30 thenbuy 1 shares at marketendifif month = 11 thensell 1 shares at marketendifPer i mesi di gennaio e marzo funziona.
A giugno, agosto e ottobre entra a mercato ed esce il giono dopo.
In tutti gli altri mesi non indicati non genera nessuna operazione.
05/16/2019 at 11:12 AM #98601Non è proprio così, in particolare le righe 3-6, che calcolano sempre i 31 giorni precedenti, ripetendolo ad ogni barra.
Ecco il codice, l’ho provato sul DAX, sia 4 ore che 1 ora e Giornaliero (va solo LONG, tu metterai le tue condizioni per entrare in una direzione o nell’altra):
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152GiornoAcquisto = 10 //acquista quando mancano "n" giorniMese = MonthAnno = YearIF Mese <> Mese[1] THEN //il calcolo si fa solo al cambio del meseIF OnMarket THENSELL AT MARKET //sempre al cambio del mese chiudere le posizioni aperte,...EXITSHORT AT MARKET //... LONG o SHORT che sianoENDIFGiorni = 31 //numero di giorni del mese (per la maggior parte ne hanno 31)IF Mese = 4 OR Mese = 6 OR Mese = 9 OR Mese = 11 THENGiorni = 30 //in altri ne hanno 30ELSIF Mese = 2 THENGiorni = 28 //a Febbraio, solitamente, 28 tranne quando è bisestileIF Anno MOD 4 = 0 THENIF Anno MOD 100 = 0 THENIF Anno MOD 400 = 0 THENGiorni = 29ENDIFELSEGiorni = 29ENDIFENDIFENDIF// da qui inizia il calcolo dei giorni di tradingNumeroGiorni = 0Oggi = OpenDayOfWeekFOR i = 1 TO GiorniIF Oggi >= 1 AND Oggi <= 5 THENNumeroGiorni = NumeroGiorni + 1ENDIFOggi = Oggi + 1IF Oggi > 7 THENOggi = 1ENDIFNEXT// fine del calcolo dei giorni, NUMEROGIORNI contiene i giorni lavorativiENDIFIF Day <> Day[1] THENIF (OpenDayOfWeek >= 1 AND OpenDayOfWeek <= 5) THEN //al cambio di giorno,...NumeroGiorni = NumeroGiorni - 1 //...se feriale, decrementa il contatoreIF NumeroGiorni < GiornoAcquisto AND Not OnMarket THENBUY 1 CONTRACT AT MARKET //Acquista quando mancano i giorni desideratiSET STOP pLOSS 20SET TARGET pPROFIT 50ENDIFENDIFENDIF//graph Mese//graph Anno//graph Giorni//graph NumeroGiorni//graph OggiLe ultime 5 righe possono servirti, togliendo i commenti all’inizio della riga, per osservare i valori di quelle variabili candela per candela nell’apposita finestra delle variabili che ProBacktest apre. Quando eseguirai la strategia con ProOrder vanno rimessi i commenti (oppure le togli).
05/16/2019 at 11:18 AM #98602C’è una precisazione da fare per la riga 32, ProOrder (per le strategie) considera la DOMENICA come valore 7, mentre ProBuilder (per gli indicatori) la considera come valore 0.
E’ stata fatta osservare questa discrepanza a PRT e, credo, prima o poi la risolverà. Se non la risolverà tutto rimarrà com’è adesso, se unificherà i due valori a 0 occorrerà cambiare la strategia, se li unificherà a 7 (ma è improbabile, direi, perché contraria al software di quasi tutto il mondo!) occorrerà cambiare gli indicatori (per chi che li ha fatti basandosi sul giorno della settimana).
05/16/2019 at 12:15 PM #98607Un grande ringraziamento, da solo non sarei mai riuscito.
Stefano
1 user thanked author for this post.
05/28/2019 at 10:36 AM #99577Volevo chiedere un’altra cosa.
Utilizzando la chiusura del mese precedente che hai fatto in (https://www.prorealcode.com/topic/dati-candela-mese-precedente/) ho fatto una modifica alla strategia.
Ho inserito la condizione: close[1] < ChiusuraP nella riga di acquisto.
La strategia prevede l’acquisto a “n” giorni dal fine mese.
Se la condizione close[1] < ChiusuraP si verifica ad un numero di giorni diverso da quello indicato come “n” viene aperta l’operazione al giorno diverso da “n”.-Esempio:
n=10 // acquisto a 10 giorni da fine mese
la condizione (close[1] < ChiusuraP) si verifica a 5 giorni da fine mese. Viene aperta l’operazione a 5 giorni da fine mese: cose che non vorrei.
L’acquisto nel caso di n=10 deve essere fatto solo a 10 giorni da fine mese altrimenti si passa al mese successivo. Si può fare?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879IF BarIndex = 0 THEN//Minimo = low//Massimo = high//Apertura = openChiusura = close//MinimoP = low//MassimoP = high//AperturaP = openChiusuraP = closeENDIFIF OpenMonth <> OpenMonth[1] THEN//MinimoP = Minimo//MassimoP = Massimo//AperturaP = AperturaChiusuraP = Chiusura//Apertura = open//Chiusura = close//Minimo = low//Massimo = highELSE//Minimo = min(Minimo,low)//Massimo = max(Massimo,high)Chiusura = closeENDIFGiornoAcquisto = 10 //acquista quando mancano "n" giorniMese = MonthAnno = YearIF Mese <> Mese[1] THEN //il calcolo si fa solo al cambio del meseIF OnMarket THENSELL AT MARKET //sempre al cambio del mese chiudere le posizioni aperte,...EXITSHORT AT MARKET //... LONG o SHORT che sianoENDIFGiorni = 31 //numero di giorni del mese (per la maggior parte ne hanno 31)IF Mese = 4 OR Mese = 6 OR Mese = 9 OR Mese = 11 THENGiorni = 30 //in altri ne hanno 30ELSIF Mese = 2 THENGiorni = 28 //a Febbraio, solitamente, 28 tranne quando è bisestileIF Anno MOD 4 = 0 THENIF Anno MOD 100 = 0 THENIF Anno MOD 400 = 0 THENGiorni = 29ENDIFELSEGiorni = 29ENDIFENDIFENDIF// da qui inizia il calcolo dei giorni di tradingNumeroGiorni = 0Oggi = OpenDayOfWeekFOR i = 1 TO GiorniIF Oggi >= 1 AND Oggi <= 5 THENNumeroGiorni = NumeroGiorni + 1ENDIFOggi = Oggi + 1IF Oggi > 7 THENOggi = 1ENDIFNEXT// fine del calcolo dei giorni, NUMEROGIORNI contiene i giorni lavorativiENDIFIF Day <> Day[1] THENIF (OpenDayOfWeek >= 1 AND OpenDayOfWeek <= 5) THEN //al cambio di giorno,...NumeroGiorni = NumeroGiorni - 1 //...se feriale, decrementa il contatoreIF NumeroGiorni < GiornoAcquisto AND Not OnMarket and close[1]< chiusurap THENBUY 1 CONTRACT AT MARKET //Acquista quando mancano i giorni desideratiSET STOP pLOSS 2000SET TARGET pPROFIT 5000ENDIFENDIFENDIF//graph Mese//graph Anno//graph Giorni//graph NumeroGiorni//graph Oggigraphonprice chiusuraP05/28/2019 at 10:53 AM #99581Modificando la riga 66 così ti entra solo a 10 giorni dal fine mese (non 9 o 7, ecc…), però solo se close[1]< chiusurap:
1IF NumeroGiorni = GiornoAcquisto AND Not OnMarket and close[1]< chiusurap THENSe, invece vuoi che entri in qualunque momento purché close[1]< chiusurap, oppure a 10 giorni da fine mese:
1IF ((close[1]< chiusurap) OR (NumeroGiorni = GiornoAcquisto)) AND Not OnMarket THEN -
AuthorPosts
Find exclusive trading pro-tools on