Trailing stop con i canali di donchian

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #190455 quote
    KAMJKAZEKAMJKAZE
    Participant
    Junior

    salve a tutti,

    grazie all’aiuto di Roberto Gozzi ho scritto una versione di trailing stop che sfrutta i canali di Donchian per seguire il prezzo.

    il funzionamento è il seguente: per essere attivato il trailing stop su un trade long è necessario che sia il close che il canale di donchian inferiore sia sopra il prezzo di entrata;

    successivamente lo stop segue il canale di donchian inferiore.

    per la versione short il meccanismo è l’opposto.

    Siccome alcune volte i canali di Donchian si avvicinano troppo al prezzo sforando al distanza minima di stop, è stata aggiunta una distanza minima per lo stop stesso, onde evitare che una strategia possa fallire.

    allego il codice, sia per chi volesse usarlo o prenderne spunto

    saluti a tutti

    //resetting variables when no trades are on market
    
    DONKYDOWN=DonchianChannelDown[5]
    DONKYUP=DonchianChannelUp[5]
    distance=6
    if not onmarket then
    NEWSL = 0
    endif
    
    //case SHORT order
    if shortonmarket AND NEWSL=0 then
    IF CLOSE<TRADEPRICE(1) AND DONKYDOWN<TRADEPRICE(1)  THEN
    NEWSL= DONKYUP*PIPSIZE
    ENDIF
    ENDIF
    IF NEWSL>0 AND CLOSE<NEWSL  AND DONKYUP<DONKYUP[1] THEN
    NEWSL= DONKYUP*PIPSIZE
    ENDIF
    
    
    //case LONG order
    if LONGONMARKET AND NEWSL=0 then
    IF CLOSE>TRADEPRICE(1) AND DONKYDOWN>TRADEPRICE(1)  THEN
    NEWSL= DONKYDOWN*PIPSIZE
    ENDIF
    ENDIF
    IF NEWSL>0 AND CLOSE>NEWSL AND DONKYDOWN>DONKYDOWN[1] THEN
    NEWSL=DONKYDOWN*PIPSIZE
    ENDIF
    
    
    //exit on trailing stop price levels
    if newSL>0 then
    if longonmarket then
    if (close-distance)>newSL then
    sell at newsl stop
    elsif(close+distance)<newsl then
    sell at newsl limit
    else
    sell at market
    endif
    elsif shortonmarket then
    if (close+distance)< newsl then
    exitshort at newsl stop
    elsif (close-distance)>newsl then
    exitshort at newsl limit
    else
    exitshort at market
    endif
    endif
    endif
    

     

    , sia per chi volesse contribuire a migliorarlo.

    Nicolas thanked this post
    #190516 quote
    robertogozzirobertogozzi
    Moderator
    Legend

    Ho tolto PIPSIZE dove lo avevi messo e l’ho aggiunto alla distanza; ho anche aggiunto la verifica che il nuovo stop loss venga aggiornato solo se maggiore (se Long) o minore (se Short) del precedente:

    //resetting variables when no trades are on market
     
    DONKYDOWN = DonchianChannelDown[5]
    DONKYUP   = DonchianChannelUp[5]
    distance  = 6 * PipSize
    if not onmarket then
       NEWSL = 0
    endif
     
    //case SHORT order
    if shortonmarket AND NEWSL=0 then
       IF CLOSE<TRADEPRICE(1) AND DONKYDOWN<TRADEPRICE(1)  THEN
          NEWSL= DONKYUP
       ENDIF
    ENDIF
    IF NEWSL>0 AND CLOSE<NEWSL  AND DONKYUP<DONKYUP[1] THEN
       NEWSL = max(NEWSL,DONKYUP)
    ENDIF
     
    //case LONG order
    if LONGONMARKET AND NEWSL=0 then
       IF CLOSE>TRADEPRICE(1) AND DONKYDOWN>TRADEPRICE(1)  THEN
          NEWSL= DONKYDOWN
       ENDIF
    ENDIF
    IF NEWSL>0 AND CLOSE>NEWSL AND DONKYDOWN>DONKYDOWN[1] THEN
       NEWSL = min(NEWSL,DONKYDOWN)
    ENDIF
    
    //exit on trailing stop price levels
    if newSL>0 then
       if longonmarket then
          if (close-distance)>newSL then
             sell at newsl stop
          elsif (close+distance)<newsl then
             sell at newsl limit
          else
             sell at market
          endif
       elsif shortonmarket then
          if (close+distance)< newsl then
             exitshort at newsl stop
          elsif (close-distance)>newsl then
             exitshort at newsl limit
          else
             exitshort at market
          endif
       endif
    endif

    Ti riepilogo l’uso di PIPZISE:

    a) serve per fare in modo che certi calcoli tra pips (punti) e prezzi valgano per ogni strumento, che abbia un rapporto prezzo/pip di 1:1 (come il DAX ed altri indici), oppure 1:100 (come Aud/Jpy) o 1:10000 (come Eur/Usd), in quanto fa si che sia la piattaforma ad eseguire le dovute conversioni. Sommare 1 al prezzo del DAX, ad esempio 14000, da come risultato 14001 (rapporto 1:1), mentre lo stesso 1 aggiunto ad Eur/Usd, diciamo 1.0980, darebbe come risultato 2.0980, se lo sottrai darebbe 0.0980, prezzi inarrivabili!!!
    b) differenza di prezzo / pipsize = differenza in punti/pips (es. Eur/Usd, 0.0135 diventano 135 punti) si usa per convertire un prezzo, o una differenza espressa comunque sotto forma di prezzo, in PIP/PUNTI
    c) differenza di punti * pipsize = differenza in prezzo (es. Eur/Usd, 18 punti diventano 0.0018 di prezzo) si usa per convertire PIPS/PUNTI in prezzo o differenza di prezzo (ad esempio se il RANGE è di 0.0035, RANGE*PipSize lo converte in 35 Pips/Punti).

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

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

Trailing stop con i canali di donchian


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
KAMJKAZE @kamjkaze Participant
Summary

This topic contains 1 reply,
has 2 voices, and was last updated by robertogozzirobertogozzi
4 years, 6 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 03/25/2022
Status: Active
Attachments: No files
ProRealCode ProRealCode
Loading...