Errore divisione per zero in AscTrend Strategy
Forums › ProRealTime forum Italiano › Supporto ProOrder › Errore divisione per zero in AscTrend Strategy
- This topic has 5 replies, 3 voices, and was last updated 1 year ago by robertogozzi.
-
-
09/27/2021 at 12:08 PM #178553
Buongiorno a tutti,
oggi ho provato a utilizzare la strategia automatica che ho trovato in questo topic (https://www.prorealcode.com/topic/strategie-avec-indicateur-asctrand/#post-159634),
ma al momento di entrare in posizione (ore 9:00 nel backtest) , si è bloccato con la motivazione:
“Il sistema di trading è stato interrotto a causa di una divisione per zero durante la valutazione dell’ultima candela. Può aggiungere delle protezioni al suo codice per evitare le divisioni per zero e poi ricontrollare il sistema per verificare la correzione.”
Questo è il codice :
//————————————————————————-
// Codice principale : ASCtrend strategy
//————————————————————————-
defparam cumulateorders=falseONCE a = -1.0
ONCE b = 3.0
ONCE e = 5.0TIMEFRAME(1minute, updateonclose)
ONCE c = 0.0
// ================
RISK = a //RISK setting of the ASCtrend indicator
size = 1 //size of orders
takeprofit = b //takeprofit in points (set to 0 to disable takeprofit, order will close at next signal inversion)
stoploss = c //stoploss in points (set to 0 to disable takeprofit, order will close at next signal inversion)
// ================
TradingDay = opendayofweek = 1 or dayofweek = 2 or dayofweek = 3 or dayofweek = 4 or dayofweek = 5
TradingTime = time = 090000 or time = 120000 or time = 150000 or time = 180000buysig, sellsig = CALL “ASCtrend indi comp strategy”[RISK]
if not longonmarket and buysig[e] and tradingtime then
buy size contract at market
endifif not shortonmarket and sellsig[e] and tradingtime then
sellshort size contract at market
endifif stoploss>0 then
set stop ploss stoploss
endif
if takeprofit>0 then
set target pprofit takeprofit
endif
//graph buysig coloured(0,200,0)
//graph sellsig coloured(200,0,0)
SET STOP pTRAILING 0//————————————————————————-
// Funzione : ASCtrend indi comp strategy
//————————————————————————-
// — settings
//RISK=3
// — end of settingsvalue10=3+RISK*2
x1=67+RISK
x2=33-RISK
value11=value10shift=0//CountBars-11-1
buysig=0
sellsig = 0Counter=shift
iRange=0.0
AvgRange=0.0
for Counter=shift to shift+9 do
AvgRange=AvgRange+Abs(High[Counter]-Low[Counter])
nextiRange=AvgRange/10
Counter=shift
TrueCount=0
while (Counter<shift+9 and TrueCount<1) do if (Abs(Open[Counter]-Close[Counter+1])>=iRange*2.0) then
TrueCount=TrueCount+1
endif
Counter=Counter+1
wend
if (TrueCount>=1) then
MRO1=Counter
else
MRO1=-1
endifCounter=shift
TrueCount=0
while (Counter<shift+6 and TrueCount<1) do if (Abs(Close[Counter+3]-Close[Counter])>=iRange*4.6) then
TrueCount=TrueCount+1
endif
Counter=Counter+1
wend
if (TrueCount>=1) then
MRO2=Counter
else
MRO2=-1
endifif (MRO1>-1) then
value11=3
else
value11=value10
endif
if (MRO2>-1) then
value11=4
else
value11=value10
endifvalue2=100-Abs(Williams[value11](close)[shift]) // PercentR(value11=9)
$Tablevalue2[shift]=value2
$val1[shift]=0
$val2[shift]=0
value3=0if (value2<x2) then //signals if value2[1]>x2[1] and lastsig>=0 then
sellsig = 1
lastsig = -1
endif
endifif (value2>x1) then
//signals
if value2[1]<x1[1] and lastsig<=0 then
buysig = 1
lastsig = 1
endif
endif//————————————————————————-
Grazie in anticipo del vostro aiuto!!
09/27/2021 at 1:09 PM #178565Ah! Un altra cosa : L’ho usata sulla coppia forex EURUSD Mini .
C’è qualcuno che può darmi una mano, dato che è la prima volta che mi capita?
09/27/2021 at 5:02 PM #178584Ho notato che tu usi SET STOP PLOSS all’interno di IF…ENDIF. E’ inutile, che sia eseguita o meno, in quanto alla fine metti SET STOP pTRAILING, in quanto trattandosi di due STOP (anche se diversi), prevale quello eseguito per ultimo, quindi SET STOP PLOSS non sarà mai attivato.
Ho provato ad eseguirlo più volte, con parametri diversi, ma non ha mai segnalato errori.
Penso che possa dipendere da SHIFT o VALUE11, che potrebbero essere 0 o negativi, quindi creare problemi quando sono tra parentesi quadre.
Ti consiglio di sostituire:
- [shift] con [max(1,shift)]
- [value11] con [max(1,value11)]
però non so se poi questo influisce sulla logica dell’indicatore.
09/28/2021 at 9:14 PM #178681Grazie Roberto! Ho risolto…
05/27/2023 at 1:37 PM #215275Salve Roberto
Sto avendo stesso problema, giusto nel fare un test con strategia semplice di poche riga. Com’e- possibile? Non ho nessuna divisione nel programma, puoi dare un’occhiata gentilmente?
//definizione dei parametri del codice
DEFPARAM Cumulatrorders= False
//Condizioni per entrare long
Indicator1= rsi[14](close)
c1= (indicator<=40)
If c1 then
Buy 1 contract at market
Endif
//condizioni per uscire da long
Indicator2= average[20](close)+2.1*std[20](close)
c2= (close>=indicator2)
If c2 then
Sell at matket
Endif
//Condizioni per entrare short
Indicator3= rsi[14](close)
C3= (indicator3 >=60)
If c3 then
Sellshort 1 contract at market
Endif
//condizioni per uscire da short
Indicator4= average [20](close)-2.1* std[20](close)
c4 = (close >=indicator4)
If c4 then
Exitdhort at market
Endif
Set stop ploss 20
Set target pprofit 80
Come puoi vedere non ho nessuna divisione. Ma mi da “errore causa divisione per zero durante la valutazione dell’ultima candela…”
Cosa puo essere?
Grazie mille
05/29/2023 at 11:01 AM #215332Non so come hai fatto il copia e incolla, ma quel codice per funzionare ha bisogno di alcune correzioni della sintassi.
Ad ogni modo, dopo le correzioni di sintassi l’ho provato in demo e mi ha aperto subito una posizione senza alcun problema.
Questo è il codice corretto che ho usato:
12345678910111213141516171819202122232425262728//definizione dei parametri del codiceDEFPARAM Cumulateorders= False//Condizioni per entrare longIndicator1= rsi[14](close)c1= (indicator1<=40)If c1 thenBuy 1 contract at marketEndif//condizioni per uscire da longIndicator2= average[20](close)+2.1*std[20](close)c2= (close>=indicator2)If c2 thenSell at marketEndif//Condizioni per entrare shortIndicator3= rsi[14](close)C3= (indicator3 >=60)If c3 thenSellshort 1 contract at marketEndif//condizioni per uscire da shortIndicator4= average [20](close)-2.1* std[20](close)c4 = (close >=indicator4)If c4 thenExitshort at marketEndifSet stop ploss 20Set target pprofit 80 -
AuthorPosts
Find exclusive trading pro-tools on