MFI - 缩放 pos 和 neg 资金流
MFI - scaling pos and neg money flow
代码
length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000)
src = hlc3
mfipos = sum(volume * (change(src) <= 0 ? 0 : src), length)
mfineg = sum(volume * (change(src) >= 0 ? 0 : src), length)
_rsi(mfipos, mfineg) =>
if mfipos == 0
100
if mfineg == 0
0
100.0 - (100.0 / (1.0 + mfipos / mfineg))
mf = _rsi(mfipos, mfineg)
plot(mfipos, color=#FF7000, linewidth=2, title='MFI pos')
plot(mfineg, color=#0088FA, linewidth=2, title='MFI neg')
MFI 是有限的。
Pos 和 Neg 资金流量图不绘制以下价格图。
为此,您可能需要使用 study() 函数的 scale
参数。
省去了规范化的麻烦。
参考手册中的study()函数摘录:
scale (const integer) price scale that the indicator should be
attached to. Possible values are: scale.right, scale.left, scale.none.
Value scale.none can be applied only in combination with
'overlay=true' setting. If omitted, using scale from main series.
示例 scale.left
//@version=4
study("Test", shorttitle="TST", overlay=true, scale=scale.left)
length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000)
src = hlc3
mfiSlow = sum(volume * (change(src) <= 0 ? 0 : src), length)
mfiFast = sum(volume * (change(src) >= 0 ? 0 : src), length)
_rsi(mfiSlow, mfiFast) =>
if mfiFast == 0
100
if mfiSlow == 0
0
100.0 - (100.0 / (1.0 + mfiSlow / mfiFast))
mf = _rsi(mfiSlow, mfiFast)
plot(mfiSlow, color=#FF7000, linewidth=2, title='MFI Slow')
plot(mfiFast, color=#0088FA, linewidth=2, title='MFI Fast')
产生
使用scale.none
会产生这个
资金流量指数是一个从 0 到 100 的有界函数。为了按照我的需要正确绘制正负资金流量,我需要标准化最小值和最大值。
结果:
//Normal MFI calculation
length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000)
src = hlc3
mfiPositive = sum(volume * (change(src) <= 0 ? 0 : src), length)
mfiNegative = sum(volume * (change(src) >= 0 ? 0 : src), length)
//MFI variables to normalize data to be plotted
mfiLow = lowest(length)
mfiHigh = highest(length)
min_mfiPos = lowest(mfiPositive, length)
min_mfiNeg = lowest(mfiNegative, length)
max_mfiPos = highest(mfiPositive, length)
max_mfiNeg = highest(mfiNegative, length)
mfiPosNorm = mfiHigh + (mfiPositive - min_mfiPos) * (mfiHigh - mfiLow) / (max_mfiPos - min_mfiPos)
mfiNegNorm = mfiHigh + (mfiNegative - min_mfiNeg) * (mfiHigh - mfiLow) / (max_mfiNeg - min_mfiNeg)
_rsi(mfiPositive, mfiNegative) =>
if mfiNegative == 0
100
if mfiPositive == 0
0
100 - (100 / (1.0 + mfiPositive / mfiNegative))
mf = _rsi(mfiPositive, mfiNegative)
plot(mfiPosNorm, color=colorNavy, linewidth=2, title='MFI Positive Money Flow')
plot(mfiNegNorm, color=colorFuchsia, linewidth=2, title='MFI Negative Money Flow')
代码
length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000)
src = hlc3
mfipos = sum(volume * (change(src) <= 0 ? 0 : src), length)
mfineg = sum(volume * (change(src) >= 0 ? 0 : src), length)
_rsi(mfipos, mfineg) =>
if mfipos == 0
100
if mfineg == 0
0
100.0 - (100.0 / (1.0 + mfipos / mfineg))
mf = _rsi(mfipos, mfineg)
plot(mfipos, color=#FF7000, linewidth=2, title='MFI pos')
plot(mfineg, color=#0088FA, linewidth=2, title='MFI neg')
MFI 是有限的。 Pos 和 Neg 资金流量图不绘制以下价格图。
为此,您可能需要使用 study() 函数的 scale
参数。
省去了规范化的麻烦。
参考手册中的study()函数摘录:
scale (const integer) price scale that the indicator should be attached to. Possible values are: scale.right, scale.left, scale.none. Value scale.none can be applied only in combination with 'overlay=true' setting. If omitted, using scale from main series.
示例 scale.left
//@version=4
study("Test", shorttitle="TST", overlay=true, scale=scale.left)
length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000)
src = hlc3
mfiSlow = sum(volume * (change(src) <= 0 ? 0 : src), length)
mfiFast = sum(volume * (change(src) >= 0 ? 0 : src), length)
_rsi(mfiSlow, mfiFast) =>
if mfiFast == 0
100
if mfiSlow == 0
0
100.0 - (100.0 / (1.0 + mfiSlow / mfiFast))
mf = _rsi(mfiSlow, mfiFast)
plot(mfiSlow, color=#FF7000, linewidth=2, title='MFI Slow')
plot(mfiFast, color=#0088FA, linewidth=2, title='MFI Fast')
产生
使用scale.none
会产生这个
资金流量指数是一个从 0 到 100 的有界函数。为了按照我的需要正确绘制正负资金流量,我需要标准化最小值和最大值。
结果:
//Normal MFI calculation
length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000)
src = hlc3
mfiPositive = sum(volume * (change(src) <= 0 ? 0 : src), length)
mfiNegative = sum(volume * (change(src) >= 0 ? 0 : src), length)
//MFI variables to normalize data to be plotted
mfiLow = lowest(length)
mfiHigh = highest(length)
min_mfiPos = lowest(mfiPositive, length)
min_mfiNeg = lowest(mfiNegative, length)
max_mfiPos = highest(mfiPositive, length)
max_mfiNeg = highest(mfiNegative, length)
mfiPosNorm = mfiHigh + (mfiPositive - min_mfiPos) * (mfiHigh - mfiLow) / (max_mfiPos - min_mfiPos)
mfiNegNorm = mfiHigh + (mfiNegative - min_mfiNeg) * (mfiHigh - mfiLow) / (max_mfiNeg - min_mfiNeg)
_rsi(mfiPositive, mfiNegative) =>
if mfiNegative == 0
100
if mfiPositive == 0
0
100 - (100 / (1.0 + mfiPositive / mfiNegative))
mf = _rsi(mfiPositive, mfiNegative)
plot(mfiPosNorm, color=colorNavy, linewidth=2, title='MFI Positive Money Flow')
plot(mfiNegNorm, color=colorFuchsia, linewidth=2, title='MFI Negative Money Flow')