Entrata ritardata

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

    Salve a tutti, avrei la necessità, gentilmente, di sapere come fare per rendere valida una condizione ad esempio fino a un massimo di 5 candele.

    Vi posto un esempio della strategia: prima condizione incrocio del macd ad 1 ora a rialzo, quindi, come seconda condizione io entro effettivamente a rialzo solo se supero il max degli ultimi 10 periodi. La condizione di entrata deve valere per un massimo di 5 candele successive, poi decade tutto e si aspetta un nuovo segnale.

    Mi potete aiutare?

    #46082 quote
    robertogozzi
    Moderator
    Master

    Prova questo, dovrebbe funzionare, se ho ben capito la tua richiesta:

    DEFPARAM CumulateOrders = False
    ONCE TradeOn            = 0             //inizializzazione variabile
    IF OnMarket THEN
       TradeOn = 0                          //una volta a mercato azzerare la variabile
    ENDIF
    MacdVal = MACD[14,26,9]                 //valore del MACD
    IF MacdVal CROSSES OVER 0 THEN          //se incrocia al rialzo....
       TradeOn = 1                          //...settare la variabile per tradare e...
       TopHigh = highest[10](high)          //...salvare il massimo delle ultime 10 candele.
    ELSIF MacdVal CROSSES UNDER 0 THEN
       TradeOn = 0                          //Se il MACD torna sotto lo 0, annullare tutto
    ENDIF
    
    IF summation[5](MacdVal > 0) > 5 THEN   //se il MACD è sopra lo 0 da oltre 5 candele...
       TradeOn = 0                          //...annullare e ripartire da zero.
    ENDIF
    IF close > TopHigh AND TradeOn THEN     //Se condizioni soddisfatte aprire il trade
       BUY 1 CONTRACT AT MARKET
    ENDIF
    #46117 quote
    R05
    Participant
    Veteran

    Gent.mo Roberto ti ringrazio della risposta. Tendenzialmente fa ciò che chiedo, solo che la prima cosa che ho notato è che in alcuni casi anche se le condizioni (macd + superamento ultimo massimo) sono soddisfatte, non mi fa entrare subito ma anche dopo 5 candele (immagine1); in altri casi non mi fa nemmeno entrare nonostante le condizioni (immagine2); mentre poi c’è un’entrata apparentemente senza setup (immagine1).

    Vorrei premettere che ho modificato il tuo codice per fare anche lo short e per uscire dalla posizione long quando il macd incrocia a ribasso e viceversa per le operazioni short. Quindi, non so se modificando io qualcosa ho cambiato anche le basi del tuo codice. Comunque lo allego in modo da capire se ho fatto qualcosa di sbagliato. Ho sostituito per l’entrata at market con tophigh perchè, cosa che mi era sfuggita prima, l’entrata è al superamento del massimo/minimo a 10 candele.

    DEFPARAM CumulateOrders = False
    defparam flatbefore = 010000
    defparam flatafter = 220000
    
    ONCE TradeOn            = 0             //inizializzazione variabile
    IF OnMarket THEN
    TradeOn = 0                          //una volta a mercato azzerare la variabile
    ENDIF
    
    // Condizioni per entrare long
    MacdVal = MACD[14,26,9]                 //valore del MACD
    IF MacdVal CROSSES OVER 0 THEN          //se incrocia al rialzo....
    TradeOn = 1                          //...settare la variabile per tradare e...
    TopHigh = highest[10](high)          //...salvare il massimo delle ultime 10 candele.
    ELSIF MacdVal CROSSES UNDER 0 THEN
    TradeOn = 0                          //Se il MACD torna sotto lo 0, annullare tutto
    ENDIF
     
    IF summation[5](MacdVal > 0) > 5 THEN   //se il MACD è sopra lo 0 da oltre 5 candele...
    TradeOn = 0                          //...annullare e ripartire da zero.
    ENDIF
    IF TradeOn THEN     //Se condizioni soddisfatte aprire il trade
    BUY 1 CONTRACT AT tophigh stop
    ENDIF
    
    // Condizioni per uscire da posizioni long
    indicator3 = MACDline[12,26,9](close)
    indicator4 = ExponentialAverage[9](indicator3)
    c2 = (indicator3 CROSSES UNDER indicator4)
    
    IF c2 THEN
    SELL AT MARKET
    ENDIF
    
    // Condizioni per entrare short
    MacdVal = MACD[14,26,9]                 //valore del MACD
    IF MacdVal CROSSES UNDER 0 THEN          //se incrocia al ribasso....
    TradeOn = 1                          //...settare la variabile per tradare e...
    TopLow = lowest[10](low)          //...salvare il minimo delle ultime 10 candele.
    ELSIF MacdVal CROSSES OVER 0 THEN
    TradeOn = 0                          //Se il MACD torna sopra lo 0, annullare tutto
    ENDIF
     
    IF summation[5](MacdVal < 0) > 5 THEN   //se il MACD è sotto lo 0 da oltre 5 candele...
    TradeOn = 0                          //...annullare e ripartire da zero.
    ENDIF
    IF TradeOn THEN     //Se condizioni soddisfatte aprire il trade
    SELLSHORT 1 CONTRACT AT toplow stop
    ENDIF
    
    // Condizioni per uscire da posizioni short
    indicator7 = MACDline[12,26,9](close)
    indicator8 = ExponentialAverage[9](indicator7)
    c4 = (indicator7 CROSSES OVER indicator8)
    
    IF c4 THEN
    EXITSHORT AT MARKET
    ENDIF
    
    #46132 quote
    robertogozzi
    Moderator
    Master

    Ho trovato un errore di logica, sostituisci la riga 19 con:

    IF summation[6](MacdVal > 0) = 6 THEN  //dopo la 5a barra annullare

    e la riga 44 con:

    IF summation[6](MacdVal < 0) = 6 THEN //dopo la 5a barra annullare

    poi fammi sapere.

    #46135 quote
    R05
    Participant
    Veteran

    Grazie della risposta. Purtroppo il problema persiste. Riprendendo l’immagine 1 che ho postato prima, ad esempio quelle due operazioni le fa comunque fare.

    #46141 quote
    robertogozzi
    Moderator
    Master

    Il problema logico era che usi sempre la stessa variabile, sia per i LONG che per gli SHORT, andava bene per i soli LONG, altrimenti va usata un’ulteriore variabile per differenziarli.

    Ho aggiunto TradeOnL e MacdValL (dove L sta per LONG), il resto è invariato:

    DEFPARAM CumulateOrders = False
    defparam flatbefore = 010000
    defparam flatafter  = 220000
     
    ONCE TradeOnL           = 0             //inizializzazione variabile
    ONCE TradeOn            = 0             //inizializzazione variabile
    IF OnMarket THEN
       TradeOnL = 0                          //una volta a mercato azzerare la variabile
       TradeOn  = 0                          //una volta a mercato azzerare la variabile
    ENDIF
     
    // Condizioni per entrare long
    MacdValL = MACD[14,26,9]                 //valore del MACD
    IF MacdValL CROSSES OVER 0 THEN          //se incrocia al rialzo....
       TradeOnL = 1                          //...settare la variabile per tradare e...
       TopHigh = highest[10](high)          //...salvare il massimo delle ultime 10 candele.
    ELSIF MacdValL CROSSES UNDER 0 THEN
       TradeOnL = 0                          //Se il MACD torna sotto lo 0, annullare tutto
    ENDIF
     
    IF summation[6](MacdValL > 0) = 6 THEN   //se il MACD è sopra lo 0 da oltre 5 candele...
       TradeOnL = 0                          //...annullare e ripartire da zero.
    ENDIF
    IF TradeOnL THEN     //Se condizioni soddisfatte aprire il trade
       BUY 1 CONTRACT AT tophigh stop
    ENDIF
     
    // Condizioni per uscire da posizioni long
    indicator3 = MACDline[12,26,9](close)
    indicator4 = ExponentialAverage[9](indicator3)
    c2 = (indicator3 CROSSES UNDER indicator4)
     
    IF c2 THEN
       SELL AT MARKET
    ENDIF
     
    // Condizioni per entrare short
    MacdVal = MACD[14,26,9]                 //valore del MACD
    IF MacdVal CROSSES UNDER 0 THEN          //se incrocia al ribasso....
       TradeOn = 1                          //...settare la variabile per tradare e...
       TopLow = lowest[10](low)          //...salvare il minimo delle ultime 10 candele.
    ELSIF MacdVal CROSSES OVER 0 THEN
       TradeOn = 0                          //Se il MACD torna sopra lo 0, annullare tutto
    ENDIF
     
    IF summation[6](MacdVal < 0) = 6 THEN   //se il MACD è sotto lo 0 da oltre 5 candele...
       TradeOn = 0                          //...annullare e ripartire da zero.
    ENDIF
    IF TradeOn THEN     //Se condizioni soddisfatte aprire il trade
       SELLSHORT 1 CONTRACT AT toplow stop
    ENDIF
     
    // Condizioni per uscire da posizioni short
    indicator7 = MACDline[12,26,9](close)
    indicator8 = ExponentialAverage[9](indicator7)
    c4 = (indicator7 CROSSES OVER indicator8)
     
    IF c4 THEN
        EXITSHORT AT MARKET
    ENDIF

    Prova così, dovrebbe funzionare.

    Nicolas thanked this post
    #46149 quote
    R05
    Participant
    Veteran

    Si grande tutto ok. Funziona perfettamente e fa quello che volevo. Grazie tantissimo. Gentilissimo.

    #46669 quote
    R05
    Participant
    Veteran

    Gent.mo Roberto oggi ho notato che il sistema, montato sul DAX,  si è interrotto automaticamente apparentemente senza motivo. Ti premetto che ho diversi sistemi che girano sul DAX stesso. Ho pensato, tra le possibili cause, che questo sistema si interrompe qualora ha il setup long ma è già aperta una posizione long con un altro sistema. Potrebbe essere? Mi aiuteresti a capire?

    #46677 quote
    robertogozzi
    Moderator
    Master

    Immagino (e spero) sia sul demo.

    Purtroppo non c’è molto da capire, è già capitato a me ed altri, anche lunedì e su ben 3 strategie. Sembra sia un problema relativo ai soli conti demo (ma certamente questa cosa non lascia molto tranquilli) in quanto IG e PRT fanno spesso prove magari con modifiche del loro software e può capitare che mandino in tilt il sistema.

    Hanno assicurato, anche me via customer care, che in reale ciò non può accadere.

    In pratica si tratta quasi sempre del fatto che un ordine, di entrata o di stop ecc… non riesca ad essere eseguito entro un certo lasso di tempo.

    Probabilmente non è un grosso problema, se lo desisderi (ed è anche un modo per fargli presente il disguido) puoi chiedergli spiegazioni attraverso il customer care del broker.

    #46679 quote
    R05
    Participant
    Veteran

    Ok grazie, comunque era in reale. Proverò a vedere cosa dicono. Grazie.

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

Entrata ritardata


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
R05 @r05 Participant
Summary

This topic contains 9 replies,
has 2 voices, and was last updated by R05
8 years, 4 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 09/12/2017
Status: Active
Attachments: 2 files
Logo Logo
Loading...