Crossover Medie

Viewing 11 posts - 1 through 11 (of 11 total)
  • Author
    Posts
  • #89373 quote
    sharksteven
    Participant
    Average

    Buonasera a tutti, sto imparando a programmare e chiedo il vostro aiuto per riuscire a scrivere un codice su prorealtime.

    Vorrei impostare un trading system che acquisti se:

    se la media a 9 giorni crossa al rialzo la media a 16 giorni, vorrei memorizzare il massimo di quella candela come valore di interesse(chiamiamolo TRIGGER) per un eventuale ingresso futuro. Se nelle candele successive, mentre la media a 9 rimane sulla media a 16, la candela chiude con un valore maggiore del TRIGGER allora entro long altrimenti, aggiorno con i massimi delle nuove candele il valore del trigger.

    Mi riuscite ad aiutare? io da solo non riesco.

    Vi ringrazio tanto

    #89376 quote
    robertogozzi
    Moderator
    Master

    Quindi t’interessa solo la parte LONG, non lo Short?

    #89445 quote
    sharksteven
    Participant
    Average

    Ciao Roberto,

    in verità mi servirebbe anche lo short, ma magari capendo come farlo sul long, poi ci avrei provato a farlo per lo short 🙂

    grazie 1000 per l’aiuto.

    Diciamo che quello che non riesco proprio a fare è:

    al verificarsi della condizione di incrocio media, come memorizzare il massimo di quella candela per poterlo usare come valore utile nel caso in cui nelle candele successive il prezzo chiudesse oltre quel livello.

    #89464 quote
    robertogozzi
    Moderator
    Master

    Per memorizzare il massimo della candela basta che lo salvi in una variabile nel momento in cui l’incrocio avviene:

    MediaVeloce = average[9,0](close)
    MediaLenta  = average[16,0](close)
    // long
    IF MediaVeloce CROSSES OVER  MediaLenta THEN
       Massimo = high
       Minimo  = 0
    ENDIF
    // short
    IF MediaVeloce CROSSES UNDER MediaLenta THEN
       Minimo  = low
       Massimo = 999999
    ENDIF

    dopodiché con i due valori salvati, Massimo e Minimo ci fai quello che vuoi.

    Quando c’è un incrocio resetto il valore dell’altra variabile per evitare che possa essere aperto un trade contrario.

    #90509 quote
    sharksteven
    Participant
    Average

    Grazie per l’aiuto Roberto. Bene, ho capito ora con il tuo codice come “catturare” in una variabile il valore del prezzo in occasione dell’incrocio delle medie.

    Ora bisognerebbe aggiungere che:

    ipotizzando un incrocio di media al rialzo (situazione long), dopo essersi verificato l’incrocio della media e assegnato alla variabile MASSIMO il max della candela, il TS dovrebbe:

    se nelle candele successive avviene un CLOSE di candela oltre il valore MASSIMO, entrare LONG.       Invece se nelle candele successive si generano delle delle SPIKE DI CANDELA oltre il valore di MASSIMO queste dovrebbero aggiornare più in alto il valore di MASSIMO e non entrare LONG fino a che non si verificherà un CLOSE oltre il nuovo valore di MASSIMO.

    Ovviamente lo stesso ragionamento vale per lo short, sulla variabile MINIMO.

    Come potrei fare a codificare tutto ciò? io ho pensato ad un ciclo ma non riesco a scriverlo…

    Grazie per il tuo aiuto.

    #90510 quote
    robertogozzi
    Moderator
    Master

    Basta verificare che il prezzo di chiusura sia > Massimo ed aggiornare il Massimo se c’è uno spike:

    IF Massimo > 0 AND Massimo < 999999 THEN 
       Massimo = max(Massimo,high)
    ENDIF
    IF close > Massimo AND Not OnMarket THEN
       BUY 1  CONTRACT AT MARKET
    ENDIF

    viceversa per gli short.

    #92196 quote
    sharksteven
    Participant
    Average
    MediaVeloce = EXPONENTIALaverage[9](close)
    MediaLenta  = EXPONENTIALaverage[16](close)
    
    // long
    IF MediaVeloce CROSSES OVER  MediaLenta THEN
    Massimo = high
    Minimo  = 0
    ENDIF
    // short
    IF MediaVeloce CROSSES UNDER MediaLenta THEN
    Minimo  = low
    Massimo = 999999
    ENDIF
    
     
    IF Massimo > 0 AND Massimo < 999999 THEN
    Massimo = max(Massimo,high)
    ENDIF
    
    IF close > Massimo AND Not LONGOnMarket THEN
    BUY 1  CONTRACT AT MARKET
    ENDIF
    
    IF Minimo > 0 and Minimo < 999999 THEN
    Minimo = min(Minimo,low)
    ENDIF
    
    IF Close < Minimo and NOT SHORTONMARKET THEN
    SELL 1 CONTRACT AT MARKET
    ENDIF
    

     

    Ciao Roberto, ho provato a mettere tutto il codice insieme ed ho inserito il pezzo per lo short, ma devo aver sbagliato qualcosa? Quando lo backtesto non compare neanche un operazione. Come mai accade? Grazie 1000

    #92197 quote
    sharksteven
    Participant
    Average

    credo di aver capito che non andasse bene il valore “999999” alla riga 12

    #92198 quote
    robertogozzi
    Moderator
    Master

    No, il problema non è li, è alla 17, perché se aggiorni continuamente Massimo, CLOSE alla riga 20 non potrá mai essere naggiore al suo massimo.

    Prova a spostare le righe 16-18 alla fine, dopo la 30.

    sharksteven thanked this post
    #92668 quote
    sharksteven
    Participant
    Average

    Ottimo Suggerimento, cosi facendo ed aggiungendo le condizioni short, sul giornaliero comincia a diventare interessante.

    A questo punto mi potresti aiutare nell’inserire delle regole di money managment? tipo dei target e dei traling stop che liquidino magari metà posizione ad un certo prezzo e mettano lo stop in pari per evitare perdite e lasciar correre il guadagno con altra metà posizione?

    GRAZIE

    MediaVeloce = EXPONENTIALaverage[9](close)
    MediaLenta  = EXPONENTIALaverage[25](close)
    // long
    IF MediaVeloce CROSSES OVER  MediaLenta THEN
    Massimo = high
    GRAPHONPRICE Massimo as "Massimo"
    Minimo  = 0
    ENDIF
    // short
    IF MediaVeloce CROSSES UNDER MediaLenta THEN
    Minimo  = low
    GRAPHONPRICE Massimo as "Minimo"
    Massimo = 999999
    ENDIF
    
    IF close > Massimo AND Not LONGOnMarket THEN
    BUY 1  CONTRACT AT MARKET
    ENDIF
     
    IF Close < Minimo and NOT SHORTONMARKET THEN
    SELL 1 CONTRACT AT MARKET
    ENDIF
    
    IF close < Minimo AND Not ShortOnMarket THEN
    SELLSHORT 1  CONTRACT AT MARKET
    ENDIF
     
    IF Close > Massimo and NOT LongONMARKET THEN
    EXITSHORT 1 CONTRACT AT MARKET
    ENDIF
    
    IF Minimo > 0 and Minimo < 999999 THEN
    Minimo = min(Minimo,low)
    ENDIF
     
    IF Massimo > 0 AND Massimo < 999999 THEN
    Massimo = max(Massimo,high)
    ENDIF
    
    TS.jpg TS.jpg
    #92673 quote
    robertogozzi
    Moderator
    Master

    Per il momento non è possibile chiudere una posizione in modo parziale, tutto o niente! Dovrebbe cambiare con la nuova versione 11 che arriverà questo mese o il prossimo.

    Cercando la parola BREAKEVEN ho trovato, tra fli altri, questo codice di Nicolas https://www.prorealcode.com/blog/learning/breakeven-code-automated-trading-strategy/.

    Cercando TRAILING STOP ho trovato, sempre tra i molti esempi, questo codice, sempre di Nicolas https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/.

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

Crossover Medie


ProOrder: Trading Automatico & Backtesting

New Reply
Author
Summary

This topic contains 10 replies,
has 2 voices, and was last updated by robertogozzi
6 years, 11 months ago.

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