Modifica codice perdite complessive

Viewing 15 posts - 1 through 15 (of 19 total)
  • Author
    Posts
  • #179845 quote
    MauroPro
    Participant
    Veteran

    Ciao Roberto, è possibile modificare questo codice  sulle perdite complessive della giornata in modo da stoppare il Ts anche oltre la singola giornata?

    Mi spiego meglio: sebbene il codice riguardi le perdite complessive di giornata (n=3) e non consecutive di giornata (in quanto dai test è meglio così), ho notato che nella fasi di DD storico del TS le perdite complessive si identificano con quelle consecutive.

    Capita quindi, ad esempio che ieri il TS ha registrato 2 perdite complessive-consecutive, ed oggi 3 perdite complessive-consecutive e si è stoppatp.

    Tuttavia il risultato è che si hanno 5 perdite complessive-consecutive in due giorni.

    VORREI che dopo che ieri si sono registrate due perdite complessive-consecutive, oggi alla prima perdita  il TS smetta di operare.

    L’idea più semplice che mi è venuta è,  probabilmente,  fissare le perdite complessive anche di due giorni:  superate quelle il TS smette di operare in quel giorno. Penso che sia un miglioramento per molti TS.

    Si riesce a fare? Ecco il codice funzionante di tre perdite complessive di giornata (sarebbe da convertire in 3 perdite complessive di due giornate). Grazie

    once nLoss = 0
    nLossMax = 3
    if intradayBarIndex = 0 then
    nLoss=0
    endif
    if strategyProfit < strategyProfit[1] then
    nLoss=nLoss +1
    endif
    
    if miecondizioni and nLoss<nLossMax then
    ...
    
    #179921 quote
    robertogozzi
    Moderator
    Master

    Prova a cambiare le righe 3-5 con queste:

    if intradayBarIndex = 0 AND nLoss = nLossMax then
      nLoss=0
    endif
    #179924 quote
    MauroPro
    Participant
    Veteran

    Non funziona.

    Non c’è un modo per avere  intradayBarIndex di due giorni complessivi?

    #179925 quote
    MauroPro
    Participant
    Veteran

    Oppure, meglio, scrivere uno snippet che ancora non mi sembra esistere in cui determinare in X ore (48 ad esempio) il numero massimo di perdite complessive ( 3 ad esempio).

    Poi, quando capita la condizione,  quel giorno il TS si arresta e riprende il giorno seguente.

    #179928 quote
    robertogozzi
    Moderator
    Master

    Basta contare i giorni ogni volta che IntraDayBarIndex  = 0 e settare una variabile per avvisare di non tradare più (poi stabilirai te quando ricominciare):

    once nLoss   = 0
    once tradeON = 1
    ONCE Days    = 0
    nLossMax     = 3
    if intradayBarIndex = 0 then
       Days = Days + 1
       IF Days > 2 THEN
          tradeON = 1
          nLoss   = 0
       ENDIF
    endif
    if strategyProfit < strategyProfit[1] then
       nLoss=nLoss +1
    endif
    if miecondizioni and tradeON and nLoss < nLossMax then
    ...
    #179932 quote
    MauroPro
    Participant
    Veteran

    Quando provo a sostituire questo codice con quello precedente (prima ancora di testarlo), mi compare un errore in “Days”.  Sai quale può essere il  motivo e come si può risolvere?

    Image-005.jpg Image-005.jpg
    #179949 quote
    robertogozzi
    Moderator
    Master

    Forse perché esiste già una parola chiave chiamata così. Cambia il nome in Dayx o altro.

    #179964 quote
    MauroPro
    Participant
    Veteran

    Con dayX funziona, ossia il TS gira, ma il risultato è identico al codice base con solo nLoss<nLossMax.

    Ho provato infatti ad ottimizzare la riga 7 (al posto di 2 ho provato valori da 1 a 10) e i risultati sono tutti uguali, cosa che non è possibile.

    Hai provato ad usare il codice su un qualunque TS?

    #179972 quote
    robertogozzi
    Moderator
    Master

    Non l’ho provato.

    Mi sa che alle righe 12-14 ne mancava unae c’era una condizione sola alla riga 7:

    once nLoss   = 0
    once tradeON = 1
    ONCE Dayx    = 0
    nLossMax     = 3
    if intradayBarIndex = 0 then
       Dayx = Dayx + 1
       IF Dayx > 2 OR tradeON = 0 THEN
          tradeON = 1
          nLoss   = 0
       ENDIF
    endif
    if strategyProfit < strategyProfit[1] then
       nLoss=nLoss +1
       IF nLoss = nLossMax then
          tradeON = 0
       ENDIF
    endif
    if miecondizioni and tradeON and nLoss < nLossMax then
    ...
    #179980 quote
    MauroPro
    Participant
    Veteran

    Ho provato ma ancora non funziona. Quando hai tempo magari provalo su qualche tuo TS.

    #179983 quote
    robertogozzi
    Moderator
    Master

    Questo va con 2 giorni.

    Se lo vuoi fare ad ore basta che invece di IntraDayBarIndex tu incrementi un contatore ogni ora.

    #179984 quote
    MauroPro
    Participant
    Veteran

    A due giorni va bene. Provo ad applicare il codice su un TS  semplice dove posso controllare meglio.

    #180005 quote
    MauroPro
    Participant
    Veteran

    Ciao Roberto, ho riprovato ma ti confermo che NON funziona. Forse intendiamo cose differenti: la mia idea è quella di non avere più di tre perdite complessive in due giorni.

    Prova questo banale TS sul Dax a 15 minuti e vedrai che ci sono due giorni con 5 perdite complessive (giorno 8 ed 11 ottobre) invece di 3 (inserisco allegato).

    DEFPARAM CumulateOrders=False

    c1=close crosses over average[50]
    //—————————————————
    once nLoss = 0
    once tradeON = 1
    ONCE Dayx = 0
    nLossMax = 3
    if intradayBarIndex = 0 then
    Dayx = Dayx + 1
    IF Dayx > 2 OR tradeON = 0 THEN
    tradeON = 1
    nLoss = 0
    ENDIF
    endif
    if strategyProfit < strategyProfit[1] then
    nLoss=nLoss +1
    IF nLoss = nLossMax then
    tradeON = 0
    ENDIF
    endif
    //——————————————————–
    IF c1 and tradeOn and nLoss<nLossMax THEN
    BUY 1 CONTRACTS AT MARKET
    ENDIF
    //————————————————————-
    set stop %loss 0.3
    set target %profit 0.5
    //—————————————–

    Image-001-1.jpg Image-001-1.jpg
    #180118 quote
    robertogozzi
    Moderator
    Master

    Adesso l’ho provato e funziona:

    DEFPARAM CumulateOrders=False
    c1=close crosses over average[50]
    //—————————————————
    once nLoss    = 0
    once tradeON  = 1
    ONCE Day2     = 0
    ONCE Day1     = 0
    ONCE nLossMax = 3
    if intradayBarIndex = 0 then
       Day2    = Day1
       Day1    = 0
       tradeON = 1
    endif
    if strategyProfit < strategyProfit[1] then
       Day1 = Day1 + 1
       IF (Day2 + Day1) = nLossMax then
          tradeON = 0
       ENDIF
    endif
    //——————————————————-
    IF c1 and tradeOn and nLoss<nLossMax THEN
       BUY 1 CONTRACTS AT MARKET
    ENDIF
    //————————————————————-
    set stop   %loss   0.3
    set target %profit 0.5
    //—————————————-

    Ogni nuovogiorno ripristino l’operatività (tradeON = 1). Se vuoi puoi anche stabilire una diversa condizione per ripartire, magari attendere un’intera giornata, ecc…

    MauroPro thanked this post
    #180131 quote
    MauroPro
    Participant
    Veteran

    Perfetto ora funziona. Si potrebbe inserire il codice nell’elenco degli snippets.

    Una cosa al volo: è possibile avere uno spessore in drawBarChart?

    drawBarChart(open,high,low,close) coloured(0,0,255)

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

Modifica codice perdite complessive


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
MauroPro @mauropro Participant
Summary

This topic contains 18 replies,
has 2 voices, and was last updated by MauroPro
4 years, 3 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 10/18/2021
Status: Active
Attachments: 3 files
Logo Logo
Loading...