ProRealCode - Trading & Coding with ProRealTime™
Hi together,
I’ve tried to fix the code a littlebit while using HA-Candles instead of normal Japanese Candle-Sticks and to expand days from non trading day monday to friday.
There is a bug within the code and nothing happens when starting backtest.
Can somebody try to check where I made the mistake?
Thank you in advance
Marc
DEFPARAM CumulateOrders = false
EntryOpen = (open[1]+close[1])/2 //alternativ close
EntryClose = (open+close+low+high)/4 //alternativ open
TIMEFRAME (Monthly, updateonclose)
IF EntryClose > EntryOpen THEN
MyMonth = 1 //BULLish
ELSE
MyMonth = -1 //BEARish
ENDIF
TIMEFRAME (Weekly, updateonclose)
IF EntryClose > EntryOpen THEN
MyWeek = 1 //BULLish
ELSE
MyWeek = -1 //BEARish
ENDIF
TIMEFRAME (Daily, updateonclose)
ONCE AlreadyTraded = 0
IF EntryClose > EntryOpen THEN
MyDay = 1 //BULLish
ELSE
MyDay = -1 //BEARish
ENDIF
ThisDay = OpenDay
IF ThisDay = 1 AND Not OnMarket AND AlReadyTraded = 0 THEN //Monday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay = 1
IF GoLong THEN
EntryPrice = Max(high,close) //alternativ high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = Min(low,close) //alternativ low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 2 AND Not OnMarket AND AlReadyTraded = 0 THEN //Tuesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = Max(high,close) //alternativ high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = Min(low,close) //alternativ low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 3 AND Not OnMarket AND AlReadyTraded = 0 THEN //Wednesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = Max(high,close) //alternativ high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = Min(low,close) //alternativ low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 4 AND Not OnMarket AND AlReadyTraded = 0 THEN //Thursday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = Max(high,close) //alternativ high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = Min(low,close) //alternativ low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 5 AND Not OnMarket AND AlReadyTraded = 0 THEN //Friday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = Max(high,close) //alternativ high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = Min(low,close) //alternativ low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 1 OR 2 OR 3 OR 4 OR 5 AND Not OnMarket THEN
AlreadyTraded = 0
ENDIF
IF OnMarket THEN
AlreadyTraded = 1
ENDIF
This the code I adapted to non-MTF platforms
DEFPARAM CumulateOrders = false
//////////////////////////////////////////////////////////////////////////////////
// code to simulate accessing the MONTHLY TF
// to retrieve previous month's OPEN & CLOSE
//
//TIMEFRAME (Monthly, updateonclose)
FOR i = 1 TO 31
IF OpenMonth[i] <> OpenMonth[i - 1] THEN
MyMonthClose = close[i] //Last Day of previous Month (month IDs differ)
FOR j = i + 1 TO i + 31
IF OpenMonth[j] <> OpenMonth[j - 1] THEN
MyMonthOpen = close[j - 1] //First Day of previous Month (month IDs differ)
BREAK
ENDIF
NEXT
BREAK
ENDIF
NEXT
IF MyMonthClose > MyMonthOpen THEN
MyMonth = 1 //BULLish
ELSE
MyMonth = -1 //BEARish
ENDIF
//////////////////////////////////////////////////////////////////////////////////
// code to simulate accessing the WEEKLY TF
// to retrieve previous week's OPEN & CLOSE
//
//TIMEFRAME (Weekly, updateonclose)
FOR i = 1 TO 13
IF OpenDayOfWeek[i] = 5 THEN
MyWeekClose = close[i] //When day 5 closes, the WEEK is also closing
MyWeekOpen = close[i + 5] //5 days before it was SUNDAY, thus week's opening
BREAK
ENDIF
NEXT
IF MyWeekClose > MyWeekOpen THEN
MyWeek = 1 //BULLish
ELSE
MyWeek = -1 //BEARish
ENDIF
//TIMEFRAME (Daily, updateonclose)
ONCE AlreadyTraded = 0
IF close > open THEN
MyDay = 1 //BULLish
ELSE
MyDay = -1 //BEARish
ENDIF
ThisDay = OpenDayOfWeek
IF ThisDay = 1 AND Not OnMarket AND AlReadyTraded = 0 THEN //Monday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 2 AND Not OnMarket AND AlReadyTraded = 0 THEN //Tuesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 1 AND Not OnMarket THEN
AlreadyTraded = 0
ENDIF
IF OnMarket THEN
AlreadyTraded = 1
ENDIF
As for your previous code on top of the page, when changing code I suggest that you change 1 feature at a time and when THAT feature works go on to add another one, otherwise you (and everybody else) will be lost!
If you want to add days after Tuesday lines 58-59 (for Wednesday) should be replaced by
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[2] = -1 AND MyDay[1] = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[2] = 1 AND MyDay[1] = 1 AND MyDay = 1
if you still want to check the same trend is upgoing.
Moreover, my fault, line 24 of my original code and your line 25 should be replaced by
ThisDay = OpenDayOfWeek
Hi Roberto,
this is the amended Code which contains the addition of ‘AND MyDay = -1’ & ‘AND MyDay = 1’ for all other days than Monday and Tuesday.
Amendment contains also the syntax ‘ThisDay = OpenDayOfWeek’
DEFPARAM CumulateOrders = false
EntryOpen = (open[1]+close[1])/2 //alternativ close
EntryClose = (open+close+low+high)/4 //alternativ open
TIMEFRAME (Monthly, updateonclose)
IF EntryClose > EntryOpen THEN
MyMonth = 1 //BULLish
ELSE
MyMonth = -1 //BEARish
ENDIF
TIMEFRAME (Weekly, updateonclose)
IF EntryClose > EntryOpen THEN
MyWeek = 1 //BULLish
ELSE
MyWeek = -1 //BEARish
ENDIF
TIMEFRAME (Daily, updateonclose)
ONCE AlreadyTraded = 0
IF EntryClose > EntryOpen THEN
MyDay = 1 //BULLish
ELSE
MyDay = -1 //BEARish
ENDIF
ThisDay = OpenDayOfWeek
IF ThisDay = 1 AND Not OnMarket AND AlReadyTraded = 0 THEN //Monday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay = 1
IF GoLong THEN
EntryPrice = Max(high,close) //alternativ high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = Min(low,close) //alternativ low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 2 AND Not OnMarket AND AlReadyTraded = 0 THEN //Tuesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = Max(high,close) //alternativ high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = Min(low,close) //alternativ low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 3 AND Not OnMarket AND AlReadyTraded = 0 THEN //Wednesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = Max(high,close) //alternativ high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = Min(low,close) //alternativ low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 4 AND Not OnMarket AND AlReadyTraded = 0 THEN //Thursday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1 AND MyDay = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1 AND MyDay = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = Max(high,close) //alternativ high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = Min(low,close) //alternativ low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 5 AND Not OnMarket AND AlReadyTraded = 0 THEN //Friday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1 AND MyDay = -1 AND MyDay = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1 AND MyDay = 1 AND MyDay = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = Max(high,close) //alternativ high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = Min(low,close) //alternativ low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 1 OR 2 OR 3 OR 4 OR 5 AND Not OnMarket THEN
AlreadyTraded = 0
ENDIF
IF OnMarket THEN
AlreadyTraded = 1
ENDIF
It’s still looking a little bit wrong in it’s structure…I used first code:
DEFPARAM CumulateOrders = false
TIMEFRAME (Monthly, updateonclose)
IF close > open THEN
MyMonth = 1 //BULLish
ELSE
MyMonth = -1 //BEARish
ENDIF
TIMEFRAME (Weekly, updateonclose)
IF close > open THEN
MyWeek = 1 //BULLish
ELSE
MyWeek = -1 //BEARish
ENDIF
TIMEFRAME (Daily, updateonclose)
ONCE AlreadyTraded = 0
IF close > open THEN
MyDay = 1 //BULLish
ELSE
MyDay = -1 //BEARish
ENDIF
ThisDay = OpenDayofWeek
IF ThisDay = 1 AND Not OnMarket AND AlReadyTraded = 0 THEN //Monday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 2 AND Not OnMarket AND AlReadyTraded = 0 THEN //Tuesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 3 AND Not OnMarket AND AlReadyTraded = 0 THEN //Wednesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 4 AND Not OnMarket AND AlReadyTraded = 0 THEN //Thursday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1 AND MyDay = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1 AND MyDay = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 5 AND Not OnMarket AND AlReadyTraded = 0 THEN //Friday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay = -1 AND MyDay = -1 AND MyDay = -1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay = 1 AND MyDay = 1 AND MyDay = 1 AND MyDay = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 1 AND Not OnMarket THEN
AlreadyTraded = 0
ENDIF
IF OnMarket THEN
AlreadyTraded = 1
ENDIF
As you add more days you’ll have to add further references to past instancesc of MyDay, thus MyDay, MyDay[1], MyDay[2],…
Read https://www.prorealcode.com/topic/check-of-previous-candles/page/2/#post-76698.
Hi Roberto,
I see, I see…Thank you I will amend the code and paste latest version
Rgds
Marc
Amended Code
TIMEFRAME (Monthly, updateonclose)
IF close > open THEN
MyMonth = 1 //BULLish
ELSE
MyMonth = -1 //BEARish
ENDIF
TIMEFRAME (Weekly, updateonclose)
IF close > open THEN
MyWeek = 1 //BULLish
ELSE
MyWeek = -1 //BEARish
ENDIF
TIMEFRAME (Daily, updateonclose)
ONCE AlreadyTraded = 0
IF close > open THEN
MyDay = 1 //BULLish
ELSE
MyDay = -1 //BEARish
ENDIF
ThisDay = OpenDayofWeek
IF ThisDay = 1 AND Not OnMarket AND AlReadyTraded = 0 THEN //Monday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 2 AND Not OnMarket AND AlReadyTraded = 0 THEN //Tuesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay[2] = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay[2] = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 3 AND Not OnMarket AND AlReadyTraded = 0 THEN //Wednesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay[2] = -1 AND MyDay[3] = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay[2] = 1 AND MyDay[3] = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 4 AND Not OnMarket AND AlReadyTraded = 0 THEN //Thursday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay[2] = -1 AND MyDay[3] = -1 AND MyDay[4] = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay[2] = 1 AND MyDay[3] = 1 AND MyDay[4] = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 5 AND Not OnMarket AND AlReadyTraded = 0 THEN //Friday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay[2] = -1 AND MyDay[3] = -1 AND MyDay[4] = -1 AND MyDay[5] = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay[2] = 1 AND MyDay[3] = 1 AND MyDay[4] = 1 AND MyDay[5] = 1
IF GoLong THEN
EntryPrice = high
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = low
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 1 AND Not OnMarket THEN
AlreadyTraded = 0
ENDIF
IF OnMarket THEN
AlreadyTraded = 1
ENDIF
When checking System with manually traded one the differences are really big.
I have no idea why the backtest show this negative results -.-
Hi together,
I’d like to receive some help again. Is it possible to change the value of close to heikin ashi close?
Is it correct to change close versus (open+close+low+high)/4 ?
The same idea for open: instead of open i would change the code to (open[1]+close[1])/2
Then I need to calculate the high and low also in heikin ashi based calculation-system
Thank you very much for your help.
Marc
There’s no instruction to deal with Heikin Ashi candles, when you want to reference them you’ll have to set them up like that
IF BarIndex=0 THEN
xClose = (open+high+low+close)/4
xOpen = open
xHigh = high
xLow = low
ELSE
xClose = (open+high+low+close)/4
xOpen = (xOpen[1]+xClose[1])/2
xHigh = Max(max(high, xOpen), xClose)
xLow = Min(min(Low, xOpen), xClose)
endif
this code is ready AS IS, just reference xClose, xOpen, xHigh, xLow to get Heikin Ashi values.
Some prefer to use variable names with leading HA instead of X, you can change them as you like.
To deal with HA you may use the search box to find out what HEIKIN (or ASHI, or HA) returns.
Hi Roberto thank you very much. Where can I set Barindex?
Only as variablke on Top of the Code a la
‘BarIndex = 0’
afterwards the rest of the code incl. amendmends?
Where can I set Barindex?
You do not need to set BARINDEX. It is the filing system for the bars on any chart. The first bar is BARINDEX =1 and the second is BARINDEX =2 and so on. If there are 10000 bars on your chart then the current bar is BARINDEX = 10000
Heres is the amended code:
TIMEFRAME (Monthly, updateonclose)
xClose = (open+high+low+close)/4
xOpen = (xOpen[1]+xClose[1])/2
xHigh = Max(max(high, xOpen), xClose)
xLow = Min(min(Low, xOpen), xClose)
IF (open+high+low+close)/4 > (xOpen[1]+xClose[1])/2 THEN
MyMonth = 1 //BULLish
ELSE
MyMonth = -1 //BEARish
ENDIF
TIMEFRAME (Weekly, updateonclose)
IF (open+high+low+close)/4 > (xOpen[1]+xClose[1])/2 THEN
MyWeek = 1 //BULLish
ELSE
MyWeek = -1 //BEARish
ENDIF
TIMEFRAME (Daily, updateonclose)
ONCE AlreadyTraded = 0
IF (open+high+low+close)/4 > (xOpen[1]+xClose[1])/2 THEN
MyDay = 1 //BULLish
ELSE
MyDay = -1 //BEARish
ENDIF
ThisDay = OpenDayofWeek
IF ThisDay = 1 AND Not OnMarket AND AlReadyTraded = 0 THEN //Monday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay = 1
IF GoLong THEN
EntryPrice = xHigh
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = xLow
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 2 AND Not OnMarket AND AlReadyTraded = 0 THEN //Tuesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay[2] = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay[2] = 1
IF GoLong THEN
EntryPrice = xHigh
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = xLow
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 3 AND Not OnMarket AND AlReadyTraded = 0 THEN //Wednesday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay[2] = -1 AND MyDay[3] = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay[2] = 1 AND MyDay[3] = 1
IF GoLong THEN
EntryPrice = xHigh
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = xLow
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 4 AND Not OnMarket AND AlReadyTraded = 0 THEN //Thursday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay[2] = -1 AND MyDay[3] = -1 AND MyDay[4] = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay[2] = 1 AND MyDay[3] = 1 AND MyDay[4] = 1
IF GoLong THEN
EntryPrice = xHigh
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = xLow
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 5 AND Not OnMarket AND AlReadyTraded = 0 THEN //Friday
GoLong = MyMonth = 1 AND MyWeek = 1 AND MyDay[1] = -1 AND MyDay[2] = -1 AND MyDay[3] = -1 AND MyDay[4] = -1 AND MyDay[5] = -1
GoShort = MyMonth = -1 AND MyWeek = -1 AND MyDay[1] = 1 AND MyDay[2] = 1 AND MyDay[3] = 1 AND MyDay[4] = 1 AND MyDay[5] = 1
IF GoLong THEN
EntryPrice = xHigh
BUY 1 CONTRACT AT EntryPrice LIMIT
ELSIF GoShort THEN
EntryPrice = xLow
SELLSHORT 1 CONTRACT AT EntryPrice LIMIT
ENDIF
Sl = AverageTrueRange[2](close)
Tp = Sl
SET Stop Loss Sl
SET Target Profit Tp
ENDIF
IF ThisDay = 1 AND Not OnMarket THEN
AlreadyTraded = 0
ENDIF
IF OnMarket THEN
AlreadyTraded = 1
ENDIF
I think this should be correct…
When testing this system with it’s new parameters continaing ha-calculation of candles the return is confusing, because it’s very negative and shows only a downside curve…Anybody there who is willing to test this and confirms this?
Rgds
Marc
Check of previous candles
This topic contains 31 replies,
has 3 voices, and was last updated by Marc
7 years, 7 months ago.
| Forum: | ProOrder: Automated Strategies & Backtesting |
| Language: | English |
| Started: | 07/13/2018 |
| Status: | Active |
| Attachments: | 4 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.