Discussione: problemi con l'unire due TS in uno solo
Visualizzazione Ibrida
-
28-11-13, 22:53 #1
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
Ciao,
non so se interpreto male, ma forse il problema sta nel fatto che sia la condizione di buy
CROSSOVER(A, @UOlowMark) AND CROSSOVER(@MOhighMark, B)
e sia la condizione di sell
CROSSOVER(A, @MOlowMark) AND CROSSOVER(@UOhighMark, B)
così come le hai scritte, si possono verificare solamente se entrambi i crossover si verificano sulla stessa identica barra!
Mentre per le condizioni di uscita, per le quali hai usato OR, basta che una sola delle 2 si sia verificata.
Quindi, se non ho frainteso, è sbagliato usare la funzione CROSSOVER !Ultima modifica di Smash; 28-11-13 alle 22:59
-
29-11-13, 00:42 #2
- Data Registrazione
- Oct 2009
- Messaggi
- 566
Ciao. Grazie per la risposta. Pensando a quanto hai scritto, hai ragione sul fatto che "così come le hai scritte, si possono verificare solamente se entrambi i crossover si verificano sulla stessa identica barra!" .
Tuttavia la funzione CROSSOVER serve.
Infatti il buy avviene quando:
1) il Momentum Oscillator (MO) ha incrociato al ribasso il suo margine superiore (MOhighMark) e
2) l'Ultimate Oscillator (UO) ha incrociato al rialzo il suo limite inferiore (UOlowMark).
Questo può avvenire
a) sia contemporaneamente con 1) e 2) nello stesso momento
b) sia separatamente ovvero prima avviene la fase 1) e poi avviene la fase 2) o viceversa in modo che si arrivi ad un momento in cui si avverano contemporaneamente 1) e 2).
Per il buy script quindi si deve mettere a punto ancora il punto b), mentre il punto a) è realizzato con CROSSOVER(A, @UOlowMark) AND CROSSOVER(@MOhighMark, B)
Il sell avviene quando:
1) il Momentum Oscillator (MO) ha incrociato al rialzo il suo margine inferiore (MOlowMark) e
2) l'Ultimate Oscillator (UO) ha incrociato al ribasso il suo limite superiore (UOhighMark).
Questo può avvenire
a) sia contemporaneamente con 1) e 2) nello stesso momento
b) sia separatamente ovvero prima avviene la fase 1) e poi avviene la fase 2) o viceversa in modo che si arrivi ad un momento in cui si avverano contemporaneamente 1) e 2).
Per il sell script quindi si deve mettere a punto ancora il punto b), mentre il punto a) è realizzato con CROSSOVER(A, @MOlowMark) AND CROSSOVER(@UOhighMark, B).
Per cui ora manca lo script per la fase a) del sell script e del buy script. Ma come fa il signal a capire che, ad esempio, l'UO Ultimate Oscillator (UO) si trova sotto il suo limite superiore (UOhighMark) perchè qualche barra prima l'ha incrociato al ribasso oppure perché ha incrociato al rialzo il suo limite inferiore (UOLowMark) in modo da distinguere tra un UO che indica long e un UO che indica short?
Chiedo aiuto anche allo staff di playoptions dato che questo dilemma prima o poi si presenterà anche ad altri utentiUltima modifica di TFiutoT384; 29-11-13 alle 00:44
-
29-11-13, 09:33 #3
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
Potresti provare con qualcosa del genere:
INPUTS:@cycle1(7), @cycle2(6), @cycle3(10), @UOlowMark(45), @UOhighMark(65) SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3) SET SignalLong = CROSSOVER(A, @UOlowMark) SET SignalShort = CROSSOVER(@UOhighMark, A) SET Signal = SignalLong - SignalShort SET Position = CHANGEIF (Signal <> 0, Signal)
Il vettore finale "Position" (sempre se non ho compreso male le tue intenzioni, si intende! ) dovrebbe valere sempre +1 quando il sistema indica Long e sempre -1 quando il sistema indica Short. Quindi lo potresti utilizzare per le condizioni di Buy Script e Sell Script.
Poi potresti fare lo stesso ragionamento anche con l'altro sistema del Momentum Oscillator, e combinare le condizioni risultanti.Ultima modifica di Smash; 29-11-13 alle 10:33
-
29-11-13, 10:11 #4
Ultima modifica di Francario Massimiliano; 29-11-13 alle 10:25
-
29-11-13, 10:35 #5
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
-
29-11-13, 17:58 #6
- Data Registrazione
- Oct 2009
- Messaggi
- 566
Basandomi sul listato "approvato" ho provato a costruire due script, signal 1 e signal 2, ma, pur dando risultati diversi, sono ancora diversi dal risultato che vorrei ottenere. Il non essere un programmatore comporta inevitabilmente degli errori.
Dove stà il mio errore?
SIGNAL 1
BUY SCRIPT
INPUTS:@price(CLOSE), @MOperiods(12), @MOlowMark(99.8), @MOhighMark(101), @cycle1(7), @cycle2(6), @cycle3(10), @UOlowMark(45), @UOhighMark(65)
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3)
SET B = MomentumOscillator(@price, @MOperiods)
SET SignalLongA = CROSSOVER(A, @UOlowMark)
SET SignalShortA = CROSSOVER(@UOhighMark, A)
SET SignalA = SignalLongA - SignalShortA
SET PositionA = CHANGEIF (SignalA <> 0, SignalA)
SET SignalLongB = CROSSOVER(@MOhighMark, B)
SET SignalShortB = CROSSOVER(B, @MOlowMark)
SET SignalB = SignalLongB - SignalShortB
SET PositionB = CHANGEIF (SignalB <> 0, SignalB)
SignalA > 0 AND SignalB >0
SELL SCRIPT
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3)
SET B = MomentumOscillator(@price, @MOperiods)
SET SignalLongA = CROSSOVER(A, @UOlowMark)
SET SignalShortA = CROSSOVER(@UOhighMark, A)
SET SignalA = SignalLongA - SignalShortA
SET PositionA = CHANGEIF (SignalA <> 0, SignalA)
SET SignalLongB = CROSSOVER(@MOhighMark, B)
SET SignalShortB = CROSSOVER(B, @MOlowMark)
SET SignalB = SignalLongB - SignalShortB
SET PositionB = CHANGEIF (SignalB <> 0, SignalB)
SignalA < 0 AND SignalB <0
EXIT LONG SCRIPT
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3)
SET B = MomentumOscillator(@price, @MOperiods)
CROSSOVER(B, @MOlowMark) OR CROSSOVER(@UOhighMark, A)
EXIT SHORT SCRIPT
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3)
SET B = MomentumOscillator(@price, @MOperiods)
CROSSOVER(B, @UOlowMark) OR CROSSOVER(@MOhighMark, A)
SIGNAL 2
BUY SCRIPT
INPUTS:@price(CLOSE), @MOperiods(12), @MOlowMark(99.8), @MOhighMark(101), @cycle1(7), @cycle2(6), @cycle3(10), @UOlowMark(45), @UOhighMark(65)
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3)
SET B = MomentumOscillator(@price, @MOperiods)
SET SignalLongA = CROSSOVER(A, @UOlowMark)
SET SignalShortA = CROSSOVER(@UOhighMark, A)
SET SignalA = SignalLongA - SignalShortA
SET PositionA = CHANGEIF (SignalA <> 0, SignalA)
SET SignalLongB = CROSSOVER(@MOhighMark, B)
SET SignalShortB = CROSSOVER(B, @MOlowMark)
SET SignalB = SignalLongB - SignalShortB
SET PositionB = CHANGEIF (SignalB <> 0, SignalB)
PositionA > 0 AND PositionB >0
SELL SCRIPT
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3)
SET B = MomentumOscillator(@price, @MOperiods)
SET SignalLongA = CROSSOVER(A, @UOlowMark)
SET SignalShortA = CROSSOVER(@UOhighMark, A)
SET SignalA = SignalLongA - SignalShortA
SET PositionA = CHANGEIF (SignalA <> 0, SignalA)
SET SignalLongB = CROSSOVER(@MOhighMark, B)
SET SignalShortB = CROSSOVER(B, @MOlowMark)
SET SignalB = SignalLongB - SignalShortB
SET PositionB = CHANGEIF (SignalB <> 0, SignalB)
PositionA < 0 AND PositionB <0
EXIT LONG SCRIPT
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3)
SET B = MomentumOscillator(@price, @MOperiods)
CROSSOVER(B, @MOlowMark) OR CROSSOVER(@UOhighMark, A)
EXIT SHORT SCRIPT
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3)
SET B = MomentumOscillator(@price, @MOperiods)
CROSSOVER(B, @UOlowMark) OR CROSSOVER(@MOhighMark, A)Ultima modifica di TFiutoT384; 29-11-13 alle 18:56
-
29-11-13, 22:45 #7
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
Ciao,
il primo è sicuramente sbagliato;
Il secondo invece è corretto, ma c'è soltanto un errore nell'EXIT SHORT SCRIPT dove gli argomenti dei 2 CROSSOVER mi sembrano invertiti.
EXIT SHORT SCRIPT:
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3) SET B = MomentumOscillator(@price, @MOperiods) CROSSOVER(@MOhighMark, B) OR CROSSOVER(A, @UOlowMark)
Ultima modifica di Smash; 30-11-13 alle 11:43
-
29-11-13, 10:12 #8
- Data Registrazione
- Oct 2009
- Messaggi
- 566
Grazie per la tua risposta. La posso testare solo oggi pomeriggio perché ora non sono davanti al PC dove gira BT.
Nel frattempo, visto che ci ho lavorato, voglio postare un'immagine che riassume il problema. Così se la tua soluzione è corretta, vedendo un'immagine del quesito, altri possono usufruirne.