Moderator: admin
-- Code Begins Here
-- Period is user adjustable
Period:14;
-- Calculate Balance of Power Reward
BullsRewardBasedOnOpen = (High - Open) / (High - Low);
BearsRewardBasedOnOpen = (Open - Low) / (High - Low);
BullsRewardBasedOnClose = (Close - Low) / (High - Low);
BearsRewardBasedOnClose = (High - Close) / (High - Low);
BullsRewardBasedOnBoth = IF(Close > Open, (Close - Open) / (High - Low), 0);
BearsRewardBasedOnBoth = IF(Close > Open, 0, (Open - Close) / (High - Low));
BullRewardDaily = (BullsRewardBasedOnOpen + BullsRewardBasedOnClose + BullsRewardBasedOnBoth) / 3;
BearRewardDaily = (BearsRewardBasedOnOpen + BearsRewardBasedOnClose + BearsRewardBasedOnBoth) / 3;
-- Calculate Balance of Power
BalanceOfMarketPower := BullRewardDaily - BearRewardDaily;
-- Plot Balance of Market Power
-- Moving Average Type is user selectable (Simple, Exponential, Weighted, et cetera.)
MA(Period, Exponential, BalanceOfMarketPower);
local THL;
if (source.high[period] -source.low[period]) == 0 then
THL=0.00001;
else
THL=source.high[period]-source.low[period];
end
local BuRBoO=(source.high[period]-source.open[period])/THL;
local BeRBoO=(source.open[period]-source.low[period])/THL;
local BuRBoC=(source.close[period]-source.low[period])/THL;
local BeRBoC=(source.high[period]-source.close[period])/THL;
local BuRBoOC;
if source.close[period] >source.open[period] then
BuRBoOC=(source.close[period]-source.open[period])/THL;
else
BuRBoOC=0;
end
--BeRBoOC:=If(C>O,0,(O-C)/(THL));
local BeRBoOC;
if source.close[period] >source.open[period] then
BeRBoOC=0;
else
BeRBoOC=(source.open[period]-source.close[period])/THL;
end
MA:update(mode);
BMP[period] = (BuRBoO+BuRBoC+BuRBoOC)/3 - (BeRBoO+BeRBoC+BeRBoOC)/3;
Signal[period] = MA.DATA[period];
Users browsing this forum: Baidu [Spider] and 38 guests