No, il programma che ho provato (https://www.prorealcode.com/topic/non-mi-inserisce-lordine-pendente/page/2/#post-126634) ha aperto una posizione alle 13 e l’ha chiusa alle 17 perché alle 16:30 si è formata una barra contraria.
L’altro ha aperto un’operazione alle 21 e alla chiusura il mercato era chiuso, la chiuderà alla riapertura dei mercati, l’ordine ce l’ha già in memoria sicuramente.
Funzionano regolarmente.
Purtroppo non posso mettermi a verificare tutte le operazioni, ne guardo 3-4 in modo sparso, se ce ne sono altre fammi sapere quali candele sono e le verifico.
Roberto a questo punto volevo farti una domanda, poi per il software si fa sicuramente.
Io avrei bisogno di entrare alle mie condizioni a mercato, supponiamo entri long. Fino a che persiste una barra verde rimango a mercato. Alla prima barra rossa, esco dal mercato e rientro subito sempre alle mie condizioni.
Al contrario posso entrare short e fino a che persiste una barra rossa resto a mercato. Alla prima barra verde esco dal mercato e rientro subito a mercato alle mie condizioni.
Attenzione che potrei rientrare sia short che long dipende dal verificarsi delle mie condizioni.
E’ fattibile?
Ho bisogno di capire se su Prorealtime sia fattibile una strategia del genere.
Grazie mille.
Quello che hai scritto è molto simile a quello che vuoi, mi pare.
Questo è un esempio, appena c’è una candela contrara esci se sei a mercato. Entri solo quando il prezzo incrocia la media:
Media = average[20,0](close)
IF LongOnMarket AND close < open THEN //Esci se sei LONG e si forma una candela rossa
SELL AT MARKET
ENDIF
IF ShortOnMarket AND close > open THEN //Esci se sei SHORT e si forma una candela verde
EXITSHORT AT MARKET
ENDIF
IF close CROSSES OVER Media AND Not OnMarket THEN //Entra LONG all'incrocio rialzista (se non sei già a mercato)
BUY 1 Contract AT MARKET
ENDIF
IF close CROSSES UNDER Media AND Not OnMarket THEN //Entra SHORT all'incrocio ribassista (se non sei già a mercato)
SELLSHORT 1 Contract AT MARKET
ENDIF
Ho capito, ti ho fatto la domanda perchè ho notato lanciando i programmi sul demo, che quando arriva la candela contraria, alla chiusura di questa (quindi apertura della successiva), se mi chiude la posizione, non mi apre subito a mercato la successiva. Temevo non si potesse fare su ProrealTime.
Quindi mi confermi che è possibile farlo. La condizione di apertura che hai fatto tu sopra è un esempio, io posso sostituirla con il mio tipo barra corretto?
E sotto setto lo Stop LOSS, giusto?
Si, puoi usarla con altre tue condizioni.
Alla fine aggiungi lo SL ed eventualmente il TP.
Nel mio esempio rientra solo al prossimo incrocio.
Grazie mille Roberto.
Quindi all’inizio di una candela si può chiudere e riaprire subito una nuova posizione nella stessa direzione oppure contraria a quella appena chiusa. Avevo un dubbio che non si potesse fare.
Quindi se non si comporta così l’errore sta nel codice giusto?
Ti allego il codice appena scritto. Posizione aperta alle 15, ma alla chiusura della barra delle 16.30(barra verde), quindi alle 17 non è uscito. Non riesco a capire come mai.
Sono sul Bitcoin(E1) 30 minuti.
Grazie mille.
DEFPARAM CumulateOrders = True
DEFPARAM PreLoadBars = 10000
////////////////////////////////////////////////////////////////////////////////////////
ONCE Capitale = 4196
ONCE LotNumber = 1
ONCE MinLots = 1
ONCE SpreadEntrata = 20 * pipsize
ONCE StopMinimo = 100 * pipsize
ONCE StopMassimo = 200 * pipsize
//ONCE LimiteMaxBarra = 450 * pipsize
BarraVerde = Open < Close
BarraRossa = Open > Close
TradingDay = OpenDayOfWeek >= 0 AND OpenDayOfWeek <= 6 //trade only Mon. to Fri.
//ESCO = 999
//PASSO = 999
//AltaVolatilita = range > LimiteMaxBarra
//Definisco il tipo barra
IF (close >= (high + low) / 2) THEN
TipoBarra = 1
ELSIF (close < (high + low) /2) THEN
TipoBarra = 2
ENDIF
IF BarraVerde THEN
SpikeSuperiore = high - close
SpikeInferiore = open - low
ELSIF BarraRossa THEN
SpikeSuperiore = high - open
SpikeInferiore = open - low
ENDIF
IF LongOnMarket AND close < open THEN //Esci se sei LONG e si forma una candela rossa
SELL AT MARKET
ENDIF
IF ShortOnMarket AND close > open THEN //Esci se sei SHORT e si forma una candela verde
EXITSHORT AT MARKET
ENDIF
// Se a mercato Short e Barra verde chiude la posizione SHORT, se a mercato Long e Barra rossa chiude la posizione LONG
//IF SHORTONMARKET AND BarraVerde THEN
//IF ONMARKET > 0 AND BarraVerde THEN
//IF Countofshortshares > 0 THEN
//ESCO = 1
//EXITSHORT AT MARKET //exit SHORT trades, if any
//SELL AT MARKET //exit LONG trades, if any
//ENDIF
//ELSIF LONGONMARKET AND BarraRossa THEN
//ELSIF ONMARKET AND BarraRossa THEN
//IF Countoflongshares > 0 THEN
//ESCO = 2
//SELL AT MARKET //exit LONG trades, if any
//EXITSHORT AT MARKET //exit SHORT trades, if any
//ENDIF
//ENDIF
//Credo dica il profitto è dato dal capitale + il ricavato dal programma
MyProfit = Capitale + StrategyProfit
//Credo centri qualche cosa con l'aumento della size al cambio del mese
IF Month <> Month[1] THEN
LotNumber = max(MinLots, (MyProfit / Capitale))
ENDIF
IF TipoBarra = 1 AND TradingDay AND (Countoflongshares = 0) THEN
SELLSHORT LotNumber CONTRACT AT MARKET
IF SpikeSuperiore >= 220 THEN
StopEntrata = StopMassimo + SpreadEntrata
SET STOP pLOSS StopEntrata
ELSE
StopEntrata = StopMinimo + SpreadEntrata
SET STOP pLOSS StopEntrata
ENDIF
ELSIF TipoBarra = 2 AND TradingDay AND (Countofshortshares = 0) THEN
BUY LotNumber CONTRACT AT MARKET
IF SpikeInferiore >= 220 THEN
StopEntrata = StopMassimo + SpreadEntrata
SET STOP pLOSS StopEntrata
ELSE
StopEntrata = StopMinimo + SpreadEntrata
SET STOP pLOSS StopEntrata
ENDIF
ENDIF
//GRAPH SpikeSuperiore
//GRAPH SpikeInferiore
//GRAPH TipoBarra
//GRAPH StopEntrata
Cosa c’è che non va in quell’operazione?
E’ entrato una prima volta alle 15:30 (sul setup delle 15:00), una seconda volta alle 16:30 (sul setup delle 16:00) ed alle 17 ha chiuso le due posizioni SHORT perché la candela delle 16:30 era contraria!
Roberto, in allegato la situazione che mi sono trovato questa mattina.
Come vedi alle mie condizioni è entrato long alla barra delle 5:30, alla chiusura della barra delle 6 che è contraria, non è uscito(prima immagine).
Ha chiuso alla fine delle barra delle 7, ma come vedi dalla seconda immagine non è subito rientrato a mercato(seconda immagine).
Non riesco a capire dove sbaglio a scrivere il codice.
Sono sul demo di IG, il programma gira su Japan 225 Cash (1$) barre 30 minuti.
Ti rimetto il codice.
DEFPARAM CumulateOrders = True
DEFPARAM PreLoadBars = 10000
////////////////////////////////////////////////////////////////////////////////////////
ONCE Capitale = 4196
ONCE LotNumber = 1
ONCE MinLots = 1
ONCE SpreadEntrata = 20 * pipsize
ONCE StopMinimo = 100 * pipsize
ONCE StopMassimo = 200 * pipsize
//ONCE LimiteMaxBarra = 450 * pipsize
BarraVerde = Open < Close
BarraRossa = Open > Close
TradingDay = OpenDayOfWeek >= 0 AND OpenDayOfWeek <= 6 //trade only Mon. to Fri.
//ESCO = 999
//PASSO = 999
//AltaVolatilita = range > LimiteMaxBarra
//Definisco il tipo barra
IF (close >= (high + low) / 2) THEN
TipoBarra = 1
ELSIF (close < (high + low) /2) THEN
TipoBarra = 2
ENDIF
IF BarraVerde THEN
SpikeSuperiore = high - close
SpikeInferiore = open - low
ELSIF BarraRossa THEN
SpikeSuperiore = high - open
SpikeInferiore = open - low
ENDIF
IF LongOnMarket AND close < open THEN //Esci se sei LONG e si forma una candela rossa
SELL AT MARKET
ENDIF
IF ShortOnMarket AND close > open THEN //Esci se sei SHORT e si forma una candela verde
EXITSHORT AT MARKET
ENDIF
// Se a mercato Short e Barra verde chiude la posizione SHORT, se a mercato Long e Barra rossa chiude la posizione LONG
//IF SHORTONMARKET AND BarraVerde THEN
//IF ONMARKET > 0 AND BarraVerde THEN
//IF Countofshortshares > 0 THEN
//ESCO = 1
//EXITSHORT AT MARKET //exit SHORT trades, if any
//SELL AT MARKET //exit LONG trades, if any
//ENDIF
//ELSIF LONGONMARKET AND BarraRossa THEN
//ELSIF ONMARKET AND BarraRossa THEN
//IF Countoflongshares > 0 THEN
//ESCO = 2
//SELL AT MARKET //exit LONG trades, if any
//EXITSHORT AT MARKET //exit SHORT trades, if any
//ENDIF
//ENDIF
//Credo dica il profitto è dato dal capitale + il ricavato dal programma
MyProfit = Capitale + StrategyProfit
//Credo centri qualche cosa con l'aumento della size al cambio del mese
IF Month <> Month[1] THEN
LotNumber = max(MinLots, (MyProfit / Capitale))
ENDIF
IF TipoBarra = 1 AND TradingDay AND (Countoflongshares = 0) THEN
SELLSHORT LotNumber CONTRACT AT MARKET
IF SpikeSuperiore >= 220 THEN
StopEntrata = StopMassimo + SpreadEntrata
SET STOP pLOSS StopEntrata
ELSE
StopEntrata = StopMinimo + SpreadEntrata
SET STOP pLOSS StopEntrata
ENDIF
ELSIF TipoBarra = 2 AND TradingDay AND (Countofshortshares = 0) THEN
BUY LotNumber CONTRACT AT MARKET
IF SpikeInferiore >= 220 THEN
StopEntrata = StopMassimo + SpreadEntrata
SET STOP pLOSS StopEntrata
ELSE
StopEntrata = StopMinimo + SpreadEntrata
SET STOP pLOSS StopEntrata
ENDIF
ENDIF
//GRAPH SpikeSuperiore
//GRAPH SpikeInferiore
//GRAPH TipoBarra
//GRAPH StopEntrata
Senti, c’è qualcosa di strano davvero! Io ho eseguito la strategia di cui sopra (ho fatto il copia e incolla, senza variaee niente) ed alle 5:30 NON è entrato a mercato, è uscito da una precedente operazione, ma l’entrata a mercato l’ha fatta alle 6.
E’ poi entrato a mercato alle 6 ed alle 7:30, accumulando 2 posizioni chiuse all’inizio della barra delle 8>:30 perché quella delle 8 era contraria.
Ti consiglio di premere Ctrl+M dalla piattaforma per richiedere l’assistenza. Esamineranno la strategia e sapranno dirti qualcosa!
Grazie mille Roberto mi hai rincuorato, credevo di essere diventato pazzo.
Grazie mille davvero.
Mandato segnalazione attraverso CTRL+M.
Roberto non mi ricordo se ti avevo già fatto questa domanda, se all’inizio della barra chiudo una posizione, posso rientrare subito a mercato in una delle due direzioni, indipendentemente dalla direzione della posizione appena chiusa?
Oppure devo aspettare la barra successiva per rientrare.
Grazie mille ancora.
E’ possibile solo facendo Stop & Reverse e mettendo TRUE nella prima riga:
defparam cumulateorders=true
if close > average[20] then
buy at market
else
sellshort at market
endif
Con una strategia dove non c’è Stop & Reverse NON si può, perché per sapere che è a mercato gli occorre una barra:
defparam cumulateorders=false
sell at market
exitshort at market
if close > average[20] then
buy at market
elsif close < average[20] then
sellshort at market
endif
Posso fare lo stop&reverse con le mie condizioni, ovvero in base al tipo barra appena chiusa? Ieri dovresti aver ricevuto due programmi da Alberto. Sono io che collaboro con lui, te lo aveva detto giusto?. Ho notato che se sposto l’IF di uscita dal mercato sotto la sezione di entrata, mi esce corretto alla prima barra contraria, ma non entra subito. E scusami, ma lo stop & reverse non lo ho capito.
Ovviamente tu lo Stop & Reverse lo farai con le tue condizioni, qualynque siano, il mio era solo un esempio.
Lo Stop & Reverse significa che non devi preoccuparti di chiudere una posizione aperta, ci pensa ProOrder:
- quando trova BUY chiude ogni eventuale posizione Short aperta e ne apre una Long (quindi non devi prima fare EXITSHORT e poi BUY)
- quando trova SELLSHORT chiude ogni eventuale posizione Long aperta e ne apre una Short (quindi non devi prima fare SELL e poi SELLSHORT)