本页源码来自 TradingView 公开发布的开源脚本,版权归原作者所有, 请遵循其原始许可(Pine 脚本常见 CC BY-NC-SA / MPL-2.0 / MIT)。 本项目仅用于研究检索与许可范围内的移植。
//@version=4
study("Open Interest Stochastic Money Flow Index")
src=close
reverse = false
lights = input(title="Barcolor I / 0 ? ", options=["ON", "OFF"], defval="OFF")
adaptive = input(title="Market Type ", options=["FUTURES", "OTHERS"], defval="FUTURES")
bFX = false
//***** CFTC MARKET CODES *****
// 1 - Futures
sCode1 =
syminfo.root == "ZB" ? "020601" :
syminfo.root == "ZN" ? "043602" :
syminfo.root == "ZQ" ? "045601" :
syminfo.root == "ZT" ? "042601" :
syminfo.root == "ZS" ? "005602" :
syminfo.root == "DC" ? "052641" :
syminfo.root == "GF" ? "061641" :
syminfo.root == "LBS" ? "058643" :
syminfo.root == "QG" ? "023655" :
syminfo.root == "QM" ? "067655" :
syminfo.root == "SOYBNUSD" ? "005602" :
syminfo.root == "ZM" ? "026603" :
syminfo.root == "ZL" ? "007601" :
syminfo.root == "ZC" ? "002602" :
syminfo.root == "CORNUSD" ? "002602" :
syminfo.root == "ZW" ? "001602" :
syminfo.root == "WHEATUSD" ? "001602" :
syminfo.root == "KE" ? "001612" :
syminfo.root == "HE" ? "054642" :
syminfo.root == "LE" ? "057642" :
syminfo.root == "GC" ? "088691" :
syminfo.root == "XAUUSD" ? "088691" :
syminfo.root == "SI" ? "084691" :
syminfo.root == "XAGUSD" ? "084691" :
syminfo.root == "HG" ? "085692" :
syminfo.root == "XCUUSD" ? "085692" :
syminfo.root == "CL" ? "067651" :
syminfo.root == "WTICOUSD" ? "067651" :
syminfo.root == "BCOUSD" ? "06765T" :
syminfo.root == "HO" ? "022651" :
syminfo.root == "RB" ? "111659" :
syminfo.root == "NG" ? "023651" :
syminfo.root == "NATGASUSD" ? "023651" :
syminfo.root == "A6" ? "232741" :
syminfo.root == "6A" ? "232741" :
syminfo.root == "AUDUSD" ? "232741" :
syminfo.root == "B6" ? "096742" :
syminfo.root == "6B" ? "096742" :
syminfo.root == "6C" ? "090741" :
syminfo.root == "CADUSD" ? "090741" :
syminfo.root == "USDCAD" ? "090741" :
syminfo.root == "GBPUSD" ? "096742" :
syminfo.root == "USDGBP" ? "096742" :
syminfo.root == "D6" ? "090741" :
syminfo.root == "CADUSD" ? "090741" :
syminfo.root == "6Z" ? "122741" :
syminfo.root == "USDZAR" ? "122741" :
syminfo.root == "ZARUSD" ? "122741" :
syminfo.root == "E6" ? "099741" :
syminfo.root == "6E" ? "099741" :
syminfo.root == "EURUSD" ? "099741" :
syminfo.root == "J6" ? "097741" :
syminfo.root == "6J" ? "097741" :
syminfo.root == "JPYUSD" ? "097741" :
syminfo.root == "USDJPY" ? "097741" :
syminfo.root == "S6" ? "092741" :
syminfo.root == "6S" ? "092741" :
syminfo.root == "USDCHF" ? "092741" :
syminfo.root == "CHFUSD" ? "092741" :
syminfo.root == "SB" ? "080732" :
syminfo.root == "SUGARUSD" ? "080732" :
syminfo.root == "KC" ? "083731" :
syminfo.root == "CC" ? "073732" :
syminfo.root == "6N" ? "112741" :
syminfo.root == "6S" ? "092741" :
syminfo.root == "CT" ? "033661" :
syminfo.root == "ES" ? "13874A" :
syminfo.root == "SPX500USD" ? "13874A" :
syminfo.root == "RTY" ? "239742" :
syminfo.root == "YM" ? "12460P" :
syminfo.root == "NQ" ? "209742" :
syminfo.root == "NAS100USD" ? "209742" :
syminfo.root == "PA" ? "075651" :
syminfo.root == "XPDUSD" ? "075651" :
syminfo.root == "PL" ? "076651" :
syminfo.root == "XPTUSD" ? "076651" :
syminfo.root == "VX" ? "1170E1" :
syminfo.root == "M6" ? "095741" :
syminfo.root == "6M" ? "095741" :
syminfo.root == "USDMXN" ? "095741" :
syminfo.root == "MXNUSD" ? "095741" :
syminfo.root == "BTCUSD" ? "133741" :
syminfo.root == "BTCUSDT" ? "133741" :
syminfo.root == "XBTUSD" ? "133741" :
""
// Futures Open Interest
quandl_futures_oi = "QUANDL:CFTC/" + sCode1 + "_F_L_ALL"
_oi_futures = security (quandl_futures_oi + "|0", "W", close)
_vol_others = volume
// Switchable Weiss Wave Open Interest (Futures) / Weiss Wave Volume (Others)
float _switchable = na
if (adaptive=="FUTURES")
_switchable:= _oi_futures
if (adaptive=="OTHERS")
_switchable:= volume
// Open Interest Money Flow Index (OIMFI)
// Essential Functions :
f_ema(_src, _length)=>
_length_adjusted = _length < 1 ? 1 : _length
_multiplier = 2 / (_length_adjusted + 1)
_return = 0.00
_return := na(_return[1]) ? _src : ((_src - _return[1]) * _multiplier) + _return[1]
f_sum(_src , _length) =>
_output = 0.00
_length_adjusted = _length < 1 ? 1 : _length
for i = 0 to _length_adjusted-1
_output := _output + _src[i]
// FUNCTION HIGHEST AND LOWEST ( All Efforts goes to RicardoSantos )
f_highest(_src, _length)=>
_adjusted_length = _length < 1 ? 1 : _length
_value = _src
for _i = 0 to (_adjusted_length-1)
_value := _src[_i] >= _value ? _src[_i] : _value
_return = _value
f_lowest(_src, _length)=>
_adjusted_length = _length < 1 ? 1 : _length
_value = _src
for _i = 0 to (_adjusted_length-1)
_value := _src[_i] <= _value ? _src[_i] : _value
_return = _value
t_mfi = input(14 , type = input.integer , title = "MFI Period") // You can use non integer or mutable variables too !!
OverSold = input(20 , type = input.integer , title = "Oversold") // You can use non integer or mutable variables too !!
OverBought = input(80 , type = input.integer , title = "Overbought") // You can use non integer or mutable variables too !!
zero = 0
hundred = 100
limit = 50
upper_s = f_sum(_switchable * (change(src) <= 0 ? 0 : src), t_mfi)
lower_s = f_sum(_switchable * (change(src) >= 0 ? 0 : src), t_mfi)
_mfi = rsi(upper_s, lower_s)
// Open Interest Stochastic Money Flow Index
lengthMFI = 14
lengthStoch = 14
smoothK = lengthMFI/3
smoothD = lengthStoch/3
f_stoch(_src , _length) =>
100 * (_src - f_lowest(f_lowest(_src ,1), _length)) / (f_highest(f_highest(_src , 1), _length) - f_lowest(f_lowest(_src ,1), _length))
// Definition : Variables K3 and D
k3 = f_ema(f_stoch(_mfi, lengthStoch), smoothK)
d = f_ema(k3, smoothD)
pos_moment = crossover(k3,d)
neg_moment = crossunder(k3,d)
col_bg = pos_moment ? color.teal : neg_moment ? color.maroon : na
// Plot data
h1 = hline(OverSold, color=#C0C0C0 , title = "Oversold Level")
h2 = hline(OverBought,color=#C0C0C0 , title = "Overbought Level")
plot(k3, color=#0070FF , title="K-line" , linewidth = 1,transp = 0)
plot(d, color=#FF8C00 , title="D-line",linewidth=1,transp = 0)
fill(h1, h2, color=#66023C , transp=90, title="Border")
bgcolor(col_bg , transp = 58 , title = "Background Color")
plot(pos_moment ? zero :na, style=plot.style_cross, color=color.green , linewidth=3, transp=0 ,title = "Crossover")
plot(neg_moment ? zero :na, style=plot.style_cross, color=color.red , linewidth=3, transp=0 ,title = "Crossunder")
// Barcolor (All efforts goes to Hpotter)
pos = iff(k3 > d , 1,-1)
possig = iff(reverse and pos == 1, -1,
iff(reverse and pos == -1, 1, pos))
// Switchable Barcolor Preference
_lights = 0.00
if (lights=="ON")
_lights:= 1.00
if (lights=="OFF")
_lights:= -1.00
bcolor_on = _lights == 1.00
bcolor_off = _lights == -1.00
barcolor(possig == -1 and bcolor_on ? color.red: possig == 1 and bcolor_on ? color.green : na )
// Alerts
alertcondition(possig ==1 , title='Buy Signal', message='Buy Signal ')
alertcondition(possig ==-1, title='Sell Signal', message='Sell Signal ')