Discussione: Funzione Pyramiding!?!?
-
27-09-14, 17:01 #1
- Data Registrazione
- Dec 2009
- Messaggi
- 813
Funzione Pyramiding!?!?
Ciao ragazzi, sto provando a lavorare con gli ordini piramidali però vorrei che le posizioni successive entrassero solo quando determinate condizioni vengono soddisfatte! Ho utilizzato le funzioni DrawDown() - OpenPosition() - LastEntry e CurrentContract ma non sortiscono l'effetto desiderato....suggerimenti??? Vi posto lo script
INPUTS: @price(CLOSE), @periods(250) SET Zs = ZScore(CLOSE, @periods) # Primo Buy SET CrossUP1 = CROSSOVER(Zs,-2) SET ContCrossUP1 = LASTIF(CrossUP1) SET BUY1 = ContCrossUP1 = 1 # Secondo Buy SET CrossUP2 = CROSSOVER(Zs,-3) SET ContCrossUP2 = LASTIF(CrossUP2) SET BUY2 = ContCrossUP2 = 1 BUY1 OR BUY2
Come potete vedere dallo screen vorrei entrare in martingala solo se Z-Score crossa dal basso verso l'alto soglia -3 e rimane in posizione per almeno una barra (ContCrossUP2)
Ultima modifica di CIVT; 27-09-14 alle 17:06
-
27-09-14, 17:55 #2
- Data Registrazione
- Jan 2008
- Messaggi
- 1,004
-
27-09-14, 19:56 #3
- Data Registrazione
- Dec 2009
- Messaggi
- 813
Ultima modifica di CIVT; 27-09-14 alle 22:26
-
27-09-14, 23:57 #4
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
-
28-09-14, 01:13 #5
- Data Registrazione
- Dec 2009
- Messaggi
- 813
Ciao Marco! Quella è una indicazione che ho aggiunto per evidenziare quali ingressi potevo scartare verificando la preesistenza di un contratto già posizionato sulla soglia Z-Score -2
Per chiarire meglio il discorso ti posto l'esempio SELL che a quanto pare funziona meglio....
Qui vengono effettuati tre SELL consecutivi rispettivamente con Z-Score 2.1395 il primo 1.9066 il secondo e 1.4976 il terzo....
Potrei evitare di piramidare il secondo ed il terzo SELL aggiungendo un filtro sulle soglie dello Z-score tipo
SELL1 AND ZScore(CLOSE, @periods) > 2 OR SELL2
Vedi screen
Il problema però rimane perchè A) lo script BUY non riconosce la soglia >-2 e B) funziona solo con Z-Score decrescente difatti superata la soglia 2 si riattiva il primo SELL e sono punto a capo....Ultima modifica di CIVT; 28-09-14 alle 09:55
-
28-09-14, 10:48 #6
Salve,
Se la parte Entry Short funziona correttamente, allora significa che per la parte Entry Long ci sono soltato segni o operatori invertiti. Ad esempio, se nello Short si usa soglia > 2, significa che nel Long bisognerà usare soglia < -2, perchè il segno dello Z-Score è negativo.
Comunque, per limitare gli ingressi, si può usare la funzione CurrentContracts(), ad esempio in questo modo:
BUY1 = <Condizione per la prima entrata long> BUY2 = <Condizione per le successive entrate long> (CurrentContracts() <= 0 AND BUY1) OR (CurrentContract() > 0 AND BUY2) .... SELL1 = <Condizione per la prima entrata short> SELL2 = <Condizione per le successive entrate short> (CurrentContracts() >= 0 AND SELL1) OR (CurrentContract() < 0 AND SELL2)
Un suggerimento che posso dare è quello di utilizzare le parentesi per raggruppare le condizioni in AND ed OR, che altrimenti vengono valutate in sequenza così come si trovano nello script.
Max Francario
-
29-09-14, 10:38 #7
- Data Registrazione
- Dec 2009
- Messaggi
- 813
Grande MAX IL RISOLUTORE!!! Hai risolto brillantemente il problema e lo hai fatto pure scrivendo di domenica!!! E pensare che avevo anche provato questa stringa con il CurrentContract ma senza l'utilizzo delle parentesi ovviamente la funzione non lavorava correttamente!
Ecco lo screen con le giuste entrate
-
30-09-14, 19:51 #8
- Data Registrazione
- Dec 2009
- Messaggi
- 813
Problema ottimizzazione variabili esterne
Ciao Max, approfitto della tua disponibilità e pazienza x chiederti se ed eventualmente come migliorare la velocità delle ottimizzazioni perchè impiega tantissimo tempo per portare a termine anche le piu' semplici, in questo screen per sole 25 ottimizzazioni ho atteso quasi 10 minuti....!!!
Questo è il codice che stò utilizzando, forse ho creato qualche loop o cose strane?
BUY SCRIPT
INPUTS: @price(CLOSE), @periods(250), @IDA(2), @IDB(1), @ZsLow(2), @ZsHigh(3) SET ZsTotal = ZScore(GetGlobalVar(@IDA) - GetGlobalVar(@IDB), @periods) # Primo Buy SET CrossUP1 = CROSSOVER(ZsTotal,-@ZsLow) SET ContCrossUP1 = LASTIF(CrossUP1) SET BUY1 = ContCrossUP1 = 1 # Secondo Buy SET CrossUP2 = CROSSOVER(ZsTotal,-@ZsHigh) SET ContCrossUP2 = LASTIF(CrossUP2) SET BUY2 = ContCrossUP2 = 1 (CurrentContracts() <= 0 AND BUY1) OR (CurrentContracts() > 0 AND BUY2)
EXIT BUY
SET ZsTotal = ZScore(GetGlobalVar(@IDA) - GetGlobalVar(@IDB), @periods) ZsTotal > 0
Idem x sell
-
01-10-14, 12:56 #9
Salve,
l'ottimizzazione impiega molto tempo perchè nello script sono presenti funzioni di stato della strategia, in questo caso CurrentContracts().
Quando sono presenti queste funzioni, il backtest viene eseguito barra per barra al posto che in un unico passaggio, in pratica lo script al posto di lavorare in modo vettoriale lavora in modo ibrido vettoriale/sequenziale.
Ad esempio, se il grafico storico ha 1500 barre, fare 35 ottimizzazioni equivale ad eseguire lo script 1500 * 35 = 52500 volte.
Se lo scopo dell'ottimizzazione è quello di individuare i migliori livelli possibili di Z-Score, nell'OverSpread sono già presenti i valori ottimali.
Max FrancarioUltima modifica di Francario Massimiliano; 01-10-14 alle 13:28
-
01-10-14, 19:43 #10
- Data Registrazione
- Dec 2009
- Messaggi
- 813
Grazie per la conferma, ho verificato ed effettivamente senza currentcontract torna la ferrari di prima a questo punto ottimizzerò solo il primo ingresso che è anche il piu' importante! Purtroppo non posso utilizzare i valori ottimizzati dall'overspread perchè sui grafici non riesco ancora a calcolare precisamente lo Z-Score totale...