移動平均線やボリンジャーバンド、RSIやMACDやストキャスティクスなど・・
よく利用されるテクニカル指標を利用したストラテジーをPineScriptで自作しようと思った時に、どんなコードを書けばよいか悩んだことはありませんか?
本記事では主要なテクニカル指標をエントリー条件とするストラテジーの「PineScriptテンプレート」を配布しています。コピペして使えば簡単にストラテジーが作れますので、ご自身のストラテジー作りのベースとしてご活用ください。
サンプルコード一覧
以下、テクニカル指標別のサンプルコードです。
TradingViewのPineScriptエディタで新規ストラテジーを作成し、初期コードをすべて削除して本記事のサンプルコードに丸々差し替えていただければ動作します。
以下、全コード共通の仕様
・エントリーのタイミングは、「サインが発生した翌日の寄付で成行注文」です。
・決済のタイミングは、「エントリーから10足経過したら翌日の寄付で成行注文」です。
・テクニカル指標のサインが発生した足に、オレンジのクロスマークが表示されますが、実際にエントリーされる足はその翌日なのでエントリーサインは次の足に表示されます。(ポジション保有中にテクニカル指標のサインが発生した場合はエントリーしないので、オレンジのクロスマークだけが表示される場合もあります)
価格と移動平均線のクロス・ストラテジー
エントリー条件 | 価格(終値)が 20日移動平均線(SMA)を上抜けたら買い |
表示内容 | ・移動平均線のグラフ ・売買サインのマーク ・エントリーサイン |
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradeTechOnline
//@version=5
strategy("#ST_PriceSma", overlay=true, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.05)
//-------------------------------------------------------------
// 1. 関数宣言
//-------------------------------------------------------------
barsSinceLastEntry() =>
strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
//-------------------------------------------------------------
// 2. テクニカル指標の計算とグラフの描画
//-------------------------------------------------------------
sma_values = ta.sma(close, 20)
plot(sma_values, color=color.green)
//-------------------------------------------------------------
// 3. サイン判定とマークの描画
//-------------------------------------------------------------
cond_long = ta.crossover(close, sma_values)
plot(cond_long ? low*0.99 : na, title="上抜け", style=plot.style_cross, color=color.orange, linewidth=3)
//-------------------------------------------------------------
// 4. エントリーと決済
//-------------------------------------------------------------
// エントリー判定
if strategy.opentrades == 0
if cond_long
strategy.entry("買い", strategy.long, comment="買い")
// 決済判定(エントリーから10足経過)
if barsSinceLastEntry() >= 10
strategy.close("買い", comment="経過足数決済")
移動平均線2本のクロス・ストラテジー
エントリー条件 | 5日移動平均線(SMA)が 25日移動平均線(SMA)を上抜けたら買い |
表示内容 | ・移動平均線2本のグラフ ・売買サインのマーク ・エントリーサイン |
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradeTechOnline
//@version=5
strategy("#ST_Sma2Cross", overlay=true, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.05)
//-------------------------------------------------------------
// 1. 関数宣言
//-------------------------------------------------------------
barsSinceLastEntry() =>
strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
//-------------------------------------------------------------
// 2. テクニカル指標の計算とグラフの描画
//-------------------------------------------------------------
sma_short = ta.sma(close, 5)
sma_long = ta.sma(close, 25)
plot(sma_short, color=color.orange)
plot(sma_long , color=color.green)
//-------------------------------------------------------------
// 3. サイン判定とマークの描画
//-------------------------------------------------------------
cond_long = ta.crossover(sma_short, sma_long)
plot(cond_long ? low*0.99 : na, title="GC買い", style=plot.style_cross, color=color.orange, linewidth=3)
//-------------------------------------------------------------
// 4. エントリーと決済
//-------------------------------------------------------------
// エントリー判定
if strategy.opentrades == 0
if cond_long
strategy.entry("買い", strategy.long, comment="買い")
// 決済判定(エントリーから10足経過)
if barsSinceLastEntry() >= 10
strategy.close("買い", comment="経過足数決済")
ボリンジャーバンド・ストラテジー
エントリー条件 | 株価(終値)が ボリンジャーバンド(20日/2σ)の ロワーバンドを上抜けたら買い (=ロワーバンドより下からレンジ内に戻ってきたら買い) |
表示内容 | ・ボリンジャーバンドのグラフ ・売買サインのマーク ・エントリーサイン |
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradeTechOnline
//@version=5
strategy("#ST_BB", overlay=true, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.05)
//-------------------------------------------------------------
// 1. 関数宣言
//-------------------------------------------------------------
barsSinceLastEntry() =>
strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
//-------------------------------------------------------------
// 2. テクニカル指標の計算とグラフの描画
//-------------------------------------------------------------
[bb_middle, bb_upper, bb_lower] = ta.bb(close, 20, 2)
plot(bb_upper, color=color.yellow)
plot(bb_middle, color=color.white)
plot(bb_lower, color=color.yellow)
//-------------------------------------------------------------
// 3. サイン判定とマークの描画
//-------------------------------------------------------------
cond_long = ta.crossover(close, bb_lower)
plot(cond_long ? low*0.99 : na, title="BB買い", style=plot.style_cross, color=color.orange, linewidth=3)
//-------------------------------------------------------------
// 4. エントリーと決済
//-------------------------------------------------------------
// エントリー判定
if strategy.opentrades == 0
if cond_long
strategy.entry("買い", strategy.long, comment="買い")
// 決済判定(エントリーから10足経過)
if barsSinceLastEntry() >= 10
strategy.close("買い", comment="経過足数決済")
RSI・ストラテジー
エントリー条件 | 14日RSIが売られすぎ(30未満)から 30以上に戻ってきたら買い |
表示内容 | ・RSIの状態を背景色で表示 (30未満で青、70以上で赤) ・売買サインのマーク ・エントリーサイン ※RSIグラフは本サンプルで同時表示できないので、インジケーターをチャートに別途追加ください。 |
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradeTechOnline
//@version=5
strategy("#ST_RSI", overlay=true, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.05)
//-------------------------------------------------------------
// 1. 関数宣言
//-------------------------------------------------------------
barsSinceLastEntry() =>
strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
//-------------------------------------------------------------
// 2. テクニカル指標の計算とグラフの描画
//-------------------------------------------------------------
rsi_value = ta.rsi(close, 14)
bgcolor(rsi_value < 30 ? color.new(color.blue, 80) : na)
bgcolor(rsi_value > 70 ? color.new(color.red, 80) : na)
//-------------------------------------------------------------
// 3. サイン判定とマークの描画
//-------------------------------------------------------------
cond_long = ta.crossover(rsi_value, 30)
plot(cond_long ? low*0.99 : na, title="RSI買い", style=plot.style_cross, color=color.orange, linewidth=3)
//-------------------------------------------------------------
// 4. エントリーと決済
//-------------------------------------------------------------
// エントリー判定
if strategy.opentrades == 0
if cond_long
strategy.entry("買い", strategy.long, comment="買い")
// 決済判定(エントリーから10足経過)
if barsSinceLastEntry() >= 10
strategy.close("買い", comment="経過足数決済")
MACD・ストラテジー
エントリー条件 | MACD(12日/26日/9日)の MACDラインがシグナルラインを上抜けたら買い |
表示内容 | ・MACDの状態を背景色で表示 (MACDラインがシグナルラインより下なら青、上なら赤) ・売買サインのマーク ・エントリーサイン ※MACDグラフは本サンプルで同時表示できないので、インジケーターをチャートに別途追加ください。 |
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradeTechOnline
//@version=5
strategy("#ST_MACD", overlay=true, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.05)
//-------------------------------------------------------------
// 1. 関数宣言
//-------------------------------------------------------------
barsSinceLastEntry() =>
strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
//-------------------------------------------------------------
// 2. テクニカル指標の計算とグラフの描画
//-------------------------------------------------------------
[macd_value, macd_signal, macd_hist] = ta.macd(close, 12, 26, 9)
bgcolor(macd_value < macd_signal ? color.new(color.blue, 80) : na)
bgcolor(macd_value > macd_signal ? color.new(color.red, 80) : na)
//-------------------------------------------------------------
// 3. サイン判定とマークの描画
//-------------------------------------------------------------
cond_long = ta.crossover(macd_value, macd_signal)
plot(cond_long ? low*0.99 : na, title="MACD買い", style=plot.style_cross, color=color.orange, linewidth=3)
//-------------------------------------------------------------
// 4. エントリーと決済
//-------------------------------------------------------------
// エントリー判定
if strategy.opentrades == 0
if cond_long
strategy.entry("買い", strategy.long, comment="買い")
// 決済判定(エントリーから10足経過)
if barsSinceLastEntry() >= 10
strategy.close("買い", comment="経過足数決済")
ファスト・ストキャスティクス・ストラテジー
エントリー条件 | ファスト・ストキャスティクス(14日/3日)の %Kが%Dを上抜けたら買い |
表示内容 | ・ファスト・ストキャスティクスの状態を背景色で表示 (%Kが%Dより下なら青、上なら赤) ・売買サインのマーク ・エントリーサイン ※ファスト・ストキャスのグラフは本サンプルで同時表示できないので、インジケーターをチャートに別途追加ください。 |
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradeTechOnline
//@version=5
strategy("#ST_FastStoch", overlay=true, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.05)
//-------------------------------------------------------------
// 1. 関数宣言
//-------------------------------------------------------------
barsSinceLastEntry() =>
strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
//-------------------------------------------------------------
// 2. テクニカル指標の計算とグラフの描画
//-------------------------------------------------------------
stoch_k = ta.stoch(close, high, low, 14)
stoch_d = ta.sma(stoch_k, 3)
bgcolor(stoch_k < stoch_d ? color.new(color.blue, 80) : na)
bgcolor(stoch_k > stoch_d ? color.new(color.red, 80) : na)
//-------------------------------------------------------------
// 3. サイン判定とマークの描画
//-------------------------------------------------------------
cond_long = ta.crossover(stoch_k, stoch_d)
plot(cond_long ? low*0.99 : na, title="F-Stoch買い", style=plot.style_cross, color=color.orange, linewidth=3)
//-------------------------------------------------------------
// 4. エントリーと決済
//-------------------------------------------------------------
// エントリー判定
if strategy.opentrades == 0
if cond_long
strategy.entry("買い", strategy.long, comment="買い")
// 決済判定(エントリーから10足経過)
if barsSinceLastEntry() >= 10
strategy.close("買い", comment="経過足数決済")
スロー・ストキャスティクス・ストラテジー
エントリー条件 | スロー・ストキャスティクス(14日/3日/3日)の %DがSlow%Dを上抜けたら買い |
表示内容 | ・スロー・ストキャスティクスの状態を背景色で表示 (%DがSlow%Dより下なら青、上なら赤) ・売買サインのマーク ・エントリーサイン ※スロー・ストキャスティクスのグラフは本サンプルで同時表示できないので、インジケーターをチャートに別途追加ください。 |
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradeTechOnline
//@version=5
strategy("#ST_SlowStoch", overlay=true, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.05)
//-------------------------------------------------------------
// 1. 関数宣言
//-------------------------------------------------------------
barsSinceLastEntry() =>
strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
//-------------------------------------------------------------
// 2. テクニカル指標の計算とグラフの描画
//-------------------------------------------------------------
stoch_k = ta.stoch(close, high, low, 14)
stoch_d = ta.sma(stoch_k, 3)
stoch_slowd = ta.sma(stoch_d, 3)
bgcolor(stoch_d < stoch_slowd ? color.new(color.blue, 80) : na)
bgcolor(stoch_d > stoch_slowd ? color.new(color.red, 80) : na)
//-------------------------------------------------------------
// 3. サイン判定とマークの描画
//-------------------------------------------------------------
cond_long = ta.crossover(stoch_d, stoch_slowd)
plot(cond_long ? low*0.99 : na, title="S-Stoch買い", style=plot.style_cross, color=color.orange, linewidth=3)
//-------------------------------------------------------------
// 4. エントリーと決済
//-------------------------------------------------------------
// エントリー判定
if strategy.opentrades == 0
if cond_long
strategy.entry("買い", strategy.long, comment="買い")
// 決済判定(エントリーから10足経過)
if barsSinceLastEntry() >= 10
strategy.close("買い", comment="経過足数決済")
おわりに
以上、人気のテクニカル指標を利用したTradingViewストラテジーをPineScriptで自作するためのサンプルコードを7つご紹介しました。
これらのサンプルをベースにして、さらにご自身のストラテジーを完成させてみてください。
また、本記事のサンプルコード内にあるPineScriptの命令や文法の解説や、より複雑な条件の書き方、さらには汎用的に使いやすく便利なストラテジーの作り方などについても知りたい方向けの講座も、別途準備中です。
興味のある方は、メルマガか以下のオンライン講座に登録しておいてくださいね。