-
27-09-16, 18:33 #1
- Data Registrazione
- Aug 2009
- Messaggi
- 23
crossover macd a seguito di crossover incrocio medie mobili
Salve,
vorrei impostare uno script basato, ad esempio, sul primo incrocio al ribasso del macd sul signal, successivo all' incrocio, sempre al ribasso, di una media mobile su un'altra ma non riesco a collegare i due eventi, perchè l'algoritmo me li ricerca sempre sulla stessa barra, ma a me non interessa il fattore temporale, espresso in barre. Come posso fare?
Spero di essere riuscito a spiegarmi e, quanto alla risposta, credo sarà banale ma fin' ora nn sono riuscito a scriverlo.
Grazie
-
28-09-16, 11:35 #2
Ciao,
ti riferisci ad un Signal vero? In questo caso, a quanto ho capito, basta che utilizzi > o < invece di crossover. Quindi nel tuo caso potrebbe essere:
Buy Script:
INPUTS: @price(CLOSE), @longCycle(26), @shortCycle(13), @signalPeriods(9), @periods1(10), @periods2(12) @matype(SIMPLE) SET A = MACD(@longCycle, @shortCycle, @signalPeriods, @matype) SET B = MACDSignal(@longCycle, @shortCycle, @signalPeriods, @matype) SET C = MovingAverage(@price, @periods1, @matype) SET D = MovingAverage(@price, @periods2, @matype) A > B AND C > D
Sell Script:
SET A = MACD(@longCycle, @shortCycle, @signalPeriods, @matype) SET B = MACDSignal(@longCycle, @shortCycle, @signalPeriods, @matype) SET C = MovingAverage(@price, @periods1, @matype) SET D = MovingAverage(@price, @periods2, @matype) A < B AND C < D
Ciao Ciao
-
28-09-16, 18:50 #3
- Data Registrazione
- Aug 2009
- Messaggi
- 23
Ciao Andrea e grazie per la risposta,
Certo mi riferisco ad un signal, però io voglio entrare sul primo incrocio rialzista del MACD, che si verifica dopo un altro incrocio rialzista tra medie mobili, non voglio entrare ogniqualvolta il MACD è maggiore del signal, fermo restando l'altra condizione.
Non so se son riuscito a spiegarmi.
-
29-09-16, 00:38 #4
Salve,
Se non interpreto male la sua richiesta, dovrebbe usare un Buy Script così:
INPUTS: @price(CLOSE), @longCycle(26), @shortCycle(13), @signalPeriods(9), @periods1(10), @periods2(12) @matype(SIMPLE) SET A = MACD(@longCycle, @shortCycle, @signalPeriods, @matype) SET B = MACDSignal(@longCycle, @shortCycle, @signalPeriods, @matype) SET C = MovingAverage(@price, @periods1, @matype) SET D = MovingAverage(@price, @periods2, @matype) CROSSOVER(A, B) AND (C > D)
mentre per Sell Script:
SET A = MACD(@longCycle, @shortCycle, @signalPeriods, @matype) SET B = MACDSignal(@longCycle, @shortCycle, @signalPeriods, @matype) SET C = MovingAverage(@price, @periods1, @matype) SET D = MovingAverage(@price, @periods2, @matype) CROSSUNDER(A, B) AND (C < D)
In questo modo la condizione sul MACD è valida esclusivamente nella barra dove si verifica l'incrocio, mentre la condizione sulla media mobile rimane valida dalla barra di incrocio fino all'incrocio opposto successivo.
Max Francario
-
29-09-16, 18:14 #5
- Data Registrazione
- Jan 2010
- Messaggi
- 134
scusate l' interruzione, sto facendo un post di test. non potevo che farlo qui.
-
29-09-16, 19:12 #6
- Data Registrazione
- Aug 2009
- Messaggi
- 23
Ciao Max, e grazie per la risposta,
mi riservo di verificare ma nn credo che funzioni...perchè come lo hai scritto tu, lo script mi fa entrare ogni volta che c'è un incrocio rialzista del MACD, fermo restando l'altra condizione, ma io voglio entrare solo al primo incrocio del Macd successivo all'incrocio rialzista delle medie mobili.
-
30-09-16, 15:46 #7
Salve,
è un pò più complicato di quanto avevo inizialmente inteso. In ogni caso, bisogna sfruttare il fatto che le condizioni valutate come false hanno un valore numerico pari a 0, mentre se sono valutate vere hanno un valore numerico pari a 1.
Con questa premessa, gli script dovrebbero essere i seguenti:
Buy Script:
INPUTS: @price(CLOSE), @longCycle(26), @shortCycle(13), @signalPeriods(9), @periods1(10), @periods2(12) @matype(SIMPLE) SET A = MACD(@longCycle, @shortCycle, @signalPeriods, @matype) SET B = MACDSignal(@longCycle, @shortCycle, @signalPeriods, @matype) SET C = MovingAverage(@price, @periods1, @matype) SET D = MovingAverage(@price, @periods2, @matype) SET combinazione = CROSSOVER(A, B) AND (C > D) SET condSMA = CROSSOVER(C, D) SET periodo = LASTIF(condSMA) SET somma = SUM(combinazione, periodo) SET condizione = (somma = 1) combinazione AND condizione
Sell Script:
SET A = MACD(@longCycle, @shortCycle, @signalPeriods, @matype) SET B = MACDSignal(@longCycle, @shortCycle, @signalPeriods, @matype) SET C = MovingAverage(@price, @periods1, @matype) SET D = MovingAverage(@price, @periods2, @matype) SET combinazione = CROSSUNDER(A, B) AND (C < D) SET condSMA = CROSSUNDER(C, D) SET periodo = LASTIF(condSMA) SET somma = SUM(combinazione, periodo) SET condizione = (somma = 1) combinazione AND condizione
L'interpretazione della parte di codice relativa al calcolo delle condizioni è un pò complicata.
La variabile "combinazione" contiene la variabile che prima veniva usata come condizione di entrata, che genera più segnali a partire da un singolo incrocio delle medie.
In "condSMA" viene memorizzato il crossover delle medie, ottenendo quindi un vettore di valori 0 ed 1. In "periodo" calcoliamo da quanto tempo (barre) è avvenuto l'ultimo incrocio delle medie mobili.
La variabile "somma" viene calcolata come somma del numero di segnali presenti in "combinazione" a partire da "periodo" barre fà. In questo modo, nel primo segnale dopo l'incrocio delle medie, la variabile "somma" avrà il valore 1, mentre nel secondo segnale avrà il valore 2 e così via.
In "condizione" ci assicuriamo di utilizzare esclusivamente il primo segnale a partire dall'ultimo incrocio delle medie, e pertanto la condizione finale dello script è rappresentata da un AND tra "condizione" e "combinazione".
Max Francario
-
30-09-16, 19:36 #8
- Data Registrazione
- Aug 2009
- Messaggi
- 23