Heikin Ashi during trend

Heikin Ashi during trend


This is one of my first strategies. It is a simple strategy with Heikin Ashi as a trigger during trends. It buys according to Heikin Ashi but only during uptrend set by EMA 25, 50 and 270. It sells acoording to HEikin ashi but only during trends (same EMA).

My question is of course if anyone have any improvement tips, but also my concenr for curve fitting and lack of robustness. I have tried to not make to many adjustments and I did my settings on about 28 months IS and then added another 7 months as OOS. The strategy works on DAX H1 and I didnt find any other markjet that worked well. I had the spread set to 2 for this backtest.

Please let me know your thoughts.

(please download the attached file to get all necessary codes).

Share this

Risk disclosure:

No information on this site is investment advice or a solicitation to buy or sell any financial instrument. Past performance is not indicative of future results. Trading may expose you to risk of loss greater than your deposits and is only suitable for experienced investors who have sufficient financial means to bear such risk.

ProRealTime ITF files and other attachments : How to import ITF files into ProRealTime platform?

New! PRC is also now on YouTube, subscribe to our channel for exclusive content and tutorials

  1. jebus89 • 36 days ago #

    Guessing photo is 100k bars? Because 200K bars was not good. Also u got alot of loosing trades in a row, thats a big red flag for my part.

  2. PastaPesto • 36 days ago #

    jebus89, thank you for your feedback. You are correct, the backtest is made on 100K. The bad result for 200K and the fact that I couldnt find other markets for this is not promising. You also mentioned the loss in a row. I guess yoy see this together with the other facts from the backtest? Loss in arow alone shouldnt be a fact to reject a strategy. It depends on the relation between SL and TP as well as the end result, or what do you think?

  3. jebus89 • 36 days ago #

    The more loss in a row you have, the more big winners u need in the future. With a belo 50% winrate, ur gonna need some big winners to save u from loosing 15 trades in a row.. That means ur backtest might be very dependant on a few big winners to make up for all the loss. Increasing the risk of datamining and curvefitting. Also alot of trades lost in a row is going to be very hard to actually trade. Imagine going 9 trades loosing in a row on the same strategy its going to feel like bleeding out, and its gonna leave u praying for a winner to come. what if it dosnt come for another 12 months.. Many loss in a row, frequently haves me thinking ur entry isnt so good.

    It dosnt mean 100% sure the strategy is bad, it just at least for me is a few red flags that i would definitly think twice about b4 running live at least.
    Also when you find it hard to make it good in other markets, that again is indeed a red flag regarding the average trade u take.. If u get a decent backtest in other markets that means u havnt curvefitted your algo to “cherrypick” the very best trades from the other optimized market. It means u just might ahve something that pulls profit out of the chart, regardless what chart. Thats kind of the clue behind robustness. You dont want a backtest that has cherrypicked alot of good trades from the data. U want a backtest that has even profits, a good sharpe, low volatility in the equity curve, but obviously not a traight line, u want some bumps here and there because u cant always be right.

  4. PastaPesto • 35 days ago #

    Thank you for the feedback jebus. I totally agree on every point.

  5. Paul • 35 days ago #

    Thanks for posting. I took my SDO strategy, removed the main criteria and inserted your code to match. Results look good for 10 min bar but not on all 200k bars. From jan 2016 it’s good. (before that about even)
    Tested with 1 position, stoploss 1% and spread 1. From 1 jan. 2016 winratio at 73% with average gain 23 euro on 153 trades. 3 losses in a row and 15 wins. Total profit about €3500
    So maybe the basis is alright but it just needs a few extra filters to succeed.

  6. PastaPesto • 34 days ago #

    Thanks Paul for taking your time looking in to this. Could you please insert your code? I will let you know if I find something.

  7. Paul • 34 days ago #

    It has only 1 trade a day and the profit target is not used.
    Because it trades a complete day, I included an option not to enter new positions during lunchbreak, because of a higher risk. Perhaps it’s curve-fitting, but it does make sense to me. (11.30-13.30)

    // Main Code : Heikin Ashi trend

    // Common Rules
    Defparam Cumulateorders = False
    Defparam Preloadbars = 1000

    // On/off
    Extratradecriteria = 1 // I.e. Long; Only Enters When The Current Bar High Is Lower Then The Lowest Daily High From Today, Yesterday And Day Before.
    Mfetrailing = 1 // Mfe Trailing Stop
    Wtrailing = 1 // Williams 3 Bar Trailing Stop
    Breakevenstop = 1 // Breakevenstop, Move Stoploss When Position Is In Profit.
    Excludefirsttwoweeks = 1 // Exclude The First 2 Weeks Of Every Year (Weeknumber 1 And 2)
    lunchtrading = 0 // [0] no new positions during lunchtime and trades can be closed

    // Settings
    Positionsize = 1
    SL = 1.00 // % Stoploss
    PT = 140 // % Profit Target
    MFETS = 0.50 // % Mfe Trailing Stop
    BES = 0.35 // % Break Even Stop
    BESMP = 0.05 // % Break Even Stop Minimum Profit
    WTSMP = 0.50 // % Williams Trailing Stop Minimum Profit If Mfe Trailing Stop Is Not Used
    ETD = 0 // Exclude a Trade Day; Sunday = 0

    // Day & Time
    Once Entertime = 090000
    Once Lasttime = 170000
    Once Closetime = 240000 // Greater Then 23.59 Means It Continues Position Overnight
    Once Closetimefr=173000
    if lunchtrading then
    once breakstart = 240000
    once breakend = 240000
    once breakstart = 113000
    once breakend = 133000

    If Excludefirsttwoweeks=1 Then
    If Year=2015 And Month=1 And (Day>=1 And Day=1 And Day=1 And Day=1 And Day=1 And Day= Entertime
    Tt2 = Time = breakstart and time <= breakend
    Tradetime = Tt1 And Tt2 and Notrading = 0 And Dayofweek ETD and not breaktime

    // Reset At Start
    If Intradaybarindex = 0 Then
    Longtradecounter = 0
    Shorttradecounter = 0
    Tradecounter = 0
    Mclong = 0
    Mcshort = 0

    // [pc] Position Criteria
    Pclong = Countoflongshares < 1 And Longtradecounter < 1 And Tradecounter TRADEINDEX
    Pcshort = Countofshortshares < 1 And Shorttradecounter < 1 And Tradecounter TRADEINDEX

    // [mc] main criteria
    if tradetime then
    C3 = ExponentialAverage[32](close)//BLACK
    C4 = ExponentialAverage[48](close)//RED
    C5 = ExponentialAverage[192](close)//RED
    indicator1 = CALL “Heiken Ashi”
    c1 = (indicator1 = -1)
    c2 = (indicator1 = 1)

    IF c2 AND C4 > C5 AND C3 > C4 THEN

    If c1 AND C4 < C5 AND C3 < C4 THEN

    // [ec] Extra Criteria
    If Extratradecriteria Then
    Min1 = Min(Dhigh(0),dhigh(1))
    Min2 = Min(Dhigh(1),dhigh(2))

    Max1 = Max(Dlow(0),dlow(1))
    Max2 = Max(Dlow(1),dlow(2))

    Eclong = High Max(Max1,max2)

    // Long & Short Entry
    If not onmarket and Tradetime Then
    If Pclong and Mclong And Eclong Then
    Buy Positionsize Contract At Market
    Longtradecounter=longtradecounter + 1
    If Pcshort and Mcshort And Ecshort Then
    Sellshort Positionsize Contract At Market
    Shorttradecounter=shorttradecounter + 1

    // Break Even Stop
    If Breakevenstop Then
    If Not Onmarket Then
    If Longonmarket And close-tradeprice(1)>=((Tradeprice/100)*BES)*pipsize Then
    Newsl = Tradeprice(1)+((Tradeprice/100)*BESMP)*pipsize
    If Shortonmarket And Tradeprice(1)-close>=((Tradeprice/100)*BES)*pipsize Then
    Newsl = Tradeprice(1)-((Tradeprice/100)*BESMP)*pipsize
    If Newsl>0 Then
    Sell At Newsl Stop
    Exitshort At Newsl Stop

    // Exit Mfe Trailing Stop
    If Mfetrailing Then
    Trailingstop = (Tradeprice/100)*MFETS
    If Not Onmarket Then
    Maxprice = 0
    Minprice = Close
    Priceexit = 0
    If Longonmarket Then
    Maxprice = Max(Maxprice,close)
    If Maxprice-tradeprice(1)>=trailingstop*pipsize Then
    Priceexit = Maxprice-trailingstop*pipsize
    If Shortonmarket Then
    Minprice = Min(Minprice,close)
    If Tradeprice(1)-minprice>=trailingstop*pipsize Then
    Priceexit = Minprice+trailingstop*pipsize
    If Onmarket And Wtrailing=0 And Priceexit>0 Then
    Sell At Market
    Exitshort At Market

    // Exit Williams Trailing Stop
    If Wtrailing Then
    While Count=low[i]) And (High[j]alto[1] Then
    If CloseWTSMP Then
    If Low[1]>ref And High<ref Then
    Sell At Market
    If High[1]ref Then
    Exitshort At Market

    If Onmarket And Mfetrailing=1 And Priceexit>0 Then
    If Highref Then
    Exitshort At Market

    // Exit At Closetime
    If Onmarket Then
    If Time >= Closetime Then
    Sell At Market
    Exitshort At Market

    // Exit At Closetime Friday
    If Onmarket Then
    If (Currentdayofweek=5 And Time>=closetimefr) Then
    Sell At Market
    Exitshort At Market

    // Build-in Exit
    Set Stop %loss SL
    Set Target %profit PT

    //graph 0 Coloured(300,0,0) As “Zeroline”
    //graph (Positionperf*100)coloured(0,0,0,255) As “Positionperformance”

  8. Paul • 34 days ago #

    that copy&paste doesn’t look good. If you want the correct code posted, please open a topic with your strategy and I will post it there.

  9. PastaPesto • 34 days ago #

    Many thanks Paul! I will look at it tomorrow (Im using my phone now).

  10. PastaPesto • 34 days ago #

    Paul, Im sorry but where do I open a topic?

  11. Paul • 33 days ago #

    in ProOrder support, at the bottom

  12. Maik2404 • 31 days ago #

    wie kann ich den Code bekommen Paul?

Register or


avatar avatar
Related users ' posts
Francesco78 c = (sin(atan((close-open[n])/open[n]*100/n))) this is the indicator. Itis a measure of the...
Stenozar Thanks Francesco!
Francesco78 You are most welcome!
hartgeld Hallo Atxeel, sehr interessanter Code, habe das installiert und funktioniert. Danke! Kannst ...
atxeel Hallo hartgeld, die Ziele sind schlicht, bspw. die Range beträgt 10 Punkte, dann ist das Zie...
osupero Buenisimo Sr Nicolas, seria posible que sólo marcara por encima o por debajo de una media mo...
osupero https://www.screencast.com/t/1FD7s0YdZ......DE NUEVO MIL GRACIAS
rollem Thank you! Could you replicate this indicator using regular candlesticks instead of Heikin A...
pableitor Done ! Pls check this https://www.prorealcode.com/prorealtime-indicators/higher-time-fra...
rollem Thank you very much sir!
3 months ago
JvdG I meant of course: since ld56 is one of the constituents of ld48;
Nicolas You are right about ld56. Since this is a translation from another programming language, I d...
Florian Legeard C’est à dire sur le prix et non sur le temps ? Merci
Paul Thanks GraHal for the suggestion. I will open a topic for the strategy. Dany, there are sti...
Paul updates are posted in topic below https://www.prorealcode.com/topic/dayopen-straddle-for-da...
eugenio buongiorno paolo , volevo farti i complimenti x il lavoro fatto , funziona molto bene sul 3 ...
cfta Hi Fulvio, many thanks for sharing this clever indicator, much appreciated. As Pepsmile ment...
cfta Sorry adding the PRT to code didn't work in the above comment so I guess we will have to set...
juanj Something appears to be wrong with this formula as graphing t shows t to almost never be wit...
5 months ago
Maxime Baudin Interesting, Thank you! :)
franck-david Bonjour Nicolas , actuellement je me forme grace a vos videos tres tres bien expliques mer...
Nicolas Merci. ça n'est pas le lieu pour poser ce genre de question :) Merci d'utiliser le forum Pro...
6 months ago
Bebbo Thank you for your contribution. I have tested your system on some instruments and I like i...
T-rader I only get yellow candles. Can I change it?
ALE Please write any questions in this Topic "Heikin-Ashi candle smoothed TOPIC"
ALE T-rader Have you already find a solution?
Vonasi Discussion on this indicator/filter can be found here: https://www.prorealcode.com/topic/121...
Domenec Hola Nicolas todo y el suavizado es como el awesome da ala señal 3 velas atrasada a veces de...
pableitor Hola Domenec, un indicador muy original y util que ciertamente añade mucha informacion a la ...
Domenec Hola Pableitor porque aqui lo que pretendo es programar un nuevo codigao mas ajustado para q...
Juanjo Hola Domenec. He visto en los videos que hablas continuamente de mercado de futuros con grá...
Nicolas Thank you Xusto. Thank you a lot for your contribution :) Since your code is a Pathfinder'...
Xusto Hello, Fully Agree, I will update it with your advice. Btw Can would you like share you co...
Niklas johansson hägglund do you now if it's possible to use this strategy with this code in tradingview also?
Petersson Kristian Hi when I do back test I get 0 results, what do I do wrong? Trade Well Chris
JohnScher Yes i did before, see library/strategys/repulse and dpo https://www.prorealcode.com/proreal...
JohnScher Don't know what you're doing wrong. Import ITF and observe time zone settings. This should...
Arnaud HALVICK Hello! Very nice screener. Thank you! I am using it to scan stocks (weekly). It is very good.
odin you welcome. i would be glad when the screener is nice for you
HeikinAshi what do you think about using the screener in smaller time units (H1, M30) on indexes? And w...
Geronima Ortiz I watched the video three times, but I can not put the npips parameter as a variable. I do...
Geronima Ortiz I think the video is for an old version of prorealtime, the images do not correspond at all ...
Nicolas indicator1 = CALL “PRC_StopReversal”[npips, 1] and define npips in the optimization window ...
osupero https://www.screencast.com/t/QmSXRbBR
osupero https://www.screencast.com/t/2fCW8fkGsOeZ....solo posiciones largas por ahora
osupero https://www.screencast.com/t/MIaSZ2PRg