Modifica codice perdite complessive

Viewing 15 posts - 1 through 15 (of 19 total)
  • Author
    Posts
  • #179845 quote
    MauroProMauroPro
    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
    robertogozzirobertogozzi
    Moderator
    Legend

    Prova a cambiare le righe 3-5 con queste:

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

    Non funziona.

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

    #179925 quote
    MauroProMauroPro
    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
    robertogozzirobertogozzi
    Moderator
    Legend

    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
    MauroProMauroPro
    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
    robertogozzirobertogozzi
    Moderator
    Legend

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

    #179964 quote
    MauroProMauroPro
    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
    robertogozzirobertogozzi
    Moderator
    Legend

    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
    MauroProMauroPro
    Participant
    Veteran

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

    #179983 quote
    robertogozzirobertogozzi
    Moderator
    Legend

    Questo va con 2 giorni.

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

    #179984 quote
    MauroProMauroPro
    Participant
    Veteran

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

    #180005 quote
    MauroProMauroPro
    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
    robertogozzirobertogozzi
    Moderator
    Legend

    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
    MauroProMauroPro
    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.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

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 MauroProMauroPro
4 years, 11 months ago.

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