-
16-11-14, 17:00 #1
- Data Registrazione
- Dec 2012
- Messaggi
- 432
Come filtrare i segnali per ottenere l'alternanza di trade Buy-Sell
Avrei bisogno del vostro aiuto per risolvere un problema di programmazione e anche per avere una vostra opinione sui miei ragionamenti.
Ho un Signal basato su un indicatore (nel caso specifico si tratta del Williams %R, ma può valere per qualsiasi altro indicatore).
Funziona bene sui TF lunghi, come dimostrato da Tiziano recentemente.
In alcuni casi da buoni risultati anche su TF inferiori.
Poiché ho notato che su alcuni sottostanti e a certi TF, l'indicatore da un buon segnale di ingresso ma poi il trade chiude in perdita o si rimangia buona parte del gain (vedi immagini), volevo valutare la possibilità di adottare un take profit evitando però un rientro a mercato dello stesso segno.
Nell'immagine sotto un esempio in cui adottando una serie di Take Profit (anziché aspettare la chiusura del segnale), si migliora sensibilmente il gain finale.
Le regole che ho impostato sono le seguenti:
1234#Buy Script
INPUTS
:
@periods(300)
SET
P=
@periods
WPR
(P) > -
35
AND
REF
(
WPR
(P),
1
) <= -
35
123#Sell Script
SET
P=
@periods
WPR
(P) < -
65
AND
REF
(
WPR
(P),
1
) >= -
65
123#Exit long Script
SET
P=
@periods
WPR
(P) < -
65
AND
REF
(
WPR
(P),
1
) >= -
65
La regola che non riesco a codificare è:123#Exit short Script
SET
P=
@periods
WPR
(P) > -
35
AND
REF
(
WPR
(P),
1
) <= -
35
Al raggiungimento del TP, scartare gli altri segnali di ingresso dello stesso segno fino al raggiungimento del segnale di segno opposto.
In sostanza voglio avere alternanza trade Buy-Sell-Buy....
Aspetto fiducioso suggerimenti.
Grazie.
Alex
-
16-11-14, 19:25 #2
- Data Registrazione
- Feb 2012
- Località
- Pisa
- Messaggi
- 351
Ciao Alex,
in pratica è lo stesso problema di cui si era parlato qui:
http://www.playoptions.it/vbforum/sh...ng-o-exitShort
anzi è persino un po' più semplice perchè non hai bisogno di codificare nè l'ExitLong Script nè l'ExitShort Script.
Pertanto una soluzione tipo quella proposta al post #4 di quel Thread nel tuo caso dovrebbe esserti sufficiente, senza ExitLong Script ed ExitShort Script.Ultima modifica di Smash; 16-11-14 alle 19:36
-
17-11-14, 00:24 #3
- Data Registrazione
- Dec 2012
- Messaggi
- 432
-
17-11-14, 00:52 #4
Vai tranquillo che funziona, ecco il TS lavorare correttamente con lo script di Smash che risolve brillantemente il problema degli ingressi indesiderati tra un segnale e l'altro:
...e con il Bund a timeframe 1 minuto sembra andar molto bene :
lo script è semplice, basta sostiuire le condizioni buy e sell
ApoUltima modifica di Apocalips; 17-11-14 alle 01:35
....non si desidera ciò che è facile ottenere (Ovidio)....
-
17-11-14, 09:27 #5
- Data Registrazione
- Dec 2012
- Messaggi
- 432
-
17-11-14, 14:59 #6
- Data Registrazione
- Dec 2012
- Messaggi
- 432
-
18-11-14, 00:40 #7
- Data Registrazione
- Nov 2008
- Messaggi
- 99
Caro alex69
visto che da solo non ci sono riuscito, e quindi le mie capacità di programmazione sono oltremodo più modeste delle tue, mi potresti indicare in dettaglio come hai modificato lo script per risolvere il problema da te in origine evidenziato?
Grazie e cordiali saluti.
-
18-11-14, 15:25 #8
- Data Registrazione
- Dec 2012
- Messaggi
- 432
Ciao DICECC,
lo script di Smash serve a verificare che non si verifichi più di 1 trade dello stesso segno.
Intanto si impostano le 2 condizioni si Buy e di Sell:
12SET
ConditionBuy = (
WPR
(P) > -
35
AND
REF
(
WPR
(P),
1
) <= -
35
)
SET
ConditionSell = (
WPR
(P) < -
65
AND
REF
(
WPR
(P),
1
) >= -
65
)
Di seguito si impostano i parametri di verifica:
Infine la condizione per far partire il segnale Buy:12SET
Position = ConditionBuy - ConditionSell
SET
LastPosition = CHANGEIF(Position <>
0
, Position)
Quest'ultima condizione, nel Sell Script diventa:1ConditionBuy
AND
REF
(LastPosition,
1
) <>
1
Le condizioni Exit Long ed Exit Short restano immutate.1ConditionSell
AND
REF
(LastPosition,
1
) <> -
1
Ci devi inoltre aggiungere il set per il take profit.
Da solo non ci sarei mai arrivato, ma rileggendo i vari passaggi con l'aiuto contestuale, si riesce a capire la logica che sta dietro.
Ecco il risultato finale del Buy Script:
Penso che così non avrai problemi.1234567891011INPUTS
:
@periods(300), @takeprofit(100)
SET
TAKE_PROFIT
=
@takeprofit
SET
P=
@periods
#Criteri alternanza Buy-Sell
SET
ConditionBuy = (
WPR
(P) > -
35
AND
REF
(
WPR
(P),
1
) <= -
35
)
SET
ConditionSell = (
WPR
(P) < -
65
AND
REF
(
WPR
(P),
1
) >= -
65
)
SET
Position = ConditionBuy - ConditionSell
SET
LastPosition = CHANGEIF(Position <>
0
, Position)
ConditionBuy
AND
REF
(LastPosition,
1
) <>
1
Se ho scritto qualche inesattezza Smash o Apo penso che me lo segnaleranno.
Magari si potrebbero condividere i risultati più interessanti dei backtest che faremo in futuro.
Saluti.
Alex
-
18-11-14, 22:27 #9
- Data Registrazione
- Nov 2008
- Messaggi
- 99
-
18-11-14, 23:08 #10
Nessuna inesattezza Alex, il tuo script funziona correttamente.
Io lo renderei ancora piu snello con l'utilizzo della funzione crossover creata apposta per semplificare le cose e per scrivere meno a parità di risultato, quindi:
buy script:
Sell script:12345678910111213INPUTS
:
@periods(300), @lowMark(-35), @highMark(-65), @TakeProfit (100)
set
take_profit
=
@TakeProfit
set
A =
WilliamsPctR
(
@periods)
set
ConditionBuy =
CROSSOVER
(A,
@lowMark)
set
ConditionSell =
CROSSOVER
(
@highMark, A)
set
Position = ConditionBuy - ConditionSell
set
LastPosition = CHANGEIF(Position <>
0
, Position)
ConditionBuy
AND
REF
(LastPosition,
1
) <>
1
Colgo l'occasione per ringraziare il buon Smash che riesce sempre a trasformare un' idea di trading in un codice EasySscript elegante, funzionante e perfettamente rispondente alle nostre aspettative. grazie.123456789set
A =
WilliamsPctR
(
@periods)
set
ConditionBuy =
CROSSOVER
(A,
@lowMark)
set
ConditionSell =
CROSSOVER
(
@highMark, A)
set
Position = ConditionBuy - ConditionSell
set
LastPosition = CHANGEIF(Position <>
0
, Position)
ConditionSell
AND
REF
(LastPosition,
1
) <> -
1
ApoUltima modifica di Apocalips; 18-11-14 alle 23:19
....non si desidera ciò che è facile ottenere (Ovidio)....