Legacy and disaggregated COT index for several commodities I trade:
ZC, ZW, ZS, ZL, ZM, HG, GC, SI, CC, KC, CT, OJ, SB, CL, HO, NG
Available indexes:
Data is taken from Quandl: www.quandl.com/data/CFTC
Default week period is 26 except for CC, KC, CT, OJ, SB, CL, HO and NG where it is 13. You can set your own period.
Works correctly on weekly and daily data. Daily length is correctly computed from trade days in weeks.
Displays the previous cot index for the current week if COT report has not yet been published.
ZC, ZW, ZS, ZL, ZM, HG, GC, SI, CC, KC, CT, OJ, SB, CL, HO, NG
Available indexes:
- Commercials Index
- Large traders Index
- Producers Index
- Managed Money Index
Data is taken from Quandl: www.quandl.com/data/CFTC
Default week period is 26 except for CC, KC, CT, OJ, SB, CL, HO and NG where it is 13. You can set your own period.
Works correctly on weekly and daily data. Daily length is correctly computed from trade days in weeks.
Displays the previous cot index for the current week if COT report has not yet been published.
//@version=2 study("COT Index by cendalc", shorttitle="COT Index", precision=1) qticker = syminfo.root == "ZC" ? "C" : syminfo.root == "ZW" ? "W" : syminfo.root == "ZS" ? "S" : syminfo.root == "ZL" ? "BO" : syminfo.root == "ZM" ? "SM" : syminfo.root == "HG" ? "HG" : syminfo.root == "GC" ? "GC" : syminfo.root == "SI" ? "SI" : syminfo.root == "CC" ? "CC" : syminfo.root == "KC" ? "KC" : syminfo.root == "CT" ? "CT" : syminfo.root == "OJ" ? "OJ" : syminfo.root == "SB" ? "SB" : syminfo.root == "CL" ? "CL" : syminfo.root == "HO" ? "HO" : syminfo.root == "NG" ? "NG" : "" force_length = input(0, title="Weeks (0 = automatic)") length = force_length != 0 ? force_length : syminfo.root == "CC" ? 13 : syminfo.root == "KC" ? 13 : syminfo.root == "CT" ? 13 : syminfo.root == "OJ" ? 13 : syminfo.root == "SB" ? 13 : syminfo.root == "CL" ? 13 : syminfo.root == "HO" ? 13 : syminfo.root == "NG" ? 13 : 26 GetDailyAdjustment(weeks) => weekCount = weeks daily_adjust = 1 tmp = for i = 0 to (length * 5) weekCount := weekCount - iff(dayofweek[i] < dayofweek[i+1], 1, 0) if weekCount <= 0 break daily_adjust := daily_adjust + 1 daily_adjust Highest(x, y) => ret = x for i = 1 to y-1 ret := max(ret, x[i]) Lowest(x, y) => ret = x for i = 1 to y-1 ret := min(ret, x[i]) legacy_cot = "QUANDL:CFTC/" + qticker + "_FO_L_ALL|" cot = "QUANDL:CFTC/" + qticker + "_FO_ALL|" oi = security(legacy_cot + "0", "W", close) no_cot_adjst = oi == oi[1] ? 1 : 0 length_adjst = isdaily ? GetDailyAdjustment(length + no_cot_adjst) : length + no_cot_adjst comm_lg = security(legacy_cot + "4", "W", close) comm_sh = security(legacy_cot + "5", "W", close) comm_net = comm_lg - comm_sh large_lg = security(legacy_cot + "1", "W", close) large_sh = security(legacy_cot + "2", "W", close) large_net = large_lg - large_sh other_lg = security(legacy_cot + "8", "W", close) other_sh = security(legacy_cot + "9", "W", close) other_net = other_lg - other_sh comm_max = Highest(comm_net, length_adjst) comm_min = Lowest(comm_net, length_adjst) comm_idx = if (dayofweek > nz(dayofweek[1])) comm_idx[1] else 100 * (comm_net - comm_min) / (comm_max - comm_min) large_max = Highest(large_net, length_adjst) large_min = Lowest(large_net, length_adjst) large_idx = if (dayofweek > nz(dayofweek[1])) large_idx[1] else 100 * (large_net - large_min) / (large_max - large_min) prod_lg = security(cot + "1", "W", close) prod_sh = security(cot + "2", "W", close) prod_net = prod_lg - prod_sh manag_lg = security(cot + "6", "W", close) manag_sh = security(cot + "7", "W", close) manag_net = manag_lg - manag_sh prod_max = Highest(prod_net, length_adjst) prod_min = Lowest(prod_net, length_adjst) prod_idx = if (isdaily and (dayofweek > nz(dayofweek[1]))) prod_idx[1] else 100 * (prod_net - prod_min) / (prod_max - prod_min) manag_max = Highest(manag_net, length_adjst) manag_min = Lowest(manag_net, length_adjst) manag_idx = if (dayofweek > nz(dayofweek[1])) manag_idx[1] else 100 * (manag_net - manag_min) / (manag_max - manag_min) plot(comm_idx, color=blue, title="Commercials Index", style=line, linewidth=2) plot(large_idx, color=green, title="Large traders Index", style=line, linewidth=1) plot(prod_idx, color=aqua, title="Producers Index", style=line, linewidth=2) plot(manag_idx, color=lime, title="Managed Money Index", style=line, linewidth=1)