Certo, perché non hai messo le condizioni per entrare LONG o SHORT, quindi esegue entrambe, ma siccome l’entrata SHORT è successiva, automaticamente quella LOBG viene cancellata.
Se le inverti vedrai che entrerà sempre LONG.
Come devo modificare il codice per entrare sia long che short anche “at market”?
Vanno indicate le condizioni per entrare LONG e quelle per entrare SHORT (qundo entri a mercato, le altre volte piazzi sempre due ordini pendenti):
if cTime and dayOfWeek <>5 and Not OnMarket then
if (time = endTime) then
IF MyLongConditions THEN
buy positionSize contracts at market
ELSIF MyShortConditions THEN
sellShort positionSize contracts at market
ENDIF
else
buy positionSize contracts at chiusura – range2H*ratio limit
sellshort positionSize contract at chiusura + range2H*ratio limit
endif
endif
Mi sono espresso male, le condizioni di entrata sono già negli ordini pendenti.
Vorrei solo aggiungere questa ulteriore entrata: nel caso gli ordini pendenti non fossero presi e time = endTime, allora entra long at market se il close è inferiore a CHIUSURA e short se è superiore.
Ho provato a scrivere questo codice. ma ancora non funziona (non prende nessun ordine at market) e non capisco il motivo.
if time = startTime then
range2H = highest[Period](high) - lowest[Period](low)
chiusura = close
endif
if cTime and dayOfWeek <>5 then
buy positionSize contracts at chiusura - range2H*ratio limit
else
if (time = endTime) and close < chiusura and not onMarket then
buy positionSize contracts at market
endif
endif
if cTime and dayOfWeek <>5 then
sellshort positionSize contract at chiusura + range2H*ratio limit
else
if (time = endTime) and close > chiusura and not onMarket then
sellShort positionSize contracts at market
endif
endif
Bastava che dove ho indicato le condizioni tu ci mettessi le tue, MyLongConditions e MyShortConditions non esistono, servono solo per indicarti dove mettere le tue.
Le righe 6 e 14 le esegue agli orari stabiliti dal Lunedì al Giovedì.
Le righe 9 e 17 le esegue SOLO il Venerdì all’ora ultima.
Questo è il codice che ho postato prima con le tue condizioni che hai detto:
if cTime and dayOfWeek <>5 and Not OnMarket then
if (time = endTime) then
IF close < chiusura THEN
buy positionSize contracts at market
ELSIF close > chiusura THEN
sellShort positionSize contracts at market
ENDIF
else
buy positionSize contracts at chiusura – range2H*ratio limit
sellshort positionSize contract at chiusura + range2H*ratio limit
endif
endif
Può entrare da Lunedì a Giovedì tra le 210000 e le 231500 con ordini pendenti, tranne l’ultima candela, quella delle 231500 in cui entra a mercato secondo le condizioni che mi hai indicato nell’ultimo post.
Funziona (non capisco però dove è l’errore nel mio codice sopra, mi sembra cambiata solo l’inversione dell’ordine pendente con quello at market).