modifica livelli di stoploss e takeprofit da IG

Viewing 15 posts - 1 through 15 (of 19 total)
  • Author
    Posts
  • #254577 quote
    Alessandro Furlani
    Participant
    Junior

    Quando ho iniziato a far girare i miei robot su IG avevo letto l’avviso che IG poteva modificare arbitrariamente i livelli di SL e TP se questi fossero troppo vicini al prezzo di ingresso. Inizialmente non mi sono preoccupato perchè i miei livelli di SL e TP sono generalmente mai a meno di 2 – 3% dal prezzo, quindi al di sotto dei limiti citati da IG. Ma poi, nonostante questo, mi vedo ogni tanto modificare i livelli SL.

    Ovviamente la cosa non mi piace affatto perchè chi fa trading automatico, ha nel setup di SL e TP parte della sua strategia, quindi se qualcuno li modifica a cacchio di cane, la strategia salta.

    Si può evitare questa cosa ? Come ?

    GRazie

    #254589 quote
    Iván González
    Moderator
    Master

    Mi viene in mente di programmare lo stop loss manuale, invece di utilizzare l’istruzione nativa.
    Non l’ho provato ma forse funzionerà.

    defparam cumulateorders=false
    
    himax=highest[20]
    lomin=lowest[20]
    irange=himax-lomin
    
    
    if not onmarket and close crosses over himax[1] then
       stoploss=lomin
       takeprofit=himax+irange
       buy 1 contract at market
    //   set stop price stoploss
    //   set target price himax+irange
    endif
    
    if onmarket then
       sell at stoploss stop
       sell at takeprofit limit
    endif
    
    graphonprice himax coloured("blue")
    graphonprice lomin coloured("purple")
    graphonprice stoploss coloured("red")
    
    #254590 quote
    Alessandro Furlani
    Participant
    Junior

    E’ una idea che è venuta anche a me ma io lavoro con ordini multipli, con mql4 saprei come fare ma con PRT mi trovo in difficoltà perchè non è possibile caricare i dati degli ordini running. Tu come faresti ?

    #254591 quote
    robertogozzi
    Moderator
    Master

    Se hai più ordini non puoi fare chiusure STOP/LIMIT parziali.

    O li chiudi tutti, oppure devi gestirli manualmente, ma solo con ordini A MERCATO, quindi devi attendere la chiusura della candela e verificare se CLOSE (oppure High o Low, secondo le tue preferenze, ma con questi ultimi lo stop o target potrebbero essere stati toccati ma poi il prezzo potrebbe essere tornato indietro) abbia raggiunto quel prezzo e in quel caso uscire, anche con un’uscita parziale.

    #254593 quote
    Alessandro Furlani
    Participant
    Junior

    A me ve bene chiuderli tutti insieme ma come pensi di fare ? la tua spiegazione non mi è chiara….

    #254598 quote
    robertogozzi
    Moderator
    Master

    Usa

    SELL      AT StopPrice STOP   //LONG
    EXITSHORT AT StopPrice STOP   //SHORT
    #254607 quote
    Alessandro Furlani
    Participant
    Junior

    Che differenza c’è con altri metodi ? Sul manuale non trovo molto.

    Le istruzioni che hai postato chiudono TUTTI gli ordini Long e Short o solo la quantità indicata (che tu non hai indicato)

    Per il take profit ??

    Puoi farmi vedere un esempio di codice di un Proorder che li usa sia per SL che per TP ?

    #254615 quote
    robertogozzi
    Moderator
    Master

    Questo chiude TUTTE le posizioni all’ultimo prezzo indcato, in STOP o in TARGET:

    DEFPARAM CumulateOrders = True
    ONCE SL = 100 * PipSize
    ONCE TP = SL * 2
    Sma = average[20,0](close)
    IF close CROSSES OVER Sma THEN
       BUY AT MARKET
       StopPrice   = close - SL
       TargetPrice = close + TP
       Set Target Price TargetPrice
       Set Stop   Price StopPrice
    ENDIF
    graphonprice StopPrice
    graphonprice TargetPrice

    Questo chiude TUTTE le posizioni, non accumulandole, allo stesso TP o allo stesso SL:

    DEFPARAM CumulateOrders = false
    ONCE SL = 100
    ONCE TP = SL * 2
    Sma = average[20,0](close)
    IF close CROSSES OVER Sma THEN
       BUY AT MARKET
       Set Stop   pLOSS   SL
       Set Target pPROFIT TP
    ENDIF

    Questo chiude ciascuna posizione al proprio SL o TP, mantenendoli distinti per ciascuna operazione d’acquisto:

    DEFPARAM CumulateOrders = True
    ONCE SL = 100
    ONCE TP = SL * 2
    Sma = average[20,0](close)
    IF close CROSSES OVER Sma THEN
       BUY AT MARKET
       Set Stop   pLOSS   SL
       Set Target pPROFIT TP
    ENDIF
    GraHal and Iván González thanked this post
    #254621 quote
    Alessandro Furlani
    Participant
    Junior

    Io l’ho fatto cosi, senza usare gli stoploss e takeprofit della piattaforma in modo che IG non possa cambiarli.

    / Setup Hide SL and TP
    Once SLoss=1 //Percentage SL
    Once SProfit=2 //Percentage TP
    if LongOnMarket and CountOfLongShares>0 and CountOfLongShares<1.1 then
       SLPrice = TradePrice-(TradePrice/100)*Sloss
       TPPrice = TradePrice+(TradePrice/100)*SProfit
    endif
    if LongOnMarket and Low<=SLPrice then
       SELL AT SLPrice STOP
    endif
    if LongOnMarket and High>=TPPrice then
       SELL AT TPPrice LIMIT
    endif
    if ShortOnMarket and CountOfShortShares>0 and CountOfShortShares<1.1 then
       SLPrice = TradePrice+(TradePrice/100)*Sloss
       TPPrice = TradePrice-(TradePrice/100)*SProfit
    endif
    if ShortOnMarket and High>=SLPrice then
       EXITSHORT AT SLPrice STOP
    endif
    if ShortOnMarket and Low<=SLPrice then
       EXITSHORT AT TPPrice LIMIT
    endif

     

    Come ti sembra ??

    #254635 quote
    robertogozzi
    Moderator
    Master

    In generale il concetto va bene, però vanno modificati alcuni tipi di ordine, perché LIMIT va usato quando il prezzo di uscita sarà migliorativo (produrrà un maggior profitto rispetto al prezzo corrente), mentre STOP quando sarà peggiorativo.

    Inoltre usare HIGH e LOW (invece di CLOSE), come riferimenti può causare uscite  impreviste, perché possono essere entrambi oltre il TP o lo SL, ma CLOSE è sotto e quindi inserisci un ordine pendente, ma se non c’è abbastanza distanza tra CLOSE e TP o SL, l’uscita può avvenire a mercato.

    Io ho messo ad un certo punto:

    RifHIGH = close //oppure high
    RifLOW  = close //oppure low

    se preferisci rimetti HIGH o LOW e torna tutto com’era prima, senza dovere modificare il codice ulteriormente. Resta il problema della distanza, richiesta dal broker e che è diversa per ciascun strumento e può cambiare anche più volte durante uno stesso giorno, generalmente è più elevata la notte e meno durante il normale orario di trading, tranne se c’è alta volatilità (non c’è modo, come per lo spread, di conoscerne il valore). Se non vuoi usare la DISTANZA basta che gli assegni valore 0. Se usi HIGH e LOW, mettila a 0, ha un senso solo se usi CLOSE:

    Sma = average[20,0](close)
    IF close CROSSES OVER Sma THEN
    BUY AT MARKET
    ENDIF
    once Distanza = 6
    RifHIGH = close //oppure high
    RifLOW  = close //oppure low
    // Setup Hide SL and TP
    Once SLoss=1 //Percentage SL
    Once SProfit=2 //Percentage TP
    if LongOnMarket and CountOfLongShares>0 and CountOfLongShares<1.1 then
    SLPrice = TradePrice-(TradePrice/100)*Sloss
    TPPrice = TradePrice+(TradePrice/100)*SProfit
    endif
    if LongOnMarket THEN
    IF RifLOW<(SLPrice-Distanza) then
    SELL AT SLPrice LIMIT//STOP
    ELSIF RifLOW>(SLPrice+Distanza) then
    SELL AT SLPrice STOP
    endif
    //
    IF RifHIGH > (TPPrice+Distanza) then
    SELL AT TPPrice STOP//LIMIT --- meglio uscire subito a Mercato, stai guadagnando oltre il TP
    ELSIF RifHIGH < (TPPrice-Distanza) then
    SELL AT TPPrice LIMIT
    endif
    ENDIF
    if ShortOnMarket and CountOfShortShares>0 and CountOfShortShares<1.1 then
    SLPrice = TradePrice+(TradePrice/100)*Sloss
    TPPrice = TradePrice-(TradePrice/100)*SProfit
    endif
    if ShortOnMarket THEN
    IF RifHIGH > (SLPrice+Distanza) then
    EXITSHORT AT SLPrice LIMIT//STOP
    ELSIF RifHIGH < (SLPrice-Distanza) then
    EXITSHORT AT SLPrice STOP
    endif
    //
    IF RifLOW < (SLPrice-Distanza) then
    EXITSHORT AT TPPrice STOP//LIMIT --- meglio uscire subito a Mercato, stai guadagnando oltre il TP
    ELSIF RifLOW < (SLPrice+Distanza) then
    EXITSHORT AT TPPrice LIMIT
    endif
    endif
    graphonprice SLPrice coloured("Red")
    graphonprice TPPrice coloured("Blue")
    #254636 quote
    Alessandro Furlani
    Participant
    Junior

    Allora, il rischio di mettere un SL o un TP a meno della distanza consentita non credo ci sia io lavoro al minimo all’ 1% del prezzo. Le distanze minime messe dai broker sono dell’ordine di pips ed anche quando si alzano a causa di volatilità diventano qualche decina di pips, quindi non credo di starci mai dentro.

    Invece il discorso dell’High e Low mi interessa. In pratica mi stai dicendo che PRT non chiude al prezzo corrente ma alla chiusura della candela quindi al prezzo close della candela corrente, giusto ? Ho capito bene ?

    Se ho capito bene, tu mi consigli di usare close nel test perchè tanto quello è il prezzo  a cui verrà chiuso il trade, corretto ?

    Inoltre come vedi il mio codice non fa usa delle istruzioni SET STOP e SET TARGET, ci sono eventuali svantaggi ??

    Fammi sapere e grazie

    #254642 quote
    robertogozzi
    Moderator
    Master

    Si, meglio usare CLOSE, perché è quello il riferimento per determinare se un ordine è di tipo LIMIT o STOP.

    Non usare SET STOP e SET TARGET ha sia vantaggi che svantaggi.

    Il vantaggio è che il broker non sa dove sono SL e TP, se usi un’uscita a mercato perché se usi un ordine pendente LIMIT o STOP lo capisce.

    Lo svantaggio, in caso di uscita a mercato, è che alla chiusura della candela il prezzo può essere andato OLTRE lo SL o il TP, dandoti una perdita o un guadagno maggiore.

    Iván González thanked this post
    #254663 quote
    Alessandro Furlani
    Participant
    Junior

    Riassumo per vedere se ho capito bene come funzionano Limit e Stop.

    Limit indica un prezzo a cui devo arrivare in gain, cioè per Long sarà sopra al prezzo di acquisto mentre per Short sarà sotto.

    Stop è il contrario, cioè indica un prezzo a cui devo arrivare in loss, per Long sarà sotto al prezzo d’acquisto mentre per Short sarà sopra.

    Corretto ?

    #254665 quote
    Alessandro Furlani
    Participant
    Junior

    In particolare non ho ben capito i passaggi che fai su questo codice:

    Come mai prevedi 2 uscite per ogni condizione SL e TP di ogni tipo di ordine ?

    Non mi è chiaro

    #254670 quote
    robertogozzi
    Moderator
    Master

    No, LIMIT è quando il prezzo d’entrata, rispetto a quello attuale (cioè CLOSE), è migliorativo, ad esempio se sei LONG e sei già in profitto e vuoi uscire ad un punto più in alto per un profitto maggiore, dovrai usare LIMIT, se vuoi uscire in profitto ma ad un punto più basso devi usare STOP (è il caso del trailing stop, che in realtà può diventare un trailing profit).

    Ovviamente le condizioni sono rovesciate nel caso tu sia SHORT.

    Ti allego uno schema visivo.

    Prevedo 2 uscite per ogni condizione SL e TP perché voglio verificare se il prezzo attuale è minore o maggiore del prezzo di entrata/uscita in modo da usare STOP o LIMIT (considerando anche la distanza).

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

modifica livelli di stoploss e takeprofit da IG


ProOrder: Trading Automatico & Backtesting

New Reply
Summary

This topic contains 18 replies,
has 3 voices, and was last updated by robertogozzi
1 month, 2 weeks ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 12/16/2025
Status: Active
Attachments: 1 files
Logo Logo
Loading...