Errore al cambio dei valori (da sempre lo stesso risultato)

Viewing 15 posts - 1 through 15 (of 98 total)
  • Author
    Posts
  • #143644 quote
    Ciurno981
    Participant
    Average
    // Definizione dei parametri del codice
    DEFPARAM CumulateOrders = false // Posizioni cumulate attivate
    // Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l’orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
    DEFPARAM FLATBEFORE = 230100
    // Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all’orario "Flat After"
    DEFPARAM FLATAFTER = 230000
    //
    TIMEFRAME(default)
    // Impedisce al sistema di tradare in giorni specifici della settimana
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
     
    IF Not OnMarket THEN
    SL = 0
    TP = 0
    ENDIF
     
    // Condizioni per entrare su posizioni long
    indicator1 = Average[3](Stochastic[5,3](close))
    c1 = (indicator1 CROSSES OVER 20)
    //
    TIMEFRAME(1 hour,default)
    indicator2 = ExponentialAverage[9](close)
    indicator3 = ExponentialAverage[21](close)
    c2 = (indicator2[1] > indicator3[1])
    //
    TIMEFRAME(default)
    IF (c1 AND c2) AND not daysForbiddenEntry THEN
    IF SL = 0 OR ShortOnMarket THEN
    SL = AverageTrueRange[7](close)*100
    TP = SL * 3
    ENDIF
    BUY 1 SHARES AT MARKET
    SET TARGET PROFIT TP
    SET STOP   LOSS   SL
    ENDIF
     
    // Condizioni per entrare su posizioni short
    indicator4 = Average[3](Stochastic[5,3](close))
    c3 = (indicator4 CROSSES UNDER 80)
    //
    TIMEFRAME(1 hour,default)
    indicator5 = ExponentialAverage[9](close)
    indicator6 = ExponentialAverage[21](close)
    c4 = (indicator5[1] < indicator6[1])
    //
    TIMEFRAME(default)
    IF (c3 AND c4) AND not daysForbiddenEntry THEN
    IF SL = 0 OR LongOnMarket THEN
    SL = AverageTrueRange[7](close)*100
    TP = SL * 3
    ENDIF
    SELLSHORT 1 SHARES AT MARKET
    SET TARGET PROFIT TP
    SET STOP   LOSS   SL
    ENDIF
    TIMEFRAME (5minute,upDateOnClose)
    //************************************************************************
    //trailing stop function
    trailingstart = 20 //trailing will start @trailinstart points profit
    trailingstep = 5 //trailing step to move the "stoploss"
     
    //reset the stoploss value
    IF NOT ONMARKET THEN
    newSL=0
    ENDIF
     
    //manage long positions
    IF LONGONMARKET THEN
    //first move (breakeven)
    IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
    newSL = tradeprice(1)+trailingstep*pipsize
    ENDIF
    //next moves
    IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
    newSL = newSL+trailingstep*pipsize
    ENDIF
    ENDIF
     
    //manage short positions
    IF SHORTONMARKET THEN
    //first move (breakeven)
    IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
    newSL = tradeprice(1)-trailingstep*pipsize
    ENDIF
    //next moves
    IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
    newSL = newSL-trailingstep*pipsize
    ENDIF
    ENDIF
     
    //stop order to exit the positions
    IF newSL>0 THEN
    SELL AT newSL STOP
    EXITSHORT AT newSL STOP
    ENDIF
     
    Graph TP/pipsize coloured(0,0,255,255)
    Graph SL/pipsize coloured(255,0,0,255)
    
    
    
    SET TARGET $PROFIT 150   //150 euro di profitto
    SET STOP   $LOSS   50    //50  euro di perdita

    Sto testando questa strategia ma noto che pur cambiando il valore del atr che stabiliscono il mio stop e il mio profit , la posizione come in foto non cambia minimamente pur ?avendo aumentato il valore moltiplicato da 10 a 100 come è possibile non è sbagliato?grazie

    2020-09-08-2.png 2020-09-08-2.png 2020-09-08-3.png 2020-09-08-3.png
    #143655 quote
    robertogozzi
    Moderator
    Master

    Perché esegue sempre per ultime le righe 102 e 103, che quindi sovrascrivono quelle precedenti.

    Per cui tutti i calcoli fatti prima di quelle due righe sono ignorati!

    #143662 quote
    Ciurno981
    Participant
    Average

    Ah e come posso far in modo da combinare le cose senza che mi venga questo errore? cioè le size dovrebbero darmi sempre lo stesso valore sia di take profit che di stop loss

    #143663 quote
    robertogozzi
    Moderator
    Master

    Devi decidere quale usare, se lasci così usi le righe 102 e 103, altrinenti le togli ed usi l’Atr.

    Entrambe le cose non puoi averle.

    #143665 quote
    Ciurno981
    Participant
    Average

    Quindi non posso avere take profit e stop loss fissi se ho l’atr? perchè io utilizzo l’atr solo per vedere la volatilità in quel momento per impostare uno stop loss più adeguato al momento in cui si trova però vorrei che comunque il valore che perdo e che vinco siano comunque fissi.. non c’è un modo?

    #143667 quote
    robertogozzi
    Moderator
    Master

    No, come fai ad avere due stop diversi, uno variabile ed uno fisso, quale deve usare il broker?

    Il codice viene eseguito in sequenza, se metti due identiche istruzioni vengono eseguite tutte, ma ognuna sovrascrive quella precedente, per cui solo l’ultima sarà quella che conta.

    #143691 quote
    Ciurno981
    Participant
    Average

    Eh infatti io non vorrei due stop diversi io vorrei che qualunque sia il valore del atr*10 (come da istruzione) mi dia sempre lo stesso valore di stop loss e di take profit, indipendentemente de sia di 10 o 100 pips,l atr mi serve solo per definire uno stop adeguato in base alla volatilità ma se per arrivare in stop passano 2 candele o 20 io vorrei avere sempre la stessa perdita. Non c’è un modo per fare questo?non si potrebbe magari inserire un istruzione per modulare la size delle operazioni in base al valore dell’art?!

    #143709 quote
    robertogozzi
    Moderator
    Master

    Ok, quindi ti servono stop diversi, ma non contemporaneamente.

    Questo dopo N candele passa a quello fisso (sostituisci le righe 102-103 con queste):

    IF (BarIndex - TradeIndex) >= 10 THEN  //cambia diopo 10 candele
       SET TARGET $PROFIT 150   //150 euro di profitto
       SET STOP   $LOSS   50    //50  euro di perdita
    ENDIF
    #143723 quote
    Ciurno981
    Participant
    Average

    Si esatto mi servono stop diversi ma ognuno per ogni posizione, quello delle candele era solo un esempio, non è come vorrei io, cioè dovrei mettere che se ad esempio l’atr segna 0.2 pips che moltiplicato per 10 da 2 pips , il valore di questo stop di 2 pips sia di 50 euro, ma se la posizione dopo l’atr sta 1.0 quindi per 10 fa 10 pips, il valore di questo stop è comunque 50 euro, l’atr serve solo per stabilire stop e profit più giusti ma a qualsiasi valore sia l’atr lo stop deve essere sempre di 50 euro e il profit di 150 euro, forse mi sono spiegato un pochino meglio..

    #143746 quote
    robertogozzi
    Moderator
    Master

    Non è che abbia capito molto, cerca di rispiegarmelo meglio, magari con qualche calcolo.

    #143757 quote
    Ciurno981
    Participant
    Average

    Ok ci provo,questa era una strategia che usavo manualmente,quindi quando erano rispettate tutte le condizioni aprivo una posizione, per decidere stop e profit utilizzavo un atr e quindi facevo valore dell atr per 10 (es. 0.2*10=2 pips valore dello stop) quando manualmente settavo i parametri di stop e profit vedendo che l atr mi dava valore 2 pips di stop, settavo quindi 2 pips di stop e 6 pips di profit, e la size (in lotti), della posizione la modificavo io in base a quanti erano i pips, e aumentavo il numero di lotti fino a che non mi dava che lo stop di 2 pips corrispondeva a 50 euro e i 6 pips di profit mi davano 150 euro, (faccio un esempio,se lo stop era di 2 pips e il profit di 6 e se la size la facevo da 1 lotto mi dava 50 euro di stop e 150 di profit, se aprivo una posizione successivamente e lo stop di quest’altra posizione era di 1 pip e il profit di 3 pips il lotti che mettevo erano 2 che corrispondevano a 50 e 150 euro,non più 1 lotto sennò mi avrebbe dato 25 e 75 la metà) quello che voglio dirti e che la size deve essere differente per ogni posizione per far in modo che i valori di stop e di profit siano sempre quelli.

    #143869 quote
    Ciurno981
    Participant
    Average

    Allora ho fatto i calcoli esatti di come dovrebbe essere facciamo un ipotesi su eur/usd sono rispettate le condizioni per un entrata long in cui il valore finale dello stop loss dato dal valore del atr*10 è uguale a 20. Quindi stop loss 20 pips, take profit 60 pips, io vorrei che il mio stop loss e take profit sia sempre lo stesso valore di soldi indipendentemente dai quanti siano i pips, quindi stop loss 50 euro e take profit 150 euro (anche se i pips sono 10, 20,50) la perdita deve essere sempre 50 euro, cosi facendo si dovrebbe dare ogni volta un valore diverso ad un singolo pip, continuando con l’esempio stop di 20 pips, facciamo 50/20=2.5 ho fatto 50 euro che è la quantità di soldi che perdo diviso i pips che mi ha dato l’atr*10, il risultato mi da 2.5 euro che è il valore di ogni sigolo pips, lo trasformo in dollari della mia valuta mi viene 3 dollari ogni pips, a questo punto devo sapere con quanti lotti dovrei aprire la posizione quindi faccio 3$/10$(che è il valore di un pip di 1 lotto)=0.3 lotti. In conclusione in questo caso avendo uno stop di 20 pips che per me in euro deve avere un valore fisso che è 50, aprirò una posizione con 0.3 lotti perchè cosi facendo ogni pip vale 2.5 euro ed il risultato finale dello stop loss è di 50 euro. Questo è il calcolo per definire il mio stop e profit e con quanto si deve aprire una posizione spero di essere stato chiaro.

    #143930 quote
    robertogozzi
    Moderator
    Master

    Ecco il calcolo (righe 2 – 8):

    buy at -close limit
    risk  = 200                     //max. capitale da rischiare
    lotti = 1                       //1 lotto per difetto
    SL1   = AverageTrueRange[14](close) / pipsize
    SL2   = SL1 * 10                //10 volte Atr
    SL3   = round(SL2)
    Soldi = SL3 * pointvalue        //convertire i pips in valore totale
    Lotti = risk / Soldi            //calcolare la taglie dei lotti
    Lotti = max(0.5,Lotti)          //verificare che il lotto non scenda sotto il minimo
    graph SL1
    graph SL2
    graph SL3
    graph Soldi
    graph Lotti

    La riga 1 è richiesta da ProBackTest per fare girare una strategia (non fa assolutamente niente perché non si può comprare al prezzo corrente trasformato in negativo).

    La riga 9 è facoltativa, se vuoi impedire che il numero di lotti calcolato scenda sotto il minimo richiesto (per DAX €1 il minimo è 0.5).

    Le righe 10 – 14 servono per fare il debugging (correzione errori) e ti fanno vedere, candela per candela soffermandotici col mouse, i valori delle variabili nell’apposito riquadro che ho cerchiato in verde nella foto allegata.

    x-2.jpg x-2.jpg
    #143944 quote
    Ciurno981
    Participant
    Average

    Ok siamo sulla buona strada perchè hai capito cosa intendessi io, ma c’è ancora qualche problema perchè chiude ancora alcune posizioni in modo errato, se abbiamo impostato il valore del risk=200 non dovrebbe perdere al massimo 200 euro? poi per quanto riguarda riga 3- dovrebbe essere valore della atr*10 poi fare risk/(atr*10) e trovo il valore di un pip e poi fare questo valore/valore di un pip di 1 lotto(cioè quello di default) cosi facendo troviamo il lotti con cui deve aprire la posizione. Ho provato ad aggiustarla io ma non ho avuto il risultato sperato.

    buy at -close limit
    risk  = 50                     //max. capitale da rischiare
    lotti = 1                       //1 lotto per difetto
    SL1   = AverageTrueRange[7](close)*10 // 10 volte atr
    SL2   = risk/SL1              //valore di 1 pip
    SL3   = round(SL2)             
    Soldi = SL3 * pointvalue        //convertire i pips in valore totale
                                      //6-7 riga non ho ben capito cosa succeda
    Lotti =  Soldi/pipsize            //calcolare la taglie dei lotti (il calcolo è cosi se per pipsize si intende il valore di default di un pip)
    Lotti = max(0.5,Lotti)          //verificare che il lotto non scenda sotto il minimo
    graph SL1
    graph SL2
    graph SL3
    graph Soldi
    graph Lotti
    #143955 quote
    robertogozzi
    Moderator
    Master

    Se alla riga 10 metti che prenda almeno 0.5 lotti non è più sicuro che rischi solo la somma che hai stabilito.

    Se il risultato della riga 9 viene 0.02 è chiaro che non rispetta il minimo, quindi l’ordine ti verrà respinto.

    In sostanza se vuoi rischiare solo € 200, o 50, NON puoi tradare il DAX ma altri strumenti, se vuoi mantenere lo SL fisso, come hai detto.

    Se invece fai lo SL variabile, allora non ci sono problemi, lasci il numero di lotti fisso e vari lo stop loss.

    O l’una o l’altra. Entrambe le cose sono incompatibili tra loro.

    Nota: il valore dei pips NON si può cambiare, per il DAX standard è €25/pip, €5/pip per il mini DAX ed €1/pip per il micro DAX, €10/pip per EurUsd standard, €1/pip per mini EuroUsd, ecc… Puoi cambiare il numero di pips (per SL e TP) oppure il numero di LOTTI, ma il pip in se stesso è costante.

    Puoi farti un indicatore come questo:

    RETURN PipSize AS "Taglia di 1 pip",PipValue AS "Valore di 1 pip"

    per vedere con i vari strumenti il loro valore.

Viewing 15 posts - 1 through 15 (of 98 total)
  • You must be logged in to reply to this topic.

Errore al cambio dei valori (da sempre lo stesso risultato)


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
Ciurno981 @ciurno981 Participant
Summary

This topic contains 97 replies,
has 2 voices, and was last updated by robertogozzi
5 years, 4 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 09/08/2020
Status: Active
Attachments: 20 files
Logo Logo
Loading...