Averaging down code

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #118459 quote
    nonetheless
    Participant
    Master

    Hi, I have added this averaging down code to the bottom of a strategy and changed cumulateorders to true but I get an error saying that haopen and haclose are undefined.

    What else do I need to do?

     

    // averaging down
    if longonmarket and haopen<haclose and haopen[1]>haclose[1] and haclose<tradeprice then
    BUY 1 SHARE AT MARKET
    endif
    
    // monitor the average price of whole orders and close them accordingly
    if longonmarket and haclose>positionprice and countofposition>-1 then
    SELL AT MARKET
    endif
    
    if shortonmarket and haopen>haclose and haopen[1]<haclose[1] and haclose>tradeprice then
    SELLSHORT 1 SHARE AT MARKET
    endif
    
    // monitor the average price of whole orders and close them accordingly
    if shortonmarket and haclose<positionprice and countofposition<-1 then
    EXITSHORT AT MARKET
    endif
    #118462 quote
    Vonasi
    Moderator
    Master

    haopen and haclose need to be defined somewhere in the code. I suspect you have borrowed the snippet from someone that was using it in a hiekin ashi strategy where haclose and haopen were the calculated values for the HA candles.

    #118467 quote
    robertogozzi
    Moderator
    Master

    This is the HA setup to be added to your code, at the beginning:

    // HA - definizione Heikin-Ashi
    //
    once haOpen = open
    haClose = (open+close+high+low)/4
    if barindex > 0 then
       haOpen = (haOpen+haClose[1])/2
    endif
    haLow  = min(low,min(haClose,haOpen))
    haHigh = max(high,max(haClose,haOpen))

    any reference to unused variable shall be commented out.

    #118488 quote
    nonetheless
    Participant
    Master

    Thanks Roberto, but I’m still a bit confused as Heikin-Ashi is new territory for me. I got the snippet here:

    https://www.prorealcode.com/blog/trading/averaging-techniques-automated-trading/

    Is Heikin-Ashi an essential component to the averaging down technique? or is it a part of the main strategy in Nicolas’s example?

    #118492 quote
    nonetheless
    Participant
    Master

    This is the code I’m modifying, as devised by Soulintact. It’s a buy and hold strategy that only sells when in profit and I thought it ‘might’ benefit from averaging down.

    Might also crash and burn.

    I have tried adding your Heikin-Ashi definition at the top but not sure if I’m doing it right. Does not seem to have the expected effect.

    //-------------------------------------------------------------------------
    defparam cumulateorders=false
    Defparam preloadbars=10000
     
    amount = 1 //quantity of shares/contracts to open for each new order
     
    //--------------------------------------------------------------------------------//
     
    //Indicators
    //Indicator: PRC_OneMoreAverage MACD
    //Release date: 23.11.2016
    //Web: https://www.prorealcode.com/prorealtime-indicators/one-more-average-macd/
    //Code translator: Nicolas @ www.prorealcode.com
     
    //--parameters
    //>OMA parameters
    Sensibility = 1
    Adaptive = 1
    //>MACD periods
    FLength = 24
    SLength = 52
    //>signal line
    SigLength = 9
    Sigma = 4
    Offset = 0.85
    
    // HA - definizione Heikin-Ashi
    //
    once haOpen = open
    haClose = (open+close+high+low)/4
    if barindex > 0 then
    haOpen = (haOpen+haClose[1])/2
    endif
    //haLow  = min(low,min(haClose,haOpen))
    //haHigh = max(high,max(haClose,haOpen))
    //--------
    
    if barindex > 129 then
    Speed = Sensibility
    Speed  = Max(Speed,-1.5)
    price = average[1](customclose)
    tconst=Speed
     
    //--Fast moving average
    FLength = Max(FLength,1)
    //adaptive period
    averagePeriod = FLength
    if adaptive=1 and averagePeriod > 1 then
    minPeriod = averagePeriod/2.0
    maxPeriod = minPeriod*5.0
    endPeriod = round(maxPeriod)
    signal    = Abs((price-stored[endPeriod]))
    noise     = 0.00000000001
     
    for k=1 to endPeriod do
    noise=noise+Abs(price-stored[k])
    averagePeriod = round(((signal/noise)*(maxPeriod-minPeriod))+minPeriod)
    next
     
    endif
     
    alpha = (2.0+tconst)/(1.0+tconst+averagePeriod)
     
    e1 = e1 + alpha*(price-e1)
    e2 = e2 + alpha*(e1-e2)
    v1 = 1.5 * e1 - 0.5 * e2
    e3 = e3 + alpha*(v1   -e3)
    e4 = e4 + alpha*(e3-e4)
    v2 = 1.5 * e3 - 0.5 * e4
    e5 = e5 + alpha*(v2   -e5)
    e6 = e6 + alpha*(e5-e6)
    Fast = 1.5 * e5 - 0.5 * e6
     
    //------------------------------------
     
    //--Slow moving average
    SLength = Max(SLength,1)
    //adaptive period
    SaveragePeriod = SLength
    if adaptive=1 and SaveragePeriod > 1 then
    SminPeriod = SaveragePeriod/2.0
    SmaxPeriod = SminPeriod*5.0
    SendPeriod = round(maxPeriod)
    Ssignal    = Abs((price-stored[SendPeriod]))
    Snoise     = 0.00000000001
     
    for k=1 to SendPeriod do
    Snoise=Snoise+Abs(price-stored[k])
    SaveragePeriod = round(((Ssignal/Snoise)*(SmaxPeriod-SminPeriod))+SminPeriod)
    next
     
    endif
     
    Salpha = (2.0+tconst)/(1.0+tconst+SaveragePeriod)
     
    Se1 = Se1 + Salpha*(price-Se1)
    Se2 = Se2 + Salpha*(Se1-Se2)
    Sv1 = 1.5 * Se1 - 0.5 * Se2
    Se3 = Se3 + Salpha*(Sv1   -Se3)
    Se4 = Se4 + Salpha*(Se3-Se4)
    Sv2 = 1.5 * Se3 - 0.5 * Se4
    Se5 = Se5 + Salpha*(Sv2   -Se5)
    Se6 = Se6 + Salpha*(Se5-Se6)
    Slow = 1.5 * Se5 - 0.5 * Se6
     
    //------------------------------------
     
    //--Signal moving average
    OMAMACD = Slow-Fast
    SigLength = Max(SigLength,1)
    //---Signal MA
    n = (Offset * (SigLength - 1))
    t = SigLength/Sigma
    SWtdSum = 0
    SCumWt  = 0
    for k = 0 to SigLength - 1 do
    SWtd = Exp(-((k-n)*(k-n))/(2*t*t))
    SWtdSum = SWtdSum + SWtd * OMAMACD[SigLength - 1 - k]
    SCumWt = SCumWt + SWtd
    next
    SIGMACD = SWtdSum / SCumWt
     
    //------------------------------------
     
    stored=price
     
    //------------------------------------
     
    BullSMA=(SIGMACD<OMAMACD)
    BearSMA=(SIGMACD>OMAMACD)
     
    //--------------------------------------------------------------------------------//
     
    //Conditions when to act
    if (not longonmarket and BullSMA)then
    buy amount shares at market
    endif
     
    if (longonmarket and BearSMA and positionperf>0) then
    sell at market
    endif
    endif
    
    // averaging down
    if longonmarket and haopen<haclose and haopen[1]>haclose[1] and haclose<tradeprice then
    BUY 1 SHARE AT MARKET
    endif
     
    // monitor the average price of whole orders and close them accordingly
    if longonmarket and haclose>positionprice and countofposition>-1 then
    SELL AT MARKET
    endif
     
    //if shortonmarket and haopen>haclose and haopen[1]<haclose[1] and //haclose>tradeprice then
    //SELLSHORT 1 SHARE AT MARKET
    //endif
     
    // monitor the average price of whole orders and close them accordingly
    //if shortonmarket and haclose<positionprice and countofposition<-1 then
    //EXITSHORT AT MARKET
    //endif
    
    #118493 quote
    robertogozzi
    Moderator
    Master

    Averaging down can be done on both common japanese and HA candlesticks.

    Use CLOSE, OPEN, HIGH and LOW when you want to use common candlesticks.

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

Averaging down code


ProOrder: Automated Strategies & Backtesting

New Reply
Author
Summary

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

Topic Details
Forum: ProOrder: Automated Strategies & Backtesting
Language: English
Started: 02/02/2020
Status: Active
Attachments: No files
Logo Logo
Loading...