Buonasera a tutti, mi servirebbe una mano per impostare questi comandi:
- mantenere un ordine pendente per un numero definito di barre in quanto ho notato che probacktest tiene in memoria l’ordine solo per la barra successiva alla condizione impostata;
- eliminare un ordine pendente se un’altra condizione si verifica prima che l’ordine venga preso, esempio:
if not longomarket and C1, C2, C3 then
buy 1 shares at high[1] stop
set stop loss X
set target profit Y
Dovrei adesso impostare il n° di barre che tenga in memoria l’ordine stop (per esempio per 50 barre) ed impostare che al verificarsi di una successiva condizione C4, se non ancora a mercato, l’ordine pendente e stop loss/target vengano eliminati.
grazie mille in anticipo!
Massimo
Non devi fare niente, fa tutto ProOrder in automatico.
L’ordine viene cancellato ad ogni barra e viene di nuovo piazzato se le condizioni persistono.
Ciao Roberto, no infatti lo so questo…ma è quando le condizioni non sussistono più, poni il caso che:
c1=low[2]>low[1]
c2=low[0]>low[1]
c3=low[0]>low[2]
e metto un ordine pendente sell stop su low[1] che è il più basso del pattern.
La candela successiva a low[0] va sotto low [0] ma non tocca l’ordine pendente, ed anche le due successive…..a questo punto le condizioni di entrata non sussistono più perchè non c’è più il pattern, ma io voglio che l’ordine pendente rimanga li ad aspettare per altre 10 candele, come faccio?? Invece, l’ordine rimane solo per la candela successiva al pattern e poi si cancella (nel backtest segna così)….
Ci sarà un modo per mantenere l’ordine attivo una volta impostato….
Si, settare una variabile quando il pattern si verifica e resettarlo quando l’ordine entra a mercato, oppure dopo n candele. Esempio:
.
.
ONCE MioPattern = 0 //inizializzare la variabile che indica la barra dove si è formato il Pattern
.
.
IF OnMarket THEN
MioPattern = 0 //resettare la variabile al valore iniziale, se a mercato
ENDIF
IF MioPattern THEN
IF (BarIndex - MioPattern) > 10 THEN
MioPattern = 0 //resettare la variabile al valore iniziale dopo n candele
ENDIF
ENDIF
.
.
c1=low[2]>low[1]
c2=low[0]>low[1]
c3=low[0]>low[2]
IF c1 AND c2 AND c3 then
MioPattern = BarIndex //salvare il numero della barra dove il pattern si è formato
SellPrice = low[1] //salvare il prezzo di entata a mercato
ENDIF
IF MioPattern THEN
SELL 1 CONTRACTS AT SellPrice STOP
ENDIF
Dove ho messo i punti tu puoi mettere qualunque altro codice aggiuntivo che t’interessi mettere.
Grazie Roberto….sempre disponibilissimo!!
sai anche come si può fare ad eliminare un ordine pendente impostato (anche stop loss e take profit connessi) oltre al fatto delle 10 barre, se sopraggiunge una determinata condizione?
Con il caso di prima…. se il prezzo supera un massimo senza raggiungere sellprice? Per esempio:
c4=Highest[100](high)
Ogni ordine pendente viene CANCELLATO alla chiusura della candela e solo se le condizioni permangono e tu gli dici di reimmeterlo, ProOrder lo reimmette. Per cui se si verificano certe condizioni è sufficiente che tu non REIMMETTA l’ordine.
Nell’esempio sopra, se le condizioni c1, c2 e c3 si verificano, o se si erano verificate in precedenza, la strategia reimmette l’ordine alla riga 26. Se vuoi impostare delle condizioni che NON facciano reimmettere l’ordine pendente, basta che (sulla base di condizioni di tua scelta) resetti a ZERO la variabile MioPattern prima della riga 26.
Con il tuo esmpio
c4=Highest[100](high)
cosa intendevi fare? Hai settato una variabile al massimo più alto delle ultimne 100 barre ed a che ti serve?
Rileggendo attentamente l’esempio di cui sopra, perché hai chiesto di inserire un ordine SELL STOP? Sell si usa per uscire da posizioni LONG già aperte. Se intendi aprire una posizione SHORT occorre scrivere SELLSHORT.
E’ solo un esempio quello sopra….voglio capire il concetto, anche il comando sell è in realtà sellshort come dici tu, scusa non mi sono reso conto…..
quello che intendo è se imposto un ordine pendente ma il prezzo si allontana troppo dall’ordine stesso e va nella direzione opposta e l’ordine rimane attivo, nell’esempio sopra il prezzo invece che scendere e verso low [1] e vendere,
mettiamo il caso che sale e si forma un highest[100](high)….che è ben più in alto rispetto alla posizione corrente del prezzo…ti inserisco un allegato che è più chiaro
Ho capito meglio.
Ad ogni modo, come ti ho detto, alla chiusura della candela corrente l’ordine viene cancellato, per cui basta che elimini le condizioni che lo possonano fare reimmettere.
Nel tuo esempio puoi fare, alla riga 19 o 24 (meglio la 24):
c4 = Highest[100](high)
IF c4 THEN
MioPattern = 0
ENDIF
e l’ordine, alla riga 26, non sarà più reimmesso in quanto la condizione trigger non è più verificata.
Chiarissimo, grazie Roberto!
Scusami, ma l’esempio di cui sopra è errato (messo com’è è SEMPRE vero), va sostituito con:
c4 = Highest[100](high)
IF close > c4 THEN
MioPattern = 0
ENDIF
Si infatti, grazie Roberto