TradingViewに内蔵されている
Keltner Channel Strategy の解説です!
今回のKeltner Channelは、以下で構成されています。
・20本の単純移動平均(MA)
・MA + True Range × 1(Upper)
・MA - True Range × 1(Lower)
Upperの上抜けで買い、
Lowerの下抜けで売りの途転戦略になっていました。
詳細は、以下のコードの中で解説していきます!
=====
//@version=4
strategy("Keltner Channel Strategy の解説", overlay=true)
source = close
useTrueRange = input(true)
length = input(20, minval=1)
mult = input(1.0)
//単純移動平均の算出
ma = sma(source, length)
//値幅の指定と平均値の算出
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
//設定した比率でバンドを算出
upper = ma + rangema * mult
lower = ma - rangema * mult
//バンド上抜けと下抜けの検知
crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)
//買い値の設定
//高値より1ティック上
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice)
//売り値の設定
//安値より1ティック下
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice)
//crossBcond → cross buy condition の略かな?
//一度 crossUpper すると、その後はずっと true ですね
//何のためにあるんだろう
crossBcond = false
crossBcond := crossUpper ? true
: na(crossBcond) ? false : crossBcond
//crossScond → cross sell condition だと思われる
//同じく、何のためにあるか意図がつかめず
//(なくても全く変わらないのでは?)
crossScond = false
crossScond := crossLower ? true
: na(crossScond) ? false : crossScond
//crossBcond は常にtrue
//source(初期値:close)がMAを下回る
//もしくは買い値よりもhighが大きい
//でtrueに
cancelBcond = crossBcond and (source < ma or high >= bprice )
//source(初期値:close)がMAが上回る
//もしくは売り値よりもlowが小さい
//でtrueに
cancelScond = crossScond and (source > ma or low <= sprice )
//cancelBcondの状態になったら
//過去の買い注文をキャンセル
if (cancelBcond)
strategy.cancel("KltChLE")
//crossUpperの状態で
//bprice(買い値)で逆指値の買い注文
if (crossUpper)
strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")
//cancelScondの状態になったら
//過去の売り注文をキャンセル
if (cancelScond)
strategy.cancel("KltChSE")
//crossLowerの状態で
//sprice(売り値)で逆指値の売り注文
if (crossLower)
strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")
//確認用でチャートに出力
plot( ma )
plot( upper )
plot( lower )
=====
Keltner Channel Strategy の解説です!
今回のKeltner Channelは、以下で構成されています。
・20本の単純移動平均(MA)
・MA + True Range × 1(Upper)
・MA - True Range × 1(Lower)
Upperの上抜けで買い、
Lowerの下抜けで売りの途転戦略になっていました。
詳細は、以下のコードの中で解説していきます!
=====
//@version=4
strategy("Keltner Channel Strategy の解説", overlay=true)
source = close
useTrueRange = input(true)
length = input(20, minval=1)
mult = input(1.0)
//単純移動平均の算出
ma = sma(source, length)
//値幅の指定と平均値の算出
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
//設定した比率でバンドを算出
upper = ma + rangema * mult
lower = ma - rangema * mult
//バンド上抜けと下抜けの検知
crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)
//買い値の設定
//高値より1ティック上
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice)
//売り値の設定
//安値より1ティック下
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice)
//crossBcond → cross buy condition の略かな?
//一度 crossUpper すると、その後はずっと true ですね
//何のためにあるんだろう
crossBcond = false
crossBcond := crossUpper ? true
: na(crossBcond) ? false : crossBcond
//crossScond → cross sell condition だと思われる
//同じく、何のためにあるか意図がつかめず
//(なくても全く変わらないのでは?)
crossScond = false
crossScond := crossLower ? true
: na(crossScond) ? false : crossScond
//crossBcond は常にtrue
//source(初期値:close)がMAを下回る
//もしくは買い値よりもhighが大きい
//でtrueに
cancelBcond = crossBcond and (source < ma or high >= bprice )
//source(初期値:close)がMAが上回る
//もしくは売り値よりもlowが小さい
//でtrueに
cancelScond = crossScond and (source > ma or low <= sprice )
//cancelBcondの状態になったら
//過去の買い注文をキャンセル
if (cancelBcond)
strategy.cancel("KltChLE")
//crossUpperの状態で
//bprice(買い値)で逆指値の買い注文
if (crossUpper)
strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")
//cancelScondの状態になったら
//過去の売り注文をキャンセル
if (cancelScond)
strategy.cancel("KltChSE")
//crossLowerの状態で
//sprice(売り値)で逆指値の売り注文
if (crossLower)
strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")
//確認用でチャートに出力
plot( ma )
plot( upper )
plot( lower )
=====
Comment:
次の講座