Compound and Parital close function

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #223423 quote
    Taftclon
    Participant
    New

    Hello!

    I have a trading idea that I need help with.

    I can’t get the partial close function to work with my compound effect, does anyone know what I’m doing wrong?

    When i remove line 3 to 5 the partial close function works as it should see attached image.

    thankful for any help 🙂

     

    // Definition of code parameters
    DEFPARAM CumulateOrders = False // Cumulating positions deactivated
    
    
    
    //amount of contract/lot/shares to open for each order
    Amount=10
    takeprofit = PATR*AverageTrueRange[NATR](close) //takeprofit in points
    stoploss = SATR*AverageTrueRange[NATR](close) //stoploss in points
    BreakevenAt = PATR*AverageTrueRange[NATR](close)/3//percent achieved of target to move stop to entry (breakeven)
    PointsToKeep = 3 //how much pips/points to keep in profit above of below our entry price when the breakeven is activated (beware of spread)
    Lot2Close = Amount/2 //amount of contract/lot/shares quantity to close when breakeven occurs
    
    //reset the breakevenLevel when no trade are on market
    IF NOT ONMARKET THEN
    breakevenLevel=0
    ENDIF
    
    // Prevents the system from creating new orders to enter the market or increase position size before the specified time
    noEntryBeforeTime = 093000
    timeEnterBefore = time >= noEntryBeforeTime
    
    // Prevents the system from placing new orders to enter the market or increase position size after the specified time
    noEntryAfterTime = 173000
    timeEnterAfter = time < noEntryAfterTime
    
    // Prevents the system from placing new orders on specified days of the week
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0 OR OpenDayOfWeek = 1
    if currentmonth = 4 then
    longmonthcondition = 0
    else
    longmonthcondition = 1
    endif
    if currentmonth = 1  then
    shortmonthcondition = 0
    else
    shortmonthcondition = 1
    endif
    
    // Conditions to enter long positions
    indicator1 = Average[40,8](close) // 10,6
    indicator2 = Average[40,3](close) //  50,7
    c1 = (indicator1 crosses over indicator2)
    
    
    indicator3 = Average[200,1](close)
    if close > indicator3 then
    tradeonlong = 1
    else
    tradeonlong = 0
    endif
    
    
    IF NOT LongOnMarket AND  c1 and tradeonlong and timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry and longmonthcondition THEN
    BUY amount CONTRACT AT MARKET
    ENDIF
    
    // Conditions to enter Short positions
    indicator4 = Average[42,0](close) // 90,1
    indicator5 = Average[29,0](close) //  50,4
    c2 = (indicator4 crosses over indicator5)
    
    if close < indicator3 then
    tradeonshort = 1
    else
    tradeonshort = 0
    endif
    
    IF NOT ShortOnMarket AND  c2 and tradeonshort and timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry and shortmonthcondition THEN
    SELLSHORT amount CONTRACTS AT MARKET
    ENDIF
    
    
    // Stops and targets
    NATR = 14 //ATR Period
    SATR = 2 // ATR Multiplier for Stop
    PATR = 3// ATR Multiplier for Profit
    
    
    //Stop and Target
    SET STOP LOSS SATR*AverageTrueRange[NATR](close)
    SET TARGET PROFIT PATR*AverageTrueRange[NATR](close)
    
    startBreakeven =  takeprofit*(BreakevenAt/100)//how much pips/points in gain to activate the breakeven function?
    // --- BUY SIDE ---
    //test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = tradeprice(1)+PointsToKeep*pipsize
    ENDIF
    
    //place the new stop orders on market at breakevenLevel
    IF LONGONMARKET AND breakevenLevel>0 THEN
    SELL AT breakevenLevel STOP
    if countoflongshares=amount then
    sell Lot2Close contract at market
    endif
    ENDIF
    // --- end of BUY SIDE ---
    
    // --- SELL SIDE ---
    //test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = tradeprice(1)-PointsToKeep*pipsize
    ENDIF
    
    //place the new stop orders on market at breakevenLevel
    IF SHORTONMARKET AND breakevenLevel>0 THEN
    EXITSHORT AT breakevenLevel STOP
    if countofshortshares=amount then
    exitshort Lot2Close contract at market
    endif
    ENDIF
    // --- end of SELL SIDE ---
    
    not-working-Closure.png not-working-Closure.png Working-Closure.png Working-Closure.png
    #223426 quote
    Taftclon
    Participant
    New

    line 1-9 should be as below

    // Definition of code parameters
    DEFPARAM CumulateOrders = False // Cumulating positions deactivated
    Capital = 2000
    Equity = Capital + StrategyProfit
    Position = (0.03*equity)/stoploss
    
    
    //amount of contract/lot/shares to open for each order
    Amount=position
    #223449 quote
    PeterSt
    Participant
    Master

    Without analysing your code really, it looks like you need to change line 3 to

    Once Capital = 2000

    Now you assign your capital once, and in the next call of your code (at the next bar(s)) the Capital will increase (or decrease 😉 ).

    Regards,
    Peter

    #223453 quote
    Taftclon
    Participant
    New

    thank you Peter ill try this 🙂

    #223454 quote
    Taftclon
    Participant
    New

    didn’t help :/
    line 12 seems to not work

    Lot2Close = Amount/2  not sure why
    #225700 quote
    robertogozzi
    Moderator
    Master

    I added the ROUND() instruction to make sure there’s only 1 decimal place.

    I also added MinLots to set a minimum number of lots to be traded (but I suggest that it be at least 2, or that the minimun lots to exit is allowed to be half that number, i.e. if you set a max 1 lotsize, then the broker must allow exiting 0.5 lots) and MinExit to exit partial poisitions.

    // Definition of code parameters
    DEFPARAM CumulateOrders = False // Cumulating positions deactivated
    once Capital = 2000
    once MinLots = 2                           //minimum lotsize
    once MinExit = 1                           //minimum number of lots to exit
    Equity = Capital + StrategyProfit
    Position = max(MinLots,round((0.03*equity)/stoploss,1))
     
    //amount of contract/lot/shares to open for each order
    Amount=position
    takeprofit = PATR*AverageTrueRange[NATR](close) //takeprofit in points
    stoploss = SATR*AverageTrueRange[NATR](close) //stoploss in points
    BreakevenAt = PATR*AverageTrueRange[NATR](close)/3//percent achieved of target to move stop to entry (breakeven)
    PointsToKeep = 3 //how much pips/points to keep in profit above of below our entry price when the breakeven is activated (beware of spread)
    Lot2Close = max(MinExit,round(Amount/2,1)) //amount of contract/lot/shares quantity to close when breakeven occurs
    
    //reset the breakevenLevel when no trade are on market
    IF NOT ONMARKET THEN
    breakevenLevel=0
    ENDIF
    
    // Prevents the system from creating new orders to enter the market or increase position size before the specified time
    noEntryBeforeTime = 093000
    timeEnterBefore = time >= noEntryBeforeTime
    
    // Prevents the system from placing new orders to enter the market or increase position size after the specified time
    noEntryAfterTime = 173000
    timeEnterAfter = time < noEntryAfterTime
    
    // Prevents the system from placing new orders on specified days of the week
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0 OR OpenDayOfWeek = 1
    if currentmonth = 4 then
    longmonthcondition = 0
    else
    longmonthcondition = 1
    endif
    if currentmonth = 1  then
    shortmonthcondition = 0
    else
    shortmonthcondition = 1
    endif
    
    // Conditions to enter long positions
    indicator1 = Average[40,8](close) // 10,6
    indicator2 = Average[40,3](close) //  50,7
    c1 = (indicator1 crosses over indicator2)
    
    
    indicator3 = Average[200,1](close)
    if close > indicator3 then
    tradeonlong = 1
    else
    tradeonlong = 0
    endif
    
    
    IF NOT LongOnMarket AND  c1 and tradeonlong and timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry and longmonthcondition THEN
    BUY amount CONTRACT AT MARKET
    ENDIF
    
    // Conditions to enter Short positions
    indicator4 = Average[42,0](close) // 90,1
    indicator5 = Average[29,0](close) //  50,4
    c2 = (indicator4 crosses over indicator5)
    
    if close < indicator3 then
    tradeonshort = 1
    else
    tradeonshort = 0
    endif
    
    IF NOT ShortOnMarket AND  c2 and tradeonshort and timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry and shortmonthcondition THEN
    SELLSHORT amount CONTRACTS AT MARKET
    ENDIF
    
    
    // Stops and targets
    NATR = 14 //ATR Period
    SATR = 2 // ATR Multiplier for Stop
    PATR = 3// ATR Multiplier for Profit
    
    
    //Stop and Target
    SET STOP LOSS SATR*AverageTrueRange[NATR](close)
    SET TARGET PROFIT PATR*AverageTrueRange[NATR](close)
    
    startBreakeven =  takeprofit*(BreakevenAt/100)//how much pips/points in gain to activate the breakeven function?
    // --- BUY SIDE ---
    //test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = tradeprice(1)+PointsToKeep*pipsize
    ENDIF
    
    //place the new stop orders on market at breakevenLevel
    IF LONGONMARKET AND breakevenLevel>0 THEN
    SELL AT breakevenLevel STOP
    if countoflongshares=amount then
    sell Lot2Close contract at market
    endif
    ENDIF
    // --- end of BUY SIDE ---
    
    // --- SELL SIDE ---
    //test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = tradeprice(1)-PointsToKeep*pipsize
    ENDIF
    
    //place the new stop orders on market at breakevenLevel
    IF SHORTONMARKET AND breakevenLevel>0 THEN
    EXITSHORT AT breakevenLevel STOP
    if countofshortshares=amount then
    exitshort Lot2Close contract at market
    endif
    ENDIF
    // --- end of SELL SIDE ---
    graph Amount
    graph Lot2Close
    MySystem.itf
Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.

Compound and Parital close function


ProOrder: Automated Strategies & Backtesting

New Reply
Author
author-avatar
Taftclon @taftclon Participant
Summary

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

Topic Details
Forum: ProOrder: Automated Strategies & Backtesting
Language: English
Started: 11/09/2023
Status: Active
Attachments: 3 files
Logo Logo
Loading...