Good morning and a Happy New Year!
I am trying to create a trading system based on the indicator posted by Nicolas, One More Average MACD, but I fail. I tried to tweak the different parameters but without any results. Any ideas why?
Thanks!!
//-------------------------------------------------------------------------
defparam cumulateorders=false
Defparam preloadbars=10000
amount = 10 //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/
//Coded by: 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
//--------
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
averagePeriod = SLength
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)
Slow = 1.5 * e5 - 0.5 * e6
//------------------------------------
//--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
Vous utilisez le même nom pour 2 variables différentes.
Il faut un nom différent pour chaque nouvelle variable.
You use the same name for 2 different variables.
Each new variable needs a different name.
Merci pour votre réponse rapide! Cependant, je ne comprends pas ce que vous voulez dire. OMAMACD et SIGMACD sont des variables différentes, ou voulez-vous dire quelques autres? Merci de votre patience!
Thanks for your quick answer! However, I do not understand what you mean. OMAMACD and SIGMACD are different variables, or do you mean some others? Thanks for your patience!
Like for example “averagePeriod” in the “Fast moving average”.
“AveragePeriod” in the “Slow moving average” must be renamed differently as “SaveragePeriod” and so on for all the variables written in black color.
You need to ensure that there are enough bars before starting the calculations. With the standard settings it seems a minimum of 129 bars are required.
//-------------------------------------------------------------------------
defparam cumulateorders=false
Defparam preloadbars=10000
amount = 1 //quantity of shares/contracts to open for each new order
///PRC_OneMoreAverage MACD | indicator
//23.11.2016
//Nicolas @ www.prorealcode.com
//Sharing ProRealTime knowledge
//--parameters
//>OMA parameters
Sensibility = 1
Adaptive = 1
//>MACD periods
FLength = 24
SLength = 52
//>signal line
SigLength = 9
Sigma = 4
Offset = 0.85
//--------
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
averagePeriod = SLength
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)
Slow = 1.5 * e5 - 0.5 * e6
//------------------------------------
//--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
//Conditions when to act
BullSMA=(SIGMACD<OMAMACD)
BearSMA=(SIGMACD>OMAMACD)
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
graph sigmacd
graph omamacd
Matriciel – Please only use English in the English speaking forums. Using two languages just bloats the topics.
In the code it is OK to use the same variable name several times in different calculations as its new value for it is calculated prior to its use each time. Its previous value is not part of the calculation so that is fine.
I just checked my code from my last post and it seems that the values of SIGMACD and OMAMACD are not calculated the same as the indicator returned values. Not sure why – might need to spend a little more time on this!
Thank you both! I tried to implement both your suggestions, but I still fail, now with an error… Thanks for your time!
//-------------------------------------------------------------------------
defparam cumulateorders=false
Defparam preloadbars=10000
amount = 10 //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
//--------
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
I used Vonasi version and got attached … no error messages.
Ain’t never seen a Gain to Loss ratio as high as attached!!
but I still fail, now with an error
Your version just needs an extra endif adding at line 131
for me in Soulintact to plot an other endif a the end
but Grahal what do you use as code because for me no result
@Madrosat here you are … attached is Soulintact v1.1 as the top image.
All I did was add endif as the last line to Soulintact v1.1 version
Attached is the code
Ain’t never seen a Gain to Loss ratio as high as attached!!
That’s what happens if you never close any losing positions! The strategy does not exit unless it is profit. At some point you will find drawdown to be as impressive as gain/loss ratio!
Thank you for all your help. Truly appreciated! Take care and have a great start of 2020!
You too soulintact … keep on doing more of the same!!
I wish I had put both versions Live … they’ve made nearly £80 over 3 trades in the last 3 hours!!!! hahahahaha