lcenovsky

COT Index by cendalc

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:
  • 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.

Mã nguồn mở

Với tinh thần TradingView, tác giả của tập lệnh này đã xuất bản nó dưới dạng mã nguồn mở, vì vậy các nhà giao dịch có thể hiểu và xác minh nó. Chúc mừng tác giả! Bạn có thể sử dụng mã này miễn phí, nhưng việc sử dụng lại mã này trong một ấn phẩm chịu sự điều chỉnh của Nội quy nội bộ. Bạn có thể yêu thích nó để sử dụng nó trên biểu đồ.

Thông báo miễn trừ trách nhiệm

Thông tin và ấn phẩm không có nghĩa là và không cấu thành, tài chính, đầu tư, kinh doanh, hoặc các loại lời khuyên hoặc khuyến nghị khác được cung cấp hoặc xác nhận bởi TradingView. Đọc thêm trong Điều khoản sử dụng.

Bạn muốn sử dụng tập lệnh này trên biểu đồ?
//@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)