Anomalia nell'esecuzione del codice

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #138659 quote
    effegi
    Participant
    Average

    Salve, ho creato questo semplice codice con una strategia in prova (in questo caso sostituita con un semplice incrocio di medie mobili) che  prende posizioni buy/sell in modalità Stop & Reverse. L’operatività è limitata ad una fascia oraria, e termina al raggiungimento di un obiettivo giornaliero o al raggiungimento di un loss massimo daily.

    La cosa strana, è che quando l’ultima operazione che dovrebbe terminare la strategia per “obiettivo raggiunto” è un operazione short, anzichè arrestarsi viene inserita ugualmente un’ultima operazione long (mentre non capita viceversa). Invertendo nel programma la parte di codice  che gestisce l’entry long dall’entry short, naturalmente capita il contrario. (spero di essere riuscito a spiegarmi…nello screeshot è più chiaro)

    Ho già fatto numerosi esperimenti spostando le righe StrategyONL e StrategyONS in diversi punti del codice, ma non riesco a trovare una soluzione…. probabilmente sbaglio qualcosa che non riesco a capire

    La cosa assurda è che nonostante l’obiettivo sia stato raggiunto e il paramentro StrategyONL sia a zero (vedi screeshot di esempio) la parte di codice per entrare long viene eseguito ugualmente ancora una volta.

    Grazie a chiunque riesca a darmi una spiegazione e a suggerirmi le modifiche da effettuare.

    Fabrizio

    (spero di aver inserito correttamente il codice)

    DEFPARAM CumulateOrders = false // Posizioni cumulate disattivate
    DEFPARAM PRELOADBARS = 2000
    //DEFPARAM FLATBEFORE = 070000
    DEFPARAM FLATAFTER = 220000
    orainizio = 070000 // HHMMSS
    orafine = 220000 //HHMMSS
    ObiettivoDay = 10 //obiettivo cumulativo daily in punti x chiudere la strategia
    Maxlossday = 200 // eventuale max loss cumulativo daily x chiudere la strategia - mettere 10000 per disattivare
    CNTR = 1 //numero di contratti per posizione
    
    
    //fascia oraria x inserimento operazioni
    if time>orainizio and time <orafine then
    fasciaoraria=1
    else
    fasciaoraria=0
    endif
    //azzeramento variabili daily
    if time => orainizio and time <orainizio+200 then
    gainday=0
    countoperDay=0
    endif
    //indicatori
    mm1=average[20](close)
    mm2=average[100](close)
    
    If mm1>mm2 then
    direction = 1
    endif
    If mm1<mm2 then
    direction = -1
    endif
    
    /////////////////
    //Condizioni per entrare su posizioni long
    EL1 = (direction crosses over 0.5)  and fasciaoraria=1 and StrategyONL
    UL1 = direction=-1
    
    IF NOT longonmarket and EL1 = 1 THEN
    BUY CNTR CONTRACT AT MARKET
    mementryL=close
    CountOperDay=CountOperDay+1
    ENDIF
    
    IF longonmarket and UL1 = 1 THEN
    SELL AT MARKET
    memexitL=close
    gainparz=memexitL-mementryL
    gainday=gainday+gainparz
    ENDIF
    StrategyONS = fasciaoraria=1 and gainday<ObiettivoDay and gainday>-Maxlossday
    /////////////////
    //Condizioni per entrare su posizioni short
    ES1 = (direction crosses under -0.5)  and fasciaoraria=1 and StrategyONS
    US1 = direction=1
    
    IF NOT shortonmarket and ES1 = 1 THEN
    SELLSHORT CNTR CONTRACT AT MARKET
    mementryS=close
    CountOperDay=CountOperDay+1
    ENDIF
    
    IF shortonmarket and US1 = 1 THEN
    EXITSHORT AT MARKET
    memexitS=close
    gainparz=mementryS-memexitS
    gainday=gainday+gainparz
    ENDIF
    StrategyONL = fasciaoraria=1 and gainday<ObiettivoDay and gainday>-Maxlossday
    
    //visualizzazione indicatori
    graph gainday coloured (0,0,200) as "Guadagno_Giorno"
    graph CountOperDay coloured (0,0,10) as "Operazioni_Daily"
    graph StrategyONS
    graph StrategyONL
    
    Annotazione-2020-07-07-172652.png Annotazione-2020-07-07-172652.png
    #138675 quote
    robertogozzi
    Moderator
    Master

    A prima vista non hai inserito una riga equivalente alla 51 per i LONG.

    effegi thanked this post
    #138717 quote
    effegi
    Participant
    Average

    La riga equivalente alla 51 è la 69, ma il problema non era li, ora ho capito dove il codice mi “tradiva”: la riga 69 che avrebbe bloccato l’operazione LONG verrebbe calcolata sempre e solo dopo la 36, che comandava l’ingresso long (essendo operazioni in S&R, le operazioni avvengono simultaneamente, ma il codice è sempre…. sequenziale ovviamente! 🙂

    Ho cambiato legermente l’operazione di calcolo del GainDay aggiornandolo con il guadagno in corso (anche ad operazione short non ancora terminata) e ho risolto l’inghippo.

    Grazie per la risposta Roberto, sempre disponibilissimo.

    Buona giornata

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

Anomalia nell'esecuzione del codice


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
effegi @effegi Participant
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by effegi
5 years, 7 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 07/07/2020
Status: Active
Attachments: 1 files
Logo Logo
Loading...