Errore divisione per zero in AscTrend Strategy

Forums ProRealTime forum Italiano Supporto ProOrder Errore divisione per zero in AscTrend Strategy

Viewing 6 posts - 1 through 6 (of 6 total)
  • #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=false

    ONCE a = -1.0
    ONCE b = 3.0
    ONCE e = 5.0

    TIMEFRAME(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 = 180000

    buysig, sellsig = CALL “ASCtrend indi comp strategy”[RISK]

    if not longonmarket and buysig[e] and tradingtime then
    buy size contract at market
    endif

    if not shortonmarket and sellsig[e] and tradingtime then
    sellshort size contract at market
    endif

    if 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 settings

    value10=3+RISK*2
    x1=67+RISK
    x2=33-RISK
    value11=value10

    shift=0//CountBars-11-1
    buysig=0
    sellsig = 0

    Counter=shift
    iRange=0.0
    AvgRange=0.0
    for Counter=shift to shift+9 do
    AvgRange=AvgRange+Abs(High[Counter]-Low[Counter])
    next

    iRange=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
    endif

    Counter=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
    endif

    if (MRO1>-1) then
    value11=3
    else
    value11=value10
    endif
    if (MRO2>-1) then
    value11=4
    else
    value11=value10
    endif

    value2=100-Abs(Williams[value11](close)[shift]) // PercentR(value11=9)
    $Tablevalue2[shift]=value2
    $val1[shift]=0
    $val2[shift]=0
    value3=0

    if (value2<x2) then //signals if value2[1]>x2[1] and lastsig>=0 then
    sellsig = 1
    lastsig = -1
    endif
    endif

    if (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!!

     

    #178565

    Ah! 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?

    #178584

    Ho 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.

     

     

    #178681

    Grazie Roberto! Ho risolto…

    #215275

    Salve 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

     

    #215332

    Non 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:

     

Viewing 6 posts - 1 through 6 (of 6 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login