Massimi e minimi specifici

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

    Gent.mi, nell’implementare la strategia tortle soup, vorrei prendere in considerazione un precedente minimo e massimo ad esempio a 20 periodi ma che sia esso stesso un massimo ad esempio a 10 candele (cioè una volta considerato il massimo precedente a 20 periodi questo deve essere il massimo delle sue 10 sue candele precedenti). Vi allego un esempio (file esempio).

    Di seguito anche un trading system che ho scritto il quale però, come si vede nell’esempio 2, mi prende tutti i max e min precedenti a 20 periodi senza tener conto se questi a loro volta siano dei max o min a ulteriori 10 periodi.

    DEFPARAM CumulateOrders = False
     
    n = 1
     
    // Condizioni per aprire una posizione long
    c1 = low < lowest[20](low)[1]
    ctime = time > 060000 and time < 220000
     
    IF c1 AND ctime THEN
    BUY n CONTRACT AT lowest[20](low)[1] + 1 stop
    ENDIF
     
    // Condizioni per uscire da una posizione long
    c2 = low < lowest[5](low)[1]
     
    IF c2 THEN
    sell AT MARKET
    ENDIF
     
    // Condizioni per aprire una posizione short
     
    c1 = high > highest[20](high)[1]
    ctime = time > 060000 and time < 220000
     
    IF c1 AND ctime THEN
    SELLSHORT n CONTRACT AT highest[20](high)[1] - 1 stop
    ENDIF
     
    // Condizioni per uscire da una posizione di vendita
    c3 = high > highest[5](high)[1]
     
    IF c3 THEN
    exitshort AT MARKET
    ENDIF
    
    // Stop e target
     
    IF close > open THEN               //LONG
    MinLow   = low
    StopLoss = low - 2  //2 pips sotto il minimo
    ELSE                               //SHORT
    MaxHigh  = high
    StopLoss = high + 2 //2 pips sopra il massimo
    ENDIF
     
     
    SET STOP PLOSS StopLoss
     
     
    IF LongOnMarket THEN         //per i LONG
    IF low > MinLow THEN      //verificare che sia un MINIMO più alto
    MinLow = Low           //aggiornare la variabile
    ENDIF
    SELL AT MinLow - 2 STOP       //aggiornare l'ordine di STOP ad ogni candela
    ENDIF
    IF ShortOnMarket THEN        //per gli SHORT
    IF high < MaxHigh THEN    //verificare che sia un MASSIMO più basso
    MaxHigh = high         //aggiornare la variabile
    ENDIF
    EXITSHORT AT MaxHigh + 2 STOP //aggiornare l'ordine di STOP ad ogni candela
    ENDIF
    
    esempio.jpg esempio.jpg esempio2.jpg esempio2.jpg
    #113750 quote
    robertogozzi
    Moderator
    Master

    Devi mettere, dopo la riga 6 e la riga 22 un ciclo FOR…NEXT che vada indietro a vedere se prima di quel minimo/massimo ce n’erano altri.

    #113752 quote
    robertogozzi
    Moderator
    Master

    Puoi sostituire la riga 6 con queste:

    Minimo = lowest[20](low)[1]
    c1 = low < Minimo
    FOR i = 1 TO 20
       IF low[i] = Minimo THEN
          FOR j = i + 1 TO i + 11
             IF Minimo <= low[j] THEN
                c1 = 0
             ENDIF
          NEXT
          Break
       ENDIF
    NEXT

    e la riga 22 con queste:

    Massimo = highest[20](high)[1]
    c1 = high < Massimo
    FOR i = 1 TO 20
       IF high[i] = Massimo THEN
          FOR j = i + 1 TO i + 11
             IF Massimo >= high[j] THEN
                c1 = 0
             ENDIF
          NEXT
          Break
       ENDIF
    NEXT

    non l’ho provato.

    #113759 quote
    R05
    Participant
    Veteran

    Ok grazie Roberto, ho provato ad aggiungere le seguenti righe, ma nulla. Non riesco a risolvere.

    newlowest=0
    FOR a = 0 TO 10 DO
    IF low[a]>Newlowest or Newlowest=0 THEN
    Newlowest = low[a]
    ENDIF
    NEXT
    #113762 quote
    R05
    Participant
    Veteran

    scusa Roberto ho scritto dopo io senza aver visto il tuo ultimo messaggio. Ora lo provo

    #113764 quote
    R05
    Participant
    Veteran

    Si Roberto l’ho provato ma mi riduce di molto le operazioni e non fa quello che vorrei.

    #113787 quote
    robertogozzi
    Moderator
    Master

    I Massimi/Minimi ad almeno 10 candele di distanza li ha trovati?

    #113797 quote
    R05
    Participant
    Veteran

    Il sistema mi deve trovare il max/min a 20 periodi, e questo è ok. Però, questo max/min deve essere a sua volta il max/min delle 10 candele precedenti, e questo non lo fa: per fare un esempio sul daily: il 10 novembre ho un massimo degli ultimi 20 giorni ad esempio sul dax 13150 punti, prima condizione; poi, prima del 10 novembre per 10 giorni nessun massimo deve essere superiore ai 13150: allora le due condizioni sono rispettate. Se ad esempio il 5 novembre avessi avuto un massimo pari a 13160 superiore a quello del 10 novembre, la condizione non sarebbe più rispettata, quindi non si fa nulla.

    #113821 quote
    robertogozzi
    Moderator
    Master

    C’è un errore logico nei due esempi miei, la riga 6 del primo sostituiscila con:

    IF low[j] <= Minimo THEN

    e la riga 6 del secondo sostituiscila con:

    IF high[j] >= Massimo THEN

    prova adesso.

    #113831 quote
    R05
    Participant
    Veteran

    No Roberto ancora non fa quello che vorrei. Comunque dato che non capisco la logica che c’è dietro il codice “for …..next” ho provato a fare questo trading system, togliendo il lato long e concentrandomi solo sullo short, se non altro perchè è più facile lavorarci su.

    DEFPARAM CumulateOrders = False
     
    n = 1
     
    // Condizioni per aprire una posizione short
    ctime = time > 060000 and time < 220000
    
    a=highest[20]
    
    if high>a then
    if a>high[21] and a>high[22] and a>high[23] and a>high[24] and a>high[25] and a>high[26] then
    if ctime then
    SELLSHORT n CONTRACT AT market
    ENDIF
    endif
    endif
    
    // Condizioni per uscire da una posizione di vendita
    c4 = high > highest[5](high)[1]
     
    IF c4 THEN
    exitshort AT MARKET
    ENDIF
    
    // Stop e target
     
    IF close > open THEN               //LONG
    MinLow   = low
    StopLoss = low - 2  //2 pips sotto il minimo
    ELSE                               //SHORT
    MaxHigh  = high
    StopLoss = high + 2 //2 pips sopra il massimo
    ENDIF
     
     
    SET STOP PLOSS StopLoss
     
     
    IF LongOnMarket THEN         //per i LONG
    IF low > MinLow THEN      //verificare che sia un MINIMO più alto
    MinLow = Low           //aggiornare la variabile
    ENDIF
    SELL AT MinLow - 2 STOP       //aggiornare l'ordine di STOP ad ogni candela
    ENDIF
    IF ShortOnMarket THEN        //per gli SHORT
    IF high < MaxHigh THEN    //verificare che sia un MASSIMO più basso
    MaxHigh = high         //aggiornare la variabile
    ENDIF
    EXITSHORT AT MaxHigh + 2 STOP //aggiornare l'ordine di STOP ad ogni candela
    ENDIF
    

    Ho aggiunto questa stringa

    a=highest[20]
    
    if high>a then
    if a>high[21] and a>high[22] and a>high[23] and a>high[24] and a>high[25] and a>high[26] then
    if ctime then
    SELLSHORT n CONTRACT AT market
    ENDIF
    endif
    endif

    La logica che ho usato è questa:

    1. ammettiamo che a sia il massimo degli ultimi periodi
    2. se a (che può essere la candela 12 o la 15 o la 17 ecc.) è > del massimo della candela di 21 periodi fa, e anche del massimo delle candele di 22, 23, 24, 25 e 26 periodi fa allora è praticamente ok
    3. se high attuale è quindi maggiore di a (che ha rispettato a questo punto le due condizioni cioè essere il massimo a 20 periodi e anche lui stesso il massimo di altri periodi precedenti) allora mi apri lo short

    Ora, sembrerebbe che sia riuscito a risolvere il problema, a prima vista, però sono sopraggiunti due problemi che allego:

    1. nell’esempio 1, ma vale per tutti gli ingressi, l’entrata avviene 2 candele dopo il massimo attuale
    2. nell’esempio 2, onestamente non so cosa abbia fatto, perchè le entrate sono completamente sballate
    #113837 quote
    robertogozzi
    Moderator
    Master

    Io ho provato sui MINIMI (tanto sul massimo è lo stesso, basta cambiare certi valori) con questo indicatore e funziona:

    Minimo = lowest[20](low)[1]
    c1 = low < Minimo
    FOR i = 1 TO 20
       IF low[i] = Minimo THEN
          FOR j = i + 1 TO i + 11
             IF low[j] <= Minimo THEN
                c1 = 0
             ENDIF
          NEXT
          Break
       ENDIF
    NEXT
    IF c1 > 0 THEN
       DRAWSEGMENT(barindex - 30,Minimo,barindex,Minimo)
       DRAWARROWUP(barindex[i],Minimo - 10 * pipsize) coloured(0,255,0,255)
    ENDIF
    RETURN

    Il tuo codice può anche funzionare, ma è un caso, non puoi sapere in quale candela “a” è il massimo.

    L’unica cosa è il ciclo FOR…NEXT. La logica che c’è dietro mi sembra intuitiva, ripete tutte le istruzioni che ci sono tra la riga FOR e la riga NEXT per il numero di volte specificato, ad esempio 1 TO 20 ripete 20 volte tutte quelle istruzioni, anche 17 TO 36 le ripete 20 volte, il numero di partenza lo decidi tu in base alle tue esigenze. Se devi cercare tra 20 candele partendo dalla candela precedente 1 TO 20 è quello che devi usare, se vuoi cercare indietro, ad esempio 20 candele indietro partendo dalla 17 allora devi usare 17 TO 36. La variabile “i” è il contatore che, partendo dal valore iniziale, ti dice in quale punto del ciclo sei e viene automaticamente incrementato finché non raggiunge il massimo da te indicato. Quindi usandolo come indice tra parentesi quadre ti permette di fare riferimento ad un valore di quella specifica candela, se i vale 13, CLOSE[i] farà riferimento al prezzo di chiusuyra della 13esima candela precedente a quella corrente.

    #113860 quote
    R05
    Participant
    Veteran

    Si Roberto ho inserito il tuo codice ma accanto a DRAWSEGMENT  e DRAWARROWUP mi da errore. Ti allego il file.

    Cattura-1.jpg Cattura-1.jpg
    #113862 quote
    R05
    Participant
    Veteran

    No scusa Roberto ho rimesso il tuo codice precedente nel seguente trading system e sembra ok. Ora faccio altre prove e ti dico. Ho sicuramente sbagliato io, perchè mi sono accorto che avevo invertito, cioè la parte col minimo l’ho messo in sellshort e non in long e viceversa.

    DEFPARAM CumulateOrders = False
     
    n = 1
     
    // Condizioni per aprire una posizione long
    ctime = time > 060000 and time < 220000
    
    Minimo = lowest[20](low)[1]
    c1 = low < Minimo
    FOR i = 1 TO 20
    IF low[i] = Minimo THEN
    FOR j = i + 1 TO i + 11
    IF low[j] <= Minimo THEN
    c1 = 0
    ENDIF
    NEXT
    Break
    ENDIF
    NEXT
     
    IF c1 AND ctime THEN
    buy n CONTRACT AT market
    ENDIF
    
    
    // Condizioni per aprire una posizione lshort
    ctime = time > 060000 and time < 220000
    
    Massimo = highest[20](high)[1]
    c2 = high < Massimo
    FOR i = 1 TO 20
    IF high[i] = Massimo THEN
    FOR j = i + 1 TO i + 11
    IF high[j] <= Massimo THEN
    c2 = 0
    ENDIF
    NEXT
    Break
    ENDIF
    NEXT
     
    IF c2 AND ctime THEN
    sellshort n CONTRACT AT market
    ENDIF
    
    
    
    // Stop e target
     
    IF close > open THEN               //LONG
    MinLow   = low
    StopLoss = low - 2  //2 pips sotto il minimo
    ELSE                               //SHORT
    MaxHigh  = high
    StopLoss = high + 2 //2 pips sopra il massimo
    ENDIF
     
     
    SET STOP PLOSS StopLoss
     
     
    IF LongOnMarket THEN         //per i LONG
    IF low > MinLow THEN      //verificare che sia un MINIMO più alto
    MinLow = Low           //aggiornare la variabile
    ENDIF
    SELL AT MinLow - 2 STOP       //aggiornare l'ordine di STOP ad ogni candela
    ENDIF
    IF ShortOnMarket THEN        //per gli SHORT
    IF high < MaxHigh THEN    //verificare che sia un MASSIMO più basso
    MaxHigh = high         //aggiornare la variabile
    ENDIF
    EXITSHORT AT MaxHigh + 2 STOP //aggiornare l'ordine di STOP ad ogni candela
    ENDIF
    

    Ora provo un altro pò.

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

Massimi e minimi specifici


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
R05 @r05 Participant
Summary

This topic contains 12 replies,
has 2 voices, and was last updated by R05
6 years, 2 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 11/27/2019
Status: Active
Attachments: 3 files
Logo Logo
Loading...