-
16-11-14, 18: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:
#Buy Script INPUTS: @periods(300) SET P= @periods WPR (P) > -35 AND REF (WPR (P), 1) <= - 35
#Sell Script SET P= @periods WPR (P) < -65 AND REF (WPR (P), 1) >= - 65
#Exit long Script SET P= @periods WPR (P) < -65 AND REF (WPR (P), 1) >= - 65
#Exit short Script SET P= @periods WPR (P) > -35 AND REF (WPR (P), 1) <= - 35
La regola che non riesco a codificare è:
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, 20: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 20:36
-
17-11-14, 01:24 #3
- Data Registrazione
- Dec 2012
- Messaggi
- 432
-
17-11-14, 01: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 02:35
....non si desidera ciò che è facile ottenere (Ovidio)....
-
17-11-14, 10:27 #5
- Data Registrazione
- Dec 2012
- Messaggi
- 432
-
17-11-14, 15:59 #6
- Data Registrazione
- Dec 2012
- Messaggi
- 432
-
18-11-14, 01: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, 16: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:
SET 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:
SET Position = ConditionBuy - ConditionSell SET LastPosition = CHANGEIF(Position <> 0, Position)
Infine la condizione per far partire il segnale Buy:
ConditionBuy AND REF(LastPosition, 1) <> 1
Quest'ultima condizione, nel Sell Script diventa:
ConditionSell AND REF(LastPosition, 1) <> -1
Le condizioni Exit Long ed Exit Short restano immutate.
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:
INPUTS: @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
Penso che così non avrai problemi.
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, 23:27 #9
- Data Registrazione
- Nov 2008
- Messaggi
- 99
-
19-11-14, 00: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:
INPUTS: @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
Sell script:
set 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
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.
ApoUltima modifica di Apocalips; 19-11-14 alle 00:19
....non si desidera ciò che è facile ottenere (Ovidio)....