Ciao, sto cercando di scrivere una condizione che faccia sì che se un trade supera un determinato prezzo ma la candela chiude sotto quel prezzo (quindi con uno spike dove il massimo è sopra un valore) il sistema porti lo stop in pari
Mi spiego, si entra a mercato a qualsiasi condizione, se entriamo a mercato a 13.000 di dax ed il prezzo con uno spike attraversa 13.100 in qualsiasi barra che sia la prima o le successive e la stessa candela che ha fatto questo spike poi chiude sotto il trade metta lo stop a zero. Ho scritto un codice ma non funziona potreste aiutarmi?
iF NOT ONMARKET and MIECONDIZIONI THEN
closelong=high+20
buy 1 contract at market
ENDIF
stopinpari=tradeprice
if longonmarket then
if ( high crosses over Closelong) then
sell at stopinpari stop
endif
endif
Ho variato il titolo perché il tuo era troppo generico. Usa sempre un titolo significativo.
Nel tuo codice verifichi che HIGH abbia superato un certo prezzo, ma CLOSE non l’hai verificato. Potrebbe essere ovunque, ad ogni modo è raro che CLOSE non sia < HIGH.
Di preciso che significa NON FUNZIONA? specifica bene cosa non funziona.
Meglio sarebbe se tu facessi un esempio funzionante e specificassi:
1. strumento
2. time frame
3. data e ora della candela dove c’è il problema.
Faccio un esempio:
Strumento: Dax Cash 1€
timefreame: 5 minuti
candela: 17.01.2020 candela delle ore 9.25
La tecnica per entrare è la tecnica camelback di Joe Ross, minimo relativo del trend si entra al break della candela. Mostro foto.
[attachment file=”117204″]
Adesso il mio obiettivo finale è il 423% della candela, voglio pero’ che il sistema nel caso una candela con un ombra abbia toccato almeno il 161% metta lo stop in pari. Ed il codice che ho scritto non rispetta questa condizione.
Il problema è che HIGH crosses over solo alla seconda candela ma non ritraccia al punto di uscita, alla terza non c’è crossover quindi non inserisce l’ordine di uscita ed esce altrove.
Sostituisci CROSSES OVER con >=.
Resta comunque il problema che in quel trade funzionerà perché subito il prezzo torna indietro e perché il prezzo nella terza candela supera HIGH, in caso contrario non funzionerebbe comunque perché quando il crossover si è verificato non hai salvato la condizione affinché l’ordine di stop venisse inserito anche nelle candele successive.
Se leggi il codice trailing stop di Nicolas puoi osservare la variabile NEWSL che fa proprio quello, è a zero quando non a mercato, poi viene valorizzato al verificarsi di una condizione in modo che ad ogni candela lo SL venga reimmesso come ordine pendente (nelle ultime righe).
non funziona ho provato anche a fare come hai detto tu con if high[1]>=161% ma non funziona uguale ho guardatoi codici del breakeven e dello stop loss ma senza successo
Devi mettere il prezzo corrispondente a 161%, non la costante 161%.
nello specifico io avevo scritto questo
if not longonmarket then
IF c1 THEN
LEntry = high + 1
FIBSTOP=round((high - low)*1)-1
stopinpari=LEntry+FIBSTOP
graphonprice stopinpari
endif
endif
if longonmarket then
if high>stopinpari and close<stopinpari then
sell at lentry stop
endif
endif
Ho usato anche la funzione graphonprice e si vede che il prezzo attraversa il livello desiderato e poi chiude sotto, ma il trade non si chiude dove vorrei ma allo stop originario.
ma a quanto pare non funziona
No, non vedo come hai calcolato il 161%, ad ogni modo servirebbe il tuo codice.
Io posso farti un esempio, comunque basandomi su una mia condizione.
Ovviamente domani.
Ho appena verificato una cosa se scrivo
if c1 then
FIBSTOP=round((high - low)*1)-1
stopinpari=LEntry+FIBSTOP
graphonprice stopinpari
endif
Sul grafico di prezzo il livello stop in pari viene regolarmente disegnato.
Se invece scrivo
if c1 then
FIBSTOP=round((high - low)*1)-1
stopinpari=LEntry+FIBSTOP
endif
if longonmarket then
if high>stopinpari and close<stopinpari then
graphonprice stopinpari
sell at market
endif
endif
sul grafico il livello stop in pari non esiste, è come se la variabile avesse valore zero
Roberto grazie ma ho risolto, andava inizializzata la variabile con ONCE
Mi fa piacere che tu abbia risolto.
Resta il fatto che io non ho capito questa riga:
FIBSTOP=round((high - low)*1)-1
dove fai la differenza tra minimo e massimo (puoi usare RANGE, invece di fare la differenza) e lo moltiplichi per 1, che significa? E’ chiaro che resta invariato qualunque valore sia moltiplicato per 1!
Poi ci togli 1, che immagino sia un pip (su una coppia di valute non sarebbe così). Cosa ottieni togliendo 1 pip dal RANGE?
A me non interessa entrare nello specifico, però è un calcolo piuttosto strano e mi piacerebbe capirne lo scopo.
Si è vero potrei usare il range, 1 è perchè poi io faccio i backtest e vedo il moltiplicatore migliroe per ogni strategia, alla fine sono le espansioni di fibonacci