# 交易策略程式碼教學 – KDJ 隨即指標

## 交易策略程式碼教學 - KDJ 隨即指標

// KDJ Indicators
//@version = 4
strategy("Yaonology KDJ Indicators Tutorial", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, initial_capital = 10000, commission_type =
strategy.commission.percent, commission_value = 0)

prd = input(9, title="period")
sgnl = input(3, title="signal")

v(s,l,m) =>
v = 0.0
v := (m*s+(l-m)*nz(v[1]))/l

c = close
h = highest(high, prd)
l = lowest(low,prd)
RSV = 100*((c-l)/(h-l)

K = v(RSV, sgnl, 1)

D = v(K, sgnl, 1)
J = 3 * K-2 * D

plot(K, color = color.green)
plot(D, color = color.red)
plot(J, color = color.black)

if (K < 20 and D < 20 and J < 20 and K > D and K[1] < D[1]) or (J > 0 and J[1] < 0)
strategy.entry(id = "kd", long = true)
if (K > 80 and D > 80 and J > 80 and K < D and K[1] > D[1]) or (J < 100 and J[1] > 100)
strategy.close(id = "kd")

## 四步驟教學

strategy(“Yaonology KDJ Indicators Tutorial“, overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, initial_capital = 10000, commission_type = strategy.commission.percent, commission_value = 0)

strategy : 策略名稱 (在此Yaonology 制定為Yaonology KDJ Indicators Tutorial)

overlay:不重疊 – False

default_qty_type :此為設定量的多寡 (此我們設定為 100)

default_qty_value : 設定量的多寡 – 100

currency: 幣值 (此設為USD)

initial_capital : 最初交易的價格 (設定10000)

commission_type : 佣金的計算方式 (建議選擇使用百分比 percent)

commission_value : 佣金的價值 (此沒有佣金，因此 設定 0)

prd = input(9, title=”period”)

sgnl = input(3, title=”signal”)

v(s,l,m) => s,l,m 為自行建立的代數，以方便之後公式帶入

v = 0.0 => (表示V的附值為0)

v := (m*s+(l-m)*nz(v[1]))/l => 此式子為之後計算K和D值的公式

(:= 表示強制寫入，v[1]表示前一天V值，nz表示當v沒有前一天值時就以0代替)

c = close – 收盤價

h = highest(high, prd) – 此為九日最高價

l = lowest(low,prd) – 此為九日最低價

RSV = 100*((c-l)/(h-l)) – 此為計算RSV的公式

K = v(RSV, sgnl, 1) – 此為計算K值的公式

Ex: //v = (1*RSV + (3 – 1)*v[1])/3
= ⅓*RSV + ⅔*v[1]

D = v(K, sgnl, 1) – 此為計算D值的公式

J = 3 * K-2 * D – 此為計算J值的公式

plot(K, color = color.green) – 表示K值圖形設定為綠色

plot(D, color = color.red) – 表示D值圖形設定為紅色

plot(J, color = color.black) – 表示J值圖形設定為黑色

• 方法一

if (K < 20 and D < 20 and J < 20 and K > D and K[1] < D[1])

strategy.entry(id = “kd“, long = true)

=> [1] 表示前一天

Strategy.entry : 表示指令打開

id: 表示此單的名稱設定 在此我們將名稱設定為 kd

long: 表示看多市場趨勢，此時為進場狀態，因此設定為true

if (K > 80 and D > 80 and J > 80 and K < D and K[1] > D[1])

strategy.close(id = “kd“)

=> 當K、D和J值都大於80，並且K小於D以及K前一天值比D前一天值大，此時為死亡交叉，為賣出時機

strategy.close: 指令為出場模式

• 方法二 (多J 值判斷標準更具參考價值)

*因為少了J值樣本數不足，參考依據不夠準確，超過30才具參考價值，如下圖紅色框框處 加入J值可以得到足夠的樣本數並且計算出更準確的結果， 此外，樣本處超過30才具參考價值，如下圖紅色框框處 如下圖紅色框框處（第一張圖是沒有J的結果，第二圖是含有J的結果)

if (K < 20 and D < 20 and J < 20 and K > D and K[1] < D[1]) or (J > 0 and J[1] < 0)

strategy.entry(id = “kd“, long = true)

=> 當K、D和J值都小於20，並且K大於D以及K前一天值比D前一天值小，加上J值大於0且J前的一天值小於0，此時為金叉，為買入時機

if (K > 80 and D > 80 and J > 80 and K < D and K[1] > D[1]) or (J < 100 and J[1] > 100)

strategy.close(id = “kd“)

=>當K、D和J值都大於80，並且K小於D以及K前一天值比D前一天值大，加上J值小於100且J前的一天值大於100，此時為死叉，為賣出時機

Yaonology