-
28-11-13, 15:53 #1
- Data Registrazione
- Oct 2009
- Messaggi
- 566
problemi con l'unire due TS in uno solo
Pensando che questo post possa essere di aiuto non solo a me, vi espongo il seguente problema:
unire due o più TS in uno solo.
Il sistema che voglio fare, derivante dall'unione di 2 TS, ha i seguenti segnali:
quando
1) entrambi i due TS long: Long;
2) entrambi i due TS short: Short
3) un TS long e l’altro short; Stop Long o Stop Short (exit trade)
Il codice dei due sistemi è il seguente:
Premetto che:
MOlowmark, Mohighmark sono i margini superiore e inferiore per il Momentum Oscillator inverso
UOlowMark, UOhighMark sono i margini superiore e inferiore per l’Ultima Oscillator
(ho preso l’abitudine di inserire un paio di lettere davanti ai parametri da configurare di ogni indicatore per avere sempre presente a quale indicatore appartengono tali parametri).
codice Ultimate Oscillator
Buy script
INPUTS:@cycle1(7), @cycle2(6), @cycle3(10), @UOlowMark(45), @UOhighMark(65)
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3)
CROSSOVER(A, @UOlowMark)
Sell script
SET A = UltimateOscillator(@cycle1, @cycle2, @cycle3)
CROSSOVER(@UOhighMark, A)
codice Momentum Oscillator inverso (inverso perché il codice è speculare al Momentum Oscillator che c’è in BT: non è un’errore; sul TS che stò costruendo mi serve così).
Buy script
INPUTS:@price(CLOSE), @MOperiods(12), @MOlowMark(99.8), @MOhighMark(101)
SET A = MomentumOscillator(@price, @MOperiods)
CROSSOVER(@MOhighMark, A)
Sell script
SET A = MomentumOscillator(@price, @MOperiods)
CROSSOVER(A, @MOlowMark)
Unione dei due TS: Momentum Oscillator inverso + Ultimate Oscillator
Buy script
INPUTS:@price(CLOSE), @MOperiods(12), @MOlowMark(99.8), @MOhighMark(101), @cycle1(7), @cycle2(6), @cycle3(10), @UOlowMark(45), @UOhighMark(65)
SET A = MomentumOscillator(@price, @MOperiods)
SET B = UltimateOscillator(@cycle1, @cycle2, @cycle3)
CROSSOVER(A, @UOlowMark) AND CROSSOVER(@MOhighMark, B)
Sell script
SET A = MomentumOscillator(@price, @MOperiods)
SET B = UltimateOscillator(@cycle1, @cycle2, @cycle3)
CROSSOVER(A, @MOlowMark) AND CROSSOVER(@UOhighMark, B)
Exit Long Script
SET A = MomentumOscillator(@price, @MOperiods)
SET B = UltimateOscillator(@cycle1, @cycle2, @cycle3)
CROSSOVER(A, @MOlowMark) OR CROSSOVER(@UOhighMark, B)
Exit Short Script
SET A = MomentumOscillator(@price, @MOperiods)
SET B = UltimateOscillator(@cycle1, @cycle2, @cycle3)
CROSSOVER(A, @UOlowMark) OR CROSSOVER(@MOhighMark, B)
Tuttavia il risultato non da quanto voluto.
Per finire allego tre immagini; mentre le prime due, sono relative ai trade dei due TS effettuati su MSFT (Microsoft, ho preso un titolo a caso) con TF = 2h, a partire dal 25 ottobre h. 16:
- la prima figura riguarda il TS del Momentum Oscillator Inverso
- la seconda figura riguarda il TS dell'Ultimate Oscillator.
- la terza mostra il calcolo fatto a mano del risultato che dovrei ottenere unendo i due TS.
Non riesco proprio a capire dove sbaglio.Ultima modifica di TFiutoT384; 28-11-13 alle 15:55
-
28-11-13, 18:12 #2
Ciao,
il signal che hai costruito che unisce i 2 sistemi non ho capito se non genera alcun segnale oppure se li genera in maniera errata rispetto a quello che dovrebbe essere a rigor di logica.
ciao....non si desidera ciò che è facile ottenere (Ovidio)....
-
28-11-13, 19:18 #3
- Data Registrazione
- Oct 2009
- Messaggi
- 566
Ciao Apo e grazie per aver risposto.
Il signal a volte mi genera qualche segnale e altre volte no.
Altri signal, costruiti unendo 2 signal diversi mi hanno dato risultati diversi da quelli che poi ho ottenuto con calcoli fatti a mano. E non so perché.
"OR" nell'Exit long script o nell'exit short script lo uso per uscire dal trade quando uno dei due signal/TS si inverte e "AND" lo uso per far scattare il segnale quando entrambi i signal/TS si trovano nella stssa dirzione, cioè long o short. Non capisco perché non lavorino come sperato.
-
28-11-13, 22:53 #4
- 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
e sia la condizione di sell1CROSSOVER
(A,
@UOlowMark) AND CROSSOVER(@MOhighMark, B)
così come le hai scritte, si possono verificare solamente se entrambi i crossover si verificano sulla stessa identica barra!1CROSSOVER
(A,
@MOlowMark) AND CROSSOVER(@UOhighMark, B)
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 #5
- 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 #6
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
Potresti provare con qualcosa del genere:
Il vettore finale "Position" (sempre se non ho compreso male le tue intenzioni, si intende!1234567INPUTS
:
@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)
) 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 #7
Ultima modifica di Francario Massimiliano; 29-11-13 alle 10:25
-
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.
-
29-11-13, 10:35 #9
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
-
29-11-13, 17:58 #10
- 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