Controllo codice maxTrades x day

Viewing 15 posts - 1 through 15 (of 20 total)
  • Author
    Posts
  • #192860 quote
    MauroPro
    Participant
    Veteran

    Ciao Roberto, ho provato un tuo codice per la determinazione del massimo numero di operazioni al giorno che mi piace come è scritto, ma, a volte, dà dei risultati differenti (e penso sbagliati) rispetto ad un codice classico che uso (ma che mi piace di meno come è scritto) per ottenere lo stesso risultato.

    Il tuo nuovo codice lo ho ripreso dal seguente link [rif: 191639]: https://www.prorealcode.com/topic/help-coding-breakout-strategy/

    Provando entrambi i codici su un TS di prova danno risultato differenti [ test su Nasdaq cfd – 10 minuti – 100k]. Sai quale può essere il motivo?

    Ecco i codici con il TS di base:

    PROVA A

    if intradayBarIndex=0 then
    count=0
    endif
    if  ( (not onMarket and onMarket[1] and not onMarket[2]) or (tradeIndex(1)=tradeIndex(2) and tradeIndex(1)=barIndex[1] and tradeIndex(1)>0) or (not onMarket and onMarket[1]))   then
    count = count+1
    endif
    //--------------------------------------------------------------
    if close crosses over average[50,0](close) and not onMarket and count < 3 then
    buy 1 contract at market
    endif
    set target pProfit 100
    set stop   pLoss   100

    PROVA B (tuo nuovo codice)

    once maxTrades = 3
    once tally = 0
    if intradayBarIndex = 0 then
    tally = 0
    endif
    newTrades =  (onMarket and not onMarket[1]) or (longOnMarket and shortOnMarket[1]) or (longOnMarket[1] and shortOnMarket) or ((not OnMarket and not onMarket[1]) and (strategyProfit <> strategyProfit[1]))
    if newTrades then
    tally = tally +1
    endif
    //--------------------------------------------------------------
    if close crosses over average[50,0](close) and not onMarket and tally < maxTrades then
    buy 1 contract at market
    endif
    set target pProfit 100
    set stop   pLoss   100

    Ed ecco il test:

    #192862 quote
    robertogozzi
    Moderator
    Master

    Verificando le date e gli orari d’apertura, magari esportando il risultato su eXcel, in quali  candele ci sono le differenze?

    #192867 quote
    MauroPro
    Participant
    Veteran

    Ciao Roberto, ho trovato alcune operazioni discordanti.

     1) In tutti i casi è lo snippet classico (prova A) che salta un operazione senza che sia chiaro il motivo. Ti segnalo alcune operazioni cosi puoi controllare il motivo del malfunzionamento:  21 settembre 2021  – 28 gennaio 2022 – 19 aprile 2022 (vd immagine A ed A2)

      2) [Il 28 gennaio 2022 ( vd immagine B) poi c’è un operazione visibile nel probacktest ed anche nell’indicatore delle posizioni, ma non segnalata da nessuno dei due codici (e non presente quindi nel listato delle operazioni)

    #192880 quote
    robertogozzi
    Moderator
    Master

    In merito alla prova A:

    • il 21/9/2021 mi sembra corretto, si chiudono 3 operazioni ed il conto è 3 (una si era aperta il giorno prima)
    • il 28/1/2022  stessa identica cosa, 3 chiusi ed il conto è 3
    • il 19/4/2022 ancora identica cosa, 3 chiusi ed il conto è 3.

    Le differenze sono dovute al fatto che il codice A fa una verifica diversa, quindi non tiene conto del fatto che un’operazione sia iniziata il giorno prima, mentre il codice B fa una verifica appena entrato a mercato, quindi se è del giorno precedente non influisce sul giorno successivo in quanto tu azzeri il conteggio con la prima barra del giorno dopo.

    Per ottenere lo stesso risultato (non in senso finanziario, solo per il controllo delle operazioni fatte), aggiungi questa riga all’inizio:

    defparam flatafter = 220000
    MauroPro thanked this post
    #192882 quote
    MauroPro
    Participant
    Veteran

    Grazie, Roberto, penso di utilizzare il tuo codice B. Mi piace di più come è scritto e preferisco che il conteggio sia interno ad ogni giornata senza mischiare i giorni.

    robertogozzi thanked this post
    #193140 quote
    MauroPro
    Participant
    Veteran

    Ciao Roberto, ho provato il tuo codice sul massimo numero di operazioni aggiornato e le nuove istruzioni di Nicolas. Su questo TS molto semplice sono equivalenti.

    once maxTrades = 3                              //maxNumberDailyTrades
    once tally = 0
    if intradayBarIndex = 0 then
    tally = 0
    endif
    
    newTrades =  (onMarket and not onMarket[1]) or (longOnMarket and shortOnMarket[1]) or (longOnMarket[1] and shortOnMarket) or ((not OnMarket and not onMarket[1]) and (strategyProfit <> strategyProfit[1])) or ((tradeIndex(1) = tradeIndex(2)) and (barIndex = tradeIndex(1)) and (barIndex > 0) and (strategyProfit = strategyProfit[1]))
    
    if newTrades then
    tally = tally +1
    endif
    //--------------------------------------------------------------------------------
    if close crosses over average[50,0](close) and not longOnMarket and tally < maxTrades then
    buy 1 contract at market
    endif
    set target pProfit 100
    set stop   pLoss   100
    once maxOrders = 3
    if intradayBarIndex = 0 then          //reset orders count
    ordersCount = 0
    endif
    
    if longTriggered then                 //check if an order has opened in the current bar
    ordersCount = ordersCount + 1
    endif
    //--------------------------------------------------------------------------------
    if close crosses over average[50,0](close) and not longOnMarket and ordersCount < maxOrders then
    buy 1 contract at market
    endif
    set target pProfit 100
    set stop   pLoss   100
    phoentzs thanked this post
    #193141 quote
    phoentzs
    Participant
    Master

    Devo dire grazie. Con un limite di ordini al giorno risolvi molti problemi nei mercati laterali.

    #193150 quote
    MauroPro
    Participant
    Veteran

    Oltre al limite degli ordini, uso la massima perdita giornaliere e l’attesa tra un trade e l’altro.

    Ho assemblato questi 3 snipper in uno complessivo che chiamo: cManagemente (da aggiungere alle tue condizioni di entrata).

    Se ti interessa ecco un esempio (puoi chiaramente ottimizzare i parametri.

    //----------------------------------------------------------------
    maxDailyLoss = 200                               //maxMonetaryDailyLoss
    realPosition=positionPerf*positionPrice/pointSize*pointValue
    once tradeAllowed = 1
    if intradayBarIndex = 0 then
    myProfit=strategyProfit
    tradeAllowed = 1
    endif
    if (strategyProfit+realPosition) <= (myProfit-maxDailyLoss) then
    tradeAllowed = 0
    endif
    //----------------------------------------------------------------------------------------------------------
    once maxTrades = 5                               //maxNumberDailyTrades
    once tally = 0
    if intradayBarIndex = 0 then
    tally = 0
    endif
    
    newTrades =  (onMarket and not onMarket[1]) or ((not onMarket and not onMarket[1]) and (strategyProfit <> strategyProfit[1])) or (longOnMarket and ShortOnMarket[1]) or (longOnMarket[1] and shortOnMarket) or ((tradeIndex(1) = tradeIndex(2)) and (barIndex = tradeIndex(1)) and (barIndex > 0) and (strategyProfit = strategyProfit[1]))
    
    if newTrades then
    tally = tally +1
    endif
    //-------------------------------------------------------------------------------------------------------
    once barCount = 0                               //barsToWaitAfterTrade
    waitingBars = 10
    once tradeCount  = 1
    
    newTrades =  (onMarket and not onMarket[1]) or ((not onMarket and not onMarket[1]) and (strategyProfit <> strategyProfit[1])) or (longOnMarket and ShortOnMarket[1]) or (longOnMarket[1] and shortOnMarket) or ((tradeIndex(1) = tradeIndex(2)) and (barIndex = tradeIndex(1)) and (barIndex > 0) and (strategyProfit = strategyProfit[1]))
    
    if newTrades then
    tradeCount  = 0
    barCount = 0
    endif
    if not longOnMarket then
    barCount = barCount + 1
    endif
    if barCount > waitingBars then
    tradeCount = 1
    endif
    //**********************************************************************************************
    cManagement = tradeAllowed  and tally < maxTrades and barCount > waitingBars
    //***********************************************************************************************
    phoentzs thanked this post
    #193151 quote
    MauroPro
    Participant
    Veteran

    nella riga 35 meglio scrivere :     if not onMarket then

    #193167 quote
    phoentzs
    Participant
    Master

    @Mauro
    È possibile che questo codice genera uno per 0 errori? Ho aggiunto questa variante al mio codice … backtest völlig in ordine, ma quando si avvia il messaggio di errore viene che un indicatore mostra un valore negativo.

     

    //Max-Orders per Day
    once maxOrdersL = maxiL
    once maxOrdersS = maxiS
    if intradayBarIndex = 0 then //reset orders count
    ordersCountL = 0
    ordersCountS = 0
    endif

    if longTriggered then //check if an order has opened in the current bar
    ordersCountL = ordersCountL + 1
    endif
    if shortTriggered then //check if an order has opened in the current bar
    ordersCountS = ordersCountS + 1
    endif
    //

    #193168 quote
    MauroPro
    Participant
    Veteran

    Lo ho testato in questo TS di prova e funziona.

    //S&P 500 -  15m - test: 50k
     //-------------------------------
    //Max-Orders per Day
    once maxOrdersL = maxiL
    once maxOrdersS = maxiS
    if intradayBarIndex = 0 then //reset orders count
    ordersCountL = 0
    ordersCountS = 0
    endif
    
    if longTriggered then //check if an order has opened in the current bar
    ordersCountL = ordersCountL + 1
    endif
    if shortTriggered then //check if an order has opened in the current bar
    ordersCountS = ordersCountS + 1
    endif
    //
    //-------------------------------------------------------------------------
    if close crosses over average[50,0](close) and not onMarket and ordersCountL < maxOrdersL then
    buy 1 contract at market
    endif
    
    if close crosses under average[50,0](close) and not onMarket and ordersCountS < maxOrdersS then
    sellShort 1 contract at market
    endif
    //-----------------------------------------------------------------------
    set target pProfit 100
    set stop   pLoss   50
    #193170 quote
    phoentzs
    Participant
    Master

    Ok, ho trovato l’errore. Un valore inutilizzato nell’ottimizzatore è stato impostato su “0”.
    Scusa, errore mio.

    #193342 quote
    KAMJKAZE
    Participant
    Junior

    Grazie mille per il tuo post mauro.
    lo snippet è interessante.

    #193482 quote
    Marlaynicolas
    Participant
    New

    Ciao, mauro

    Torno da voi perché sto cercando di integrare il vostro codice qui allegato se non sbaglio

    Dalla linea 32 del mio algo, ma senza la condizione di media 50, non succede nulla cambiando i miei take profit e stop che sono 11 e 34 e un’operazione al giorno.

    Se puoi, puoi farmi una copia di come la inseriresti nel mio codice. Grazie.

    Mi dispiace, sono ancora nelle prime fasi di creazione del codice.

     

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    // Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
    DEFPARAM FLATAFTER = 173000
    
    // Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiée
    noEntryBeforeTime = 153000
    timeEnterBefore = time >= noEntryBeforeTime
    
    // Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiée
    noEntryAfterTime = 173000
    timeEnterAfter = time < noEntryAfterTime
    
    // Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    // Conditions pour ouvrir une position acheteuse
    indicator1 = RSI[14](close)
    c1 = (indicator1 CROSSES OVER 30)
    
    IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
    BUY 1 CONTRACT AT MARKET
    ENDIF
    
    // Conditions pour ouvrir une position en vente à découvert
    indicator2 = RSI[14](close)
    c2 = (indicator2 CROSSES UNDER 70)
    
    IF c2 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
    SELLSHORT 1 CONTRACT AT MARKET
    ENDIF
    once maxOrders = 1
    if intradayBarIndex = 0 then          //reset orders count
    ordersCount = 0
    endif
     
    if longTriggered then                 //check if an order has opened in the current bar
    ordersCount = ordersCount + 1
    endif
    // Stops et objectifs
    SET STOP pTRAILING 31
    SET TARGET pPROFIT 11
    IF Not OnMarket THEN
    //
    // when NOT OnMarket reset values to default values
    //
    TrailStart    = 5          //30     Start trailing profits from this point
    BasePerCent   = 0.000       //20.0%  Profit percentage to keep when setting BerakEven
    StepSize      = 10          //10     Pip chunks to increase Percentage
    PerCentInc    = 0.100       //10.0%  PerCent increment after each StepSize chunk
    BarNumber     = 10          //10     Add further % so that trades don't keep running too long
    BarPerCent    = 0.100       //10%    Add this additional percentage every BarNumber bars
    RoundTO       = -0.5        //-0.5   rounds always to Lower integer,   +0.4 rounds always to Higher integer,     0 defaults PRT behaviour
    PriceDistance = 7 * pipsize //7      minimun distance from current price
    y1            = 0           //reset to 0
    y2            = 0           //reset to 0
    ProfitPerCent = BasePerCent //reset to desired default value
    TradeBar      = BarIndex
    ELSIF LongOnMarket AND close > (TradePrice + (y1 * pipsize)) THEN                              //LONG positions
    //
    // compute the value of the Percentage of profits, if any, to lock in for LONG trades
    //
    x1 = (close - tradeprice) / pipsize                                     //convert price to pips
    IF x1 >= TrailStart THEN                                                //    go ahead only if N+ pips
    Diff1         = abs(TrailStart - x1)                                 //difference from current profit and TrailStart
    Chunks1       = max(0,round((Diff1 / StepSize) + RoundTO))           //number of STEPSIZE chunks
    ProfitPerCent = BasePerCent + (BasePerCent * (Chunks1 * PerCentInc)) //compute new size of ProfitPerCent
    // compute number of bars elapsed and add an additionl percentage
    // (this percentage is different from PerCentInc, since it's a direct percentage, not a Percentage of BasePerCent)
    // (if BasePerCent is 20% and this is 10%, the whole percentage will be 30%, not 22%)
    BarCount      = BarIndex - TradeBar
    IF BarCount MOD BarNumber = 0 THEN
    ProfitPerCent = ProfitPerCent + BarPerCent
    ENDIF
    //
    ProfitPerCent = max(ProfitPerCent[1],min(100,ProfitPerCent))         //make sure ProfitPerCent doess not exceed 100%
    y1 = max(x1 * ProfitPerCent, y1)                                     //y1 = % of max profit
    ENDIF
    ELSIF ShortOnMarket AND close < (TradePrice - (y2 * pipsize)) THEN                             //SHORT positions
    //
    // compute the value of the Percentage of profits, if any, to lock in for SHORT trades
    //
    x2 = (tradeprice - close) / pipsize                                     //convert price to pips
    IF x2 >= TrailStart THEN                                                //      go ahead only if N+ pips
    Diff2         = abs(TrailStart - x2)                                 //difference from current profit and TrailStart
    Chunks2       = max(0,round((Diff2 / StepSize) + RoundTO))           //number of STEPSIZE chunks
    ProfitPerCent = BasePerCent + (BasePerCent * (Chunks2 * PerCentInc)) //compute new size of ProfitPerCent
    // compute number of bars elapsed and add an additionl percentage
    // (this percentage is different from PerCentInc, since it's a direct percentage, not a Percentage of BasePerCent)
    // (if BasePerCent is 20% and this is 10%, the whole percentage will be 30%, not 22%)
    BarCount      = BarIndex - TradeBar
    IF BarCount MOD BarNumber = 0 THEN
    ProfitPerCent = ProfitPerCent + BarPerCent
    ENDIF
    //
    ProfitPerCent = max(ProfitPerCent[1],min(100,ProfitPerCent))         //make sure ProfitPerCent doess not exceed 100%
    y2 = max(x2 * ProfitPerCent, y2)                                     //y2 = % of max profit
    ENDIF
    ENDIF
    IF y1 THEN                                                                 //Place pending STOP order when y1 > 0   (LONG positions)
    SellPrice = Tradeprice + (y1 * pipsize)                                 //convert pips to price
    //
    // check the minimun distance between ExitPrice and current price
    //
    IF abs(close - SellPrice) > PriceDistance THEN
    //
    // place either a LIMIT or STOP pending order according to current price positioning
    //
    IF close >= SellPrice THEN
    SELL AT SellPrice STOP
    ELSE
    SELL AT SellPrice LIMIT
    ENDIF
    ELSE
    //
    //sell AT MARKET when EXITPRICE does not meet the broker's minimun distance from current price
    //
    SELL AT Market
    ENDIF
    ENDIF
    IF y2 THEN                                                                 //Place pending STOP order when y2 > 0   (SHORT positions)
    ExitPrice = Tradeprice - (y2 * pipsize)                                 //convert pips to price
    //
    // check the minimun distance between ExitPrice and current price
    //
    IF abs(close - ExitPrice) > PriceDistance THEN
    //
    // place either a LIMIT or STOP pending order according to current price positioning
    //
    IF close <= ExitPrice THEN
    EXITSHORT AT ExitPrice STOP
    ELSE
    EXITSHORT AT ExitPrice LIMIT
    ENDIF
    ELSE
    //
    //ExitShort AT MARKET when EXITPRICE does not meet the broker's minimun distance from current price
    //
    EXITSHORT AT Market
    ENDIF
    ENDIF
    #193495 quote
    MauroPro
    Participant
    Veteran

    Devi inserire l’istruzione anche nelle condizioni di acquisto e vendita.

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    // Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
    DEFPARAM FLATAFTER = 173000
    
    // Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiée
    noEntryBeforeTime = 153000
    timeEnterBefore = time >= noEntryBeforeTime
    
    // Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiée
    noEntryAfterTime = 173000
    timeEnterAfter = time < noEntryAfterTime
    
    // Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    // Conditions pour ouvrir une position acheteuse
    indicator1 = RSI[14](close)
    c1 = (indicator1 CROSSES OVER 30)
    
    IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry and ordersCountL < maxOrdersL THEN
    BUY 1 CONTRACT AT MARKET
    ENDIF
    
    // Conditions pour ouvrir une position en vente à découvert
    indicator2 = RSI[14](close)
    c2 = (indicator2 CROSSES UNDER 70)
    
    IF c2 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry and ordersCountS < maxOrdersS THEN
    SELLSHORT 1 CONTRACT AT MARKET
    ENDIF
    //---------------------------------------------------------------------------------------------------------------
    //Max-Orders per Day
    once maxOrdersL = 1  //long
    once maxOrdersS = 1  //short
    if intradayBarIndex = 0 then //reset orders count
    ordersCountL = 0
    ordersCountS = 0
    endif
    
    if longTriggered then //check if an order has opened in the current bar
    ordersCountL = ordersCountL + 1
    endif
    if shortTriggered then //check if an order has opened in the current bar
    ordersCountS = ordersCountS + 1
    endif
    //------------------------------------------------------------------------------------------------------------------------
    // Stops et objectifs
    SET STOP pTRAILING 31
    SET TARGET pPROFIT 11
    IF Not OnMarket THEN
    //
    // when NOT OnMarket reset values to default values
    //
    TrailStart    = 5          //30     Start trailing profits from this point
    BasePerCent   = 0.000       //20.0%  Profit percentage to keep when setting BerakEven
    StepSize      = 10          //10     Pip chunks to increase Percentage
    PerCentInc    = 0.100       //10.0%  PerCent increment after each StepSize chunk
    BarNumber     = 10          //10     Add further % so that trades don't keep running too long
    BarPerCent    = 0.100       //10%    Add this additional percentage every BarNumber bars
    RoundTO       = -0.5        //-0.5   rounds always to Lower integer,   +0.4 rounds always to Higher integer,     0 defaults PRT behaviour
    PriceDistance = 7 * pipsize //7      minimun distance from current price
    y1            = 0           //reset to 0
    y2            = 0           //reset to 0
    ProfitPerCent = BasePerCent //reset to desired default value
    TradeBar      = BarIndex
    ELSIF LongOnMarket AND close > (TradePrice + (y1 * pipsize)) THEN                              //LONG positions
    //
    // compute the value of the Percentage of profits, if any, to lock in for LONG trades
    //
    x1 = (close - tradeprice) / pipsize                                     //convert price to pips
    IF x1 >= TrailStart THEN                                                //    go ahead only if N+ pips
    Diff1         = abs(TrailStart - x1)                                 //difference from current profit and TrailStart
    Chunks1       = max(0,round((Diff1 / StepSize) + RoundTO))           //number of STEPSIZE chunks
    ProfitPerCent = BasePerCent + (BasePerCent * (Chunks1 * PerCentInc)) //compute new size of ProfitPerCent
    // compute number of bars elapsed and add an additionl percentage
    // (this percentage is different from PerCentInc, since it's a direct percentage, not a Percentage of BasePerCent)
    // (if BasePerCent is 20% and this is 10%, the whole percentage will be 30%, not 22%)
    BarCount      = BarIndex - TradeBar
    IF BarCount MOD BarNumber = 0 THEN
    ProfitPerCent = ProfitPerCent + BarPerCent
    ENDIF
    //
    ProfitPerCent = max(ProfitPerCent[1],min(100,ProfitPerCent))         //make sure ProfitPerCent doess not exceed 100%
    y1 = max(x1 * ProfitPerCent, y1)                                     //y1 = % of max profit
    ENDIF
    ELSIF ShortOnMarket AND close < (TradePrice - (y2 * pipsize)) THEN                             //SHORT positions
    //
    // compute the value of the Percentage of profits, if any, to lock in for SHORT trades
    //
    x2 = (tradeprice - close) / pipsize                                     //convert price to pips
    IF x2 >= TrailStart THEN                                                //      go ahead only if N+ pips
    Diff2         = abs(TrailStart - x2)                                 //difference from current profit and TrailStart
    Chunks2       = max(0,round((Diff2 / StepSize) + RoundTO))           //number of STEPSIZE chunks
    ProfitPerCent = BasePerCent + (BasePerCent * (Chunks2 * PerCentInc)) //compute new size of ProfitPerCent
    // compute number of bars elapsed and add an additionl percentage
    // (this percentage is different from PerCentInc, since it's a direct percentage, not a Percentage of BasePerCent)
    // (if BasePerCent is 20% and this is 10%, the whole percentage will be 30%, not 22%)
    BarCount      = BarIndex - TradeBar
    IF BarCount MOD BarNumber = 0 THEN
    ProfitPerCent = ProfitPerCent + BarPerCent
    ENDIF
    //
    ProfitPerCent = max(ProfitPerCent[1],min(100,ProfitPerCent))         //make sure ProfitPerCent doess not exceed 100%
    y2 = max(x2 * ProfitPerCent, y2)                                     //y2 = % of max profit
    ENDIF
    ENDIF
    IF y1 THEN                                                                 //Place pending STOP order when y1 > 0   (LONG positions)
    SellPrice = Tradeprice + (y1 * pipsize)                                 //convert pips to price
    //
    // check the minimun distance between ExitPrice and current price
    //
    IF abs(close - SellPrice) > PriceDistance THEN
    //
    // place either a LIMIT or STOP pending order according to current price positioning
    //
    IF close >= SellPrice THEN
    SELL AT SellPrice STOP
    ELSE
    SELL AT SellPrice LIMIT
    ENDIF
    ELSE
    //
    //sell AT MARKET when EXITPRICE does not meet the broker's minimun distance from current price
    //
    SELL AT Market
    ENDIF
    ENDIF
    IF y2 THEN                                                                 //Place pending STOP order when y2 > 0   (SHORT positions)
    ExitPrice = Tradeprice - (y2 * pipsize)                                 //convert pips to price
    //
    // check the minimun distance between ExitPrice and current price
    //
    IF abs(close - ExitPrice) > PriceDistance THEN
    //
    // place either a LIMIT or STOP pending order according to current price positioning
    //
    IF close <= ExitPrice THEN
    EXITSHORT AT ExitPrice STOP
    ELSE
    EXITSHORT AT ExitPrice LIMIT
    ENDIF
    ELSE
    //
    //ExitShort AT MARKET when EXITPRICE does not meet the broker's minimun distance from current price
    //
    EXITSHORT AT Market
    ENDIF
    ENDIF
    Marlaynicolas thanked this post
Viewing 15 posts - 1 through 15 (of 20 total)
  • You must be logged in to reply to this topic.

Controllo codice maxTrades x day


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
MauroPro @mauropro Participant
Summary

This topic contains 19 replies,
has 5 voices, and was last updated by MauroPro
3 years, 8 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 05/07/2022
Status: Active
Attachments: 6 files
Logo Logo
Loading...