Buongiono, vorrei sapere come Prt usa lo stop and reverse. A volte il programma non chiude una semplice operazione long (per esempio), con la chiusura del long ed apertura dello short, ma effettua tre operazioni, ossia oltre alla chiusura del long e all’apertura corretta dello short, nella stessa barra ed alla stessa ora, lo richiude con un long che non capisco da dove scaturisce dato che in quel punto non ci sono condizioni long (infatti il ts era appena entrata short con lo stop&reverse), non ci sono stoploss, né orari di chiusura …[sono escluse posizioni cumulate]
GRAZIE
Allego immagine
Non saprei, occorre il codice e le informazioni per ripetere le operazioni: strumento, TF, spread e capitale indicato.
È strano, in effetti.
Stò provando a scrivere un codice con vari indicatori, tra cui vorrei aggiungere in seguito anche il “tuo” supertrendinverso per delle uscite (lo vedrai nel codice) (questa bozza ha SOLO una semplice entrata ed uscita dato che aspetto ancora di risolvere le multientrate cLong-cLong2 dell’altro TOPIC
CODICE: MNQXXXX (future micro Nasdaq)
TIMEFRAME : 3 minuti
SPREAD: da 0 ad 1 tick
CAPITALE: Demo (10000 euro)
DATI CARICATI: 10K (è ancora solo una bozza di trading system)
DEFPARAM CumulateOrders=False
// DATETIME SETTING
DEFPARAM Flatbefore = 001500
DEFPARAM Flatafter = 215500
limitHour = time<213000
//Ctime = (time >=001500 and time<=215500)
//------------------------------------------------------------------------------------
trailingActivation = (close * 0.5 / 100) / pointsize
trailingDelta = (close * 0.4 / 100) / pointsize
// ---------------------------------------------------------------------------------------------------------------OSCILLATORS LIST:
x=3 // 3 default PERFECT TREND Adaptation from Nicolas Code
y=7 // 7 default
H1 = Highest[x](high)
L1 = Lowest[x](low)
H2 = Highest[y](high)
L2 = Lowest[y](low)
if high<H1 then
Newhigh1=H1
else
Newhigh1=high
endif
if low>L1 then
Newlow1=L1
else
Newlow1=low
endif
if high<H2 then
Newhigh2=H2
else
Newhigh2=high
endif
if low>L2 then
Newlow2=L2
else
Newlow2=low
endif
if close>LineBlu[1] then
lineBlu=NewLow1
else
lineBlu=NewHigh1
endif
if close>LineRed[1] then
lineRed=NewLow2
else
lineRed=NewHigh2
endif
Blue= close>LineBlu and close>LineRed
GrayUp= close<LineBlu and close>LineRed
Red= close<LineBlu and close<LineRed
GrayDown= close>LineBlu and close<LineRed
//-----------------------------------------------------------------------------------------------------------------------
myMacd = exponentialaverage[12]-exponentialaverage[32] // My MACD & Mauro Kama
myMacdSignal = exponentialaverage[52](mymacd)
myKama = AdaptiveAverage[20,2,30](mymacd)
//-----------------------------------------------------------------------------------------------------------------------
nPeriod = 10 //CHANDE KROLL & Mauro Channel
multiplier = 3
atr = averageTrueRange[nPeriod]
nPeriod2 = 20
multiplier2 = 1.5
stDev = std[nPeriod](abs(ckUp-ckDown))
up = (Highest[nPeriod](high))- multiplier*atr
down = (Lowest[nPeriod](low))+ multiplier*atr
ckUp = Highest[nPeriod2](up)
ckDown = Lowest[nPeriod2](down)
ckZoneUp=max(ckUp,ckDown)
ckZoneDown=min(ckUp,ckDown)
ckPlus = typicalprice + multiplier2*stDev
ckMinus = typicalprice - multiplier2*stDev
//-----------------------------------------------------------------------------------------------------------------------------
Multiplier = 3 //SUPERTREND INVERSO Roberto Gozzi
Periods = 10
Multiplier = Max(1,Min(999,Multiplier))
Periods = Max(1,Min(999,Periods))
IF BarIndex > Max(Periods,Multiplier) THEN
MyATR = AverageTrueRange[Periods](close) * Multiplier
BasicUPPER = MedianPrice + MyATR
BasicLOWER = MedianPrice - MyATR
IF (BasicUPPER < FinalUPPER[1]) OR (close[1] > FinalUPPER[1]) THEN
FinalUPPER = BasicUPPER
ENDIF
IF (BasicLOWER > FinalLOWER[1]) OR (close[1] < FinalLOWER[1]) THEN
FinalLOWER = BasicLOWER
ENDIF
IF (ST[1] = FinalUPPER[1]) AND (close <= FinalUPPER) THEN
ST = FinalUPPER
SX = FinalLOWER
ELSE
IF (ST[1] = FinalUPPER[1]) AND (close > FinalUPPER) THEN
ST = FinalLOWER
SX = FinalUPPER
ELSE
IF (ST[1] = FinalLOWER[1]) AND (close >= FinalLOWER) THEN
ST = FinalLOWER
SX = FinalUPPER
ELSE
IF (ST[1] = FinalLOWER[1]) AND (close < FinalLOWER) THEN
ST = FinalUPPER
SX = FinalLOWER
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//------------------------------------------------------------- LISTA CONDIZIONI SINGOLE
c1=close>ckZoneUp //LONG
c2=Blue
c3=myMacd>=myKama
d1=close<ckZOneDown //SHORT
d2=Red
d3=myMacd<=myKama
// ------------------------------------------------------------ CONDIZIONI RAGGRUPPATE
cLong=c1 and c2 and c3 and limitHour
cShort=d1 and d2 and d3 and limitHour
// ------------------------------------------------------------ CONDIZIONI ENTRATA - USCITA
IF cLong THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
//IF longOnMarket and then
//SELL 1 CONTRACTS AT MARKET
//endif
If cShort THEN
SELLSHORT 1 CONTRACTS AT MARKET
ENDIF
//If shortOnMarket and THEN
//EXITSHORT 1 CONTRACTS AT MARKET
//ENDIF
//------------------------------------------------------------- TRAILING
If not onmarket then
MaxPrice=0
MinPrice=close
priceExit=0
endif
If longonmarket then
MaxPrice=Max(MaxPrice,high)
if MaxPrice-tradeprice(1)>trailingActivation*pointsize then
priceExit=MaxPrice-trailingDelta*pointsize
endif
endif
if shortonmarket then
MinPrice=Min(MinPrice,low)
if tradeprice(1)-MinPrice>trailingActivation*pointsize then
priceExit=Minprice+trailingDelta*pointsize
endif
endif
if onmarket and priceExit>0 then
sell at priceExit STOP
exitshort at priceExit STOP
endif
//-------------------------------------------------------------- STOP LOSS AND TAKE PROFIT
Set stop %loss 0.8
Ho fatto un sacco di prove modificando DEFPARAM CumulateOrders, aggiungendo IF NotLongOnMarket e IF Not ShortOnMarket, ma non riesco a capire cosa faccia. Dopo l’uscita dal Long entra Short ed esce immediatamente per poi rientrare la barra successiva!
Ho provato sulla vecchia versione 10.3 che, seppure ferma al 18 Dicembre come barre, funziona ancora regolarmente, si nota la chiusura dell’operazione in corso e la riapertura di quella contraria per lo Stop & Reverse. Sono due semplici operazioni, non 4!
Devi aprire una richiesta d’assistenza con ProRealTime premendo Ctrl+M dalla piattaforma.
Quando risponderanno sarebbe interessante se tu postassi la risposta in modo da condividere il problema e la soluzione.
Grazie intanto per la risposta e per le prove. Confermo dalle prove tutto quello che hai scritto, un esempio: supponiamo che il Ts è long a X e deve uscire in stop and reverse a Y, il comportamento corretto sarebbe chiudere il long ed entrare short (due operazioni su un barra ). Invece chiude il long con un exit, apre lo short (correttamente in quanto deve fare stop&reverse) e SUBITO richiude lo short con un long inspiegabile. Poi siccome permangono spesso le condizioni per lo short, dopo alcune barre riapre lo short (facendo in totale 4 operazioni al posto di due). Questo problema lo ho notato su diversi trading system, anche in quello relativo alle doppie condizioni compariva questo problema, ed era un altro Ts, quindi a questo punto dipende dalla versione 11. Per questo problema contatto l’assistenza e poi chiaramente posto la risposta sul forum.
Per il problema sulle doppie condizioni sento l’assistenza ugualmente? oppure possiamo fare altre prove? Ti posso dire che nell’altro software la cosa era banale, si inventava un FLAG, esempio: position = 0 e si procedeva con:
if position =0 and cLong then
if position =1 and cLong1 then
if position =0 and cShort then
if posision =-1 and cShort2 then
è possibile utilizzare dei flag simili al posto di onMarket (che non abilita lo stop&reverse) oppure not longOnMarket in cLong2 e not shortOnMarket in cShort 2, che per inspiegabili motivi, abilitano sempre lo stop&reverse per tutte le condizioni?
(poi chiaramente questi flag vanno resettati “penso”, probabilmente anche nel trailing mft. Pensi che come idea sia possibile e praticabile?
GRAZIE
Puoi usare IF CountOfLongShares = …. (per gli short CountOfShortShares), oppure anche CountOfPosition che è generuico ma devi usare ABS() perché per le posizioni Short restituisce valori negativi.
E’ una funzione che ancora non conosco. Faccio delle prove, ma non sono sicuro di riuscire ad utilizzare queste funzioni correttamente nello stop&reverse con più condizioni di entrata\uscita.
Dubito che abbia a che fare con quello che avete discusso tu e Roberto, ma …
La riga 53 può essere // fuori e non fa differenza per i risultati.
myMacdSignal (alla riga 53) non è utilizzato da nessuna parte nel resto del codice e tuttavia non viene visualizzato con un messaggio di errore che dice … myMacdSignal non è utilizzato nel codice.
Si ho visto, ma dato che non dà messaggio di errore non ho usato: //
Chiedo anche a te una cosa GraHal riportata nel TOPIC “Funzionamento Stop&Reverse” : ti sono capitati nella versione 11 errori nello stop&Reverse”? (rispondi nel Topic indicato se hai informazioni utili)
Grazie