Funzionamento Stop&Reverse

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #157893 quote
    MauroPro
    Participant
    Veteran

    Buongiono, vorrei sapere come Prt usa lo stop and reverse. A volte il programma non chiude una semplice operazione long (per esempio), con la chiusura del long ed apertura dello short, ma effettua tre operazioni, ossia oltre alla chiusura del long e all’apertura corretta dello short, nella stessa barra  ed alla stessa ora, lo richiude con un long che non capisco da dove scaturisce dato che in quel punto non ci sono condizioni long (infatti il ts era appena entrata short con lo stop&reverse), non ci sono stoploss, né orari di chiusura …[sono escluse posizioni cumulate]

    GRAZIE

    Allego immagine

    Image-002.jpg Image-002.jpg
    #157895 quote
    robertogozzi
    Moderator
    Master

    Non saprei, occorre il codice e le informazioni per ripetere le operazioni: strumento, TF, spread e capitale indicato.

    È strano, in effetti.

    #157896 quote
    MauroPro
    Participant
    Veteran

    Stò provando a scrivere un codice con vari indicatori, tra cui vorrei aggiungere in seguito anche il “tuo” supertrendinverso per delle uscite (lo vedrai nel codice) (questa bozza ha SOLO una semplice entrata ed uscita dato che aspetto ancora di risolvere le multientrate cLong-cLong2 dell’altro TOPIC

     

    CODICE: MNQXXXX (future micro Nasdaq)

    TIMEFRAME : 3 minuti

    SPREAD: da 0 ad 1 tick

    CAPITALE: Demo (10000 euro)

    DATI CARICATI: 10K (è ancora solo una bozza di trading system)

    DEFPARAM CumulateOrders=False
    //                                                                                                                DATETIME SETTING
    DEFPARAM Flatbefore = 001500
    DEFPARAM Flatafter = 215500
    limitHour = time<213000
    //Ctime = (time >=001500 and time<=215500)
    //------------------------------------------------------------------------------------
    trailingActivation = (close * 0.5 / 100) / pointsize
    trailingDelta = (close * 0.4 / 100) / pointsize
    // ---------------------------------------------------------------------------------------------------------------OSCILLATORS LIST:
    x=3 // 3 default                                                          PERFECT TREND Adaptation from Nicolas Code
    y=7 // 7 default
    H1 = Highest[x](high)
    L1  = Lowest[x](low)
    H2 = Highest[y](high)
    L2 =  Lowest[y](low)
    if high<H1 then
    Newhigh1=H1
    else
    Newhigh1=high
    endif
    if low>L1 then
    Newlow1=L1
    else
    Newlow1=low
    endif
    if high<H2 then
    Newhigh2=H2
    else
    Newhigh2=high
    endif
    if low>L2 then
    Newlow2=L2
    else
    Newlow2=low
    endif
    if close>LineBlu[1] then
    lineBlu=NewLow1
    else
    lineBlu=NewHigh1
    endif
    if close>LineRed[1] then
    lineRed=NewLow2
    else
    lineRed=NewHigh2
    endif
    Blue= close>LineBlu and close>LineRed
    GrayUp= close<LineBlu and close>LineRed
    Red= close<LineBlu and close<LineRed
    GrayDown= close>LineBlu and close<LineRed
    //-----------------------------------------------------------------------------------------------------------------------
    myMacd = exponentialaverage[12]-exponentialaverage[32]                  // My MACD &   Mauro Kama
    myMacdSignal = exponentialaverage[52](mymacd)
    myKama = AdaptiveAverage[20,2,30](mymacd)
    //-----------------------------------------------------------------------------------------------------------------------
    nPeriod = 10                                                           //CHANDE KROLL & Mauro Channel
    multiplier = 3
    atr = averageTrueRange[nPeriod]
    nPeriod2 = 20
    multiplier2 = 1.5
    stDev = std[nPeriod](abs(ckUp-ckDown))
    up = (Highest[nPeriod](high))- multiplier*atr
    down = (Lowest[nPeriod](low))+ multiplier*atr
    ckUp = Highest[nPeriod2](up)
    ckDown = Lowest[nPeriod2](down)
    ckZoneUp=max(ckUp,ckDown)
    ckZoneDown=min(ckUp,ckDown)
    ckPlus = typicalprice + multiplier2*stDev
    ckMinus = typicalprice - multiplier2*stDev
    //-----------------------------------------------------------------------------------------------------------------------------
    Multiplier     = 3                                                      //SUPERTREND INVERSO Roberto Gozzi
    Periods        = 10
    Multiplier       = Max(1,Min(999,Multiplier))
    Periods          = Max(1,Min(999,Periods))
    IF BarIndex > Max(Periods,Multiplier) THEN
    MyATR         = AverageTrueRange[Periods](close) * Multiplier
    BasicUPPER    = MedianPrice + MyATR
    BasicLOWER    = MedianPrice - MyATR
    IF (BasicUPPER < FinalUPPER[1]) OR (close[1] > FinalUPPER[1]) THEN
    FinalUPPER = BasicUPPER
    ENDIF
    IF (BasicLOWER > FinalLOWER[1]) OR (close[1] < FinalLOWER[1]) THEN
    FinalLOWER = BasicLOWER
    ENDIF
    IF (ST[1] = FinalUPPER[1]) AND (close <= FinalUPPER) THEN
    ST = FinalUPPER
    SX = FinalLOWER
    ELSE
    IF (ST[1] = FinalUPPER[1]) AND (close > FinalUPPER) THEN
    ST = FinalLOWER
    SX = FinalUPPER
    ELSE
    IF (ST[1] = FinalLOWER[1]) AND (close >= FinalLOWER) THEN
    ST = FinalLOWER
    SX = FinalUPPER
    ELSE
    IF (ST[1] = FinalLOWER[1]) AND (close < FinalLOWER) THEN
    ST = FinalUPPER
    SX = FinalLOWER
    ENDIF
    ENDIF
    ENDIF
    ENDIF
    ENDIF
    //-------------------------------------------------------------                                LISTA CONDIZIONI SINGOLE
    c1=close>ckZoneUp                                               //LONG
    c2=Blue
    c3=myMacd>=myKama
    
    d1=close<ckZOneDown                                             //SHORT
    d2=Red
    d3=myMacd<=myKama
    // ------------------------------------------------------------                               CONDIZIONI RAGGRUPPATE
    cLong=c1 and c2 and c3 and limitHour
    cShort=d1 and d2 and d3 and limitHour
    // ------------------------------------------------------------                               CONDIZIONI ENTRATA - USCITA
    IF  cLong  THEN
    BUY 1 CONTRACTS AT MARKET
    ENDIF
    //IF longOnMarket and  then
    //SELL 1 CONTRACTS AT MARKET
    //endif
    
    If cShort THEN
    SELLSHORT 1 CONTRACTS AT MARKET
    ENDIF
    //If shortOnMarket and  THEN
    //EXITSHORT 1 CONTRACTS AT MARKET
    //ENDIF
    //-------------------------------------------------------------                                TRAILING
    If not onmarket then
    MaxPrice=0
    MinPrice=close
    priceExit=0
    endif
    If longonmarket then
    MaxPrice=Max(MaxPrice,high)
    if MaxPrice-tradeprice(1)>trailingActivation*pointsize then
    priceExit=MaxPrice-trailingDelta*pointsize
    endif
    endif
    if shortonmarket then
    MinPrice=Min(MinPrice,low)
    if tradeprice(1)-MinPrice>trailingActivation*pointsize then
    priceExit=Minprice+trailingDelta*pointsize
    endif
    endif
    if onmarket and priceExit>0 then
    sell at priceExit STOP
    exitshort at priceExit STOP
    endif
    //--------------------------------------------------------------                               STOP LOSS AND TAKE PROFIT
    Set stop %loss 0.8
    
    #157926 quote
    robertogozzi
    Moderator
    Master

    Ho fatto un sacco di prove modificando DEFPARAM CumulateOrders, aggiungendo IF NotLongOnMarket e IF Not ShortOnMarket, ma non riesco a capire cosa faccia. Dopo l’uscita dal Long entra Short ed esce immediatamente per poi rientrare la barra successiva!

    Ho provato sulla vecchia versione 10.3 che, seppure ferma al 18 Dicembre come barre, funziona ancora regolarmente, si nota la chiusura dell’operazione in corso e la riapertura di quella contraria per lo Stop & Reverse. Sono due semplici operazioni, non 4!

    Devi aprire una richiesta d’assistenza con ProRealTime premendo Ctrl+M dalla piattaforma.

    Quando risponderanno sarebbe interessante se tu postassi la risposta in modo da condividere il problema e la soluzione.

    #157935 quote
    MauroPro
    Participant
    Veteran

    Grazie intanto per la risposta e per le prove. Confermo dalle prove tutto quello che hai scritto, un esempio: supponiamo che il Ts è long a X e deve uscire  in stop and reverse a Y, il comportamento corretto sarebbe chiudere il long ed entrare short (due operazioni su un barra ). Invece chiude il long con un exit, apre lo short (correttamente in quanto deve fare stop&reverse) e SUBITO richiude lo short con un long inspiegabile. Poi siccome permangono spesso le condizioni per lo short, dopo alcune barre riapre lo short (facendo in totale 4 operazioni al posto di due). Questo problema lo ho notato su diversi trading system, anche in quello relativo alle doppie condizioni compariva questo problema, ed era un altro Ts, quindi a questo punto dipende dalla versione 11. Per questo problema contatto l’assistenza e poi chiaramente posto la risposta sul forum.

    Per il problema sulle doppie condizioni sento l’assistenza ugualmente? oppure possiamo fare altre prove? Ti posso dire che nell’altro software la cosa era banale, si inventava un FLAG, esempio: position = 0 e si procedeva con:

    if position =0 and cLong then

    if position =1 and cLong1 then

    if position =0 and cShort then

    if posision =-1 and cShort2 then

    è possibile utilizzare dei flag simili  al posto di onMarket (che non abilita lo stop&reverse) oppure not longOnMarket in cLong2 e not shortOnMarket in cShort 2, che per inspiegabili motivi, abilitano sempre lo stop&reverse per tutte le condizioni?

    (poi chiaramente questi flag vanno resettati “penso”, probabilmente anche nel trailing mft. Pensi che come idea sia possibile e praticabile?

     

    GRAZIE

    #157937 quote
    robertogozzi
    Moderator
    Master

    Puoi usare IF CountOfLongShares = …. (per gli short CountOfShortShares), oppure anche CountOfPosition che è generuico ma devi usare ABS() perché per le posizioni Short restituisce valori negativi.

    #157940 quote
    MauroPro
    Participant
    Veteran

    E’ una funzione che ancora non conosco. Faccio delle prove, ma non sono sicuro di riuscire ad utilizzare queste funzioni correttamente nello stop&reverse con più condizioni di entrata\uscita.

    #157956 quote
    MauroPro
    Participant
    Veteran
    • Dato che hai controllato e nella versione 10.3 non ci sono problemi, sembra chiaro che sia un bug della versione 11. Ho scritto all’assistenza, appena rispondono posto il contenuto.
    • Per quanto riguarda la doppia entrata, mi “sembra”, dopo molte prove, di aver risolto con le funzioni CountOfLongShares e CountOfShortShares. Riporto il codice con insertPrt nel topic adeguato. Prova a controllare se ti sembra corretto. Grazie
    #158092 quote
    GraHal
    Participant
    Master

    Dubito che abbia a che fare con quello che avete discusso tu e Roberto, ma …

    La riga 53 può essere // fuori e non fa differenza per i risultati.

    myMacdSignal (alla riga 53) non è utilizzato da nessuna parte nel resto del codice e tuttavia non viene visualizzato con un messaggio di errore che dice … myMacdSignal non è utilizzato nel codice.

    #158094 quote
    MauroPro
    Participant
    Veteran

    Si ho visto, ma dato che non dà messaggio di  errore non ho usato: //

    Chiedo anche a te una cosa GraHal riportata nel  TOPIC “Funzionamento Stop&Reverse” : ti sono capitati nella versione 11 errori nello stop&Reverse”? (rispondi nel Topic indicato se hai informazioni utili)

    Grazie

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

Funzionamento Stop&Reverse


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
MauroPro @mauropro Participant
Summary

This topic contains 9 replies,
has 3 voices, and was last updated by MauroPro
5 years ago.

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