-
02-02-15, 13:01 #1
Inibire un TS a un nuovo ingresso sulla stessa barra in cui è uscito in trailing
Ciao MAX,
Ho un TS intraday che lavora thick by tick con trailing stop.
Vorrei fare in modo che quando scatta il trailing stop, il TS non mi rientri sulla stessa barra in cui è uscito
Come potrei impostare lo script supponendo che A sia la mia condizione di ingresso ?
grazie
ApoUltima modifica di Apocalips; 02-02-15 alle 13:15
....non si desidera ciò che è facile ottenere (Ovidio)....
-
06-02-15, 12:25 #2
Salve,
a partire dalla prossima release saranno disponibili 2 ulteriori funzioni in EasyScript per facilitare la scrittura di queste condizioni.
Le nuove funzioni saranno:
BarsSinceEntry()
BarsSinceExit()
Queste due funzioni restituiranno, rispettivamente, il numero di barre trascorse dall'ultimo segnale di entrata (segnale Buy o segnale Sell) ed il numero di barre trascorse dall'ultimo segnale di uscita (segnale Exit Long, Exit Short, Stop Loss, Take Profit, o Trailing Stop).
Max Francario
-
06-02-15, 15:02 #3
-
23-05-15, 18:15 #4
- Data Registrazione
- Apr 2014
- Messaggi
- 319
il mistero di BarSinceExit()
Ciao Max,
sto cercando di inserire la seguente condizione:
LASTIF(condizione)<barsSinceExit() al fine di evitare di rientrare sulla stessa condizione da cui sono appena uscito
ma apparentemente:
1. la funzione barssinceexit() non sembra sortire effetti;
2. il debug che normalmente funziona perfettamente, "scrive" solo un valore alla volta dell'argomento di PRINT e non la storia giorno per giorno. Se tolgo la funzione barssinceexit tutto ritorna a funzionare perfettamente.
Ti viene in mente qualcosa a parte mandarmi a quel paese?
grazie e ciao"la libertà è il tempo della vita che se ne va e che spendiamo nelle cose che ci motivano”. Pepe
-
25-05-15, 10:53 #5
Salve,
il comportamente della funzione BarsSinceExit() relativamente al debug è "normale".
Tutte le funzioni che fanno parte del gruppo "Strategy Position", pag. 123 del manuale di EasyScript (http://www.playoptions.it/beeTrader/EasyScript.pdf), hanno la particolarità di forzare l'esecuzione degli script barra per barra, al posto dell'esecuzione in un singolo passaggio su tutte le barre storiche. Per questo motivo nel debug si troverà una singola riga alla volta.
Per quanto riguarda l'effetto della funzione BarsSinceExit() nel suo script, credo che dipenda da come è realizzato lo script stesso, con una singola riga non sono in grado di valutare il suo problema.
In ogni caso, il modo più semplice per evitare di entrare più volte nella stessa condizione consiste nel trasformare una condizione che può essere vera per più barre consecutive in una condizione che diventa vera in una singola barra.
Le faccio un esempio. Supponiamo di avere una condizione di questo tipo:
# Calcolo condizione di entrata SET C1 = SMA(CLOSE, 20) > CLOSE # Condizione di entrata C1
Questa condizione può essere vera per biù barre consecutive. A partire dal valore di C1, sapendo che una condizione vera è rappresentata dal valore numerico 1 ed una condizione falsa è rappresentata dal valore numerico 0, è possibile creare una nuova condizione che diventa vera in una singola barra semplicemente in questo modo:
# Calcolo condizione di entrata SET C1 = SMA(CLOSE, 20) > CLOSE # Condizione di entrata - VERSIONE PRECEDENTE #C1 # Calcolo condizione di entrata modificata, vera in una singola barra e non in più barre consecutive SET C2 = (C1 > 0) AND (REF(C1, 1) < 1) # Nuova condizione di entrata C2
C2 diventa vera solo e soltanto se:
- nella barra attuale C1 è vera
e
- nella barra precedente C1 era falsa.
Con questo script tra le altre cose otterrà anche i seguenti benefici rispetto alla soluzione con l'utilizzo di BarsSinceExit() o altre funzioni del gruppo "Strategy Position":
- tempi di calcoli molto migliorati
- debug completo con tutte le barre
Ovviamente questa soluzione funziona qualsiasi sia la complessità della condizione C1. In pratica nel suo script le basta associare l'attuale condizione di entrata ad una variabile ed aggiungere una riga simile a quella che le ho illustrato poco sopra.
Max FrancarioUltima modifica di Francario Massimiliano; 25-05-15 alle 11:03
-
25-05-15, 11:13 #6
- Data Registrazione
- Apr 2014
- Messaggi
- 319
-
27-05-15, 14:37 #7
- Data Registrazione
- Apr 2014
- Messaggi
- 319
Ciao Max, ho provato a fare come mi dicevi, evitando l'uso della funzione BarsSinceExit() ma le mie sinapsi non collaborano.
Provo allora a postare lo script che sto testando per vedere se tu riesci ad aiutarmi. In pratica entro long se
- all'incrocio di una fascia di bollinger con una seconda;(tipo ABSO per intenderci)
- RSQ è affidabile
- il sinevawe è rialzista MA NON SONO GIA' USCITO DA QUESTO STESSO EVENTO
la stringa che non funziona è proprio questa e in particolare ULTIMOSWON<BarsSinceExit(). Se al posto di BarsSinceExit() metto un numero (6) tutto funziona perfettamente.
Ti viene in mente qualcosa?
Grazie 1000
PS
se lo script può interessare (dubito) chi come me è ancora alla ricerca della propria bussola...felice di ragionarci insieme..."la libertà è il tempo della vita che se ne va e che spendiamo nelle cose che ci motivano”. Pepe
-
28-05-15, 13:56 #8
Salve,
a prima vista, facendo qualche calcolo a mano, è possibile modificare la parte delle condizioni dello script in questo modo:
[HIGH]
# Calcolo della condizione di entrata
SET CX = (BSIGNAL > BSTOP) AND (TSIGNAL > TSTOP) AND (RSQ > RSCI) AND (RSQ > MAX(REF(RSQ, 1), ULTIMORON)) AND (ULTIMORON < ULTIMOROFF) AND (LRSIGNAL > BSTOP) AND (LRSIGNAL > LRSTOP)
SET SN = SINEW > LEADSW
SET CXSN = CX AND SN
SET DISCESA_CXSN = CROSSOVER(0.5, CXSN)
SET SALITA_SN = CROSSOVER(SN, 0.5)
SET COUNT_CXSN = LASTIF(DISCESA_CXSN)
SET COUNT_SN = LASTIF(SALITA_SN)
SET ENTRY_CHECK = (COUNT_CXSN > COUNT_SN) AND CXSN
SET ENTRY = CROSSOVER(ENTRY_CHECK, 0.5)
# Condizione di entrata dello script
ENTRY
[/HIGH]
Max Francario
-
28-05-15, 17:33 #9
- Data Registrazione
- Apr 2014
- Messaggi
- 319