Pine講座㊵ バックテスト|InSide Bar Strategy の解説(はらみ足による途転売買)自分の勉強も兼ねて
TradingView内蔵のストラテジーを解説していますが、
シンプルなストラテジーが多いですね。
事例集みたいな形でしょうか。
はらみ足でエントリーしても、
逆方向のはらみ足まで保有はまずありえないと思います。
色んな事例を組み合わせて
自分のストラテジーをつくってね
ってことですね。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コードをコピペする場合は、[](全角)を (半角)に変更してください
=====
//@version=4
strategy("InSide Bar Strategy の解説", overlay=true)
//高値と安値がどちらも前日より内側にある
//→ はらみ足
if (high < high[1] and low > low[1])
//陽線
if (close > open)
strategy.entry("InsBarLE", strategy.long, comment="InsBarLE")
//陰線
if (close < open)
strategy.entry("InsBarSE", strategy.short, comment="InsBarSE")
=====
Pinescript
Pine講座㊴ バックテスト|BarUpDn Strategy の解説(ローソク足の上下による途転戦略)TradingView内蔵のストラテジー
「BarUpDn Strategy」の解説です。
「陰線か陽線」と「前日終値と始値の位置関係」だけでトレードする、
非常にシンプルなストラテジーです。
ノイズの多い銘柄には向かない印象です。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コードをコピペする場合は、[](全角)を (半角)に変更してください
=====
//@version=4
//default_qty_type = strategy.percent_of_equity, default_qty_value = 10 で
//「1エントリーのサイズを資金の10%にする」という設定を行っています
strategy("BarUpDn Strategy の解説", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 10)
//1日の中の損失限度を資金に対する%で設定します
maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float)
strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)
//陽線&始値>前日終値
if (close > open and open > close[1])
//買いエントリー
strategy.entry("BarUp", strategy.long)
//陰線&始値<前日終値
if (close < open and open < close[1])
//売りエントリー
strategy.entry("BarDn", strategy.short)
=====
Pine講座㊳ バックテスト|Greedy Strategy の解説(GAP順張り&ピラミッティングの戦略)今回は Greedy Strategy の解説です。
直訳すると「欲張り戦略」
ピラミッティングをすることから
この名称なのかなと思います。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
※ コードをコピペする場合は、[](全角)を (半角)に変更してください
=====
//@version=4
strategy("Greedy Strategy の解説", pyramiding = 100, calc_on_order_fills=false, overlay=true)
//take profit(利確)のティック
tp = input(10)
//stop loss(損切り)のティック
sl = input(10)
//1日のオーダー数の上限
maxidf = input(title="Max Intraday Filled Orders", defval=5)
strategy.risk.max_intraday_filled_orders(maxidf)
//窓の確認
upGap = open > high[1]
dnGap = open < low[1]
//売り保有&当日陰線
dn = strategy.position_size < 0 and open > close
//買い保有&当日陽線
up = strategy.position_size > 0 and open < close
//窓を空けて上昇 → 買いエントリー
strategy.entry("GapUp", strategy.long, stop = high[1], when = upGap)
//売り保有&陰線 → 売りエントリー
strategy.entry("Dn", strategy.short, stop = close, when = dn)
//窓を空けて下落 → 売りエントリー
strategy.entry("GapDn", strategy.short, stop = low[1], when = dnGap)
//買い保有&陽線 → 買いエントリー
strategy.entry("Up", strategy.long, stop = close, when = up)
//それぞれ条件を満たさなくなったら注文をキャンセル
strategy.cancel("GapUp", not upGap)
strategy.cancel("GapDn", not dnGap)
strategy.cancel("Up", not up)
strategy.cancel("Dn", not dn)
//保有ポジション数を確認
XQty = strategy.position_size < 0 ? -strategy.position_size : strategy.position_size
//買いか売りかを確認
dir = strategy.position_size < 0 ? -1 : 1
//limit price(利確する価格)の算出
lmP = strategy.position_avg_price + dir*tp*syminfo.mintick
//stoploss price(損切りする価格)の算出
slP = strategy.position_avg_price - dir*sl*syminfo.mintick
//データなし
float nav = na
//逆方向の窓の有無
revCond = strategy.position_size > 0 ? dnGap : (strategy.position_size < 0 ? upGap : false)
//strategy.order(id, long, qty, limit, stop, oca_name, oca_type, comment, when)
//long → trueで買い注文、falseで売り注文
//保有ポジションあり+逆方向の窓が出てない → 損切りの注文
strategy.order("TP", strategy.position_size < 0, XQty, lmP, nav, "TPSL", strategy.oca.reduce, "TPSL", when= not revCond and XQty > 0)
//保有ポジションあり+逆方向の窓が出てない → 利確の注文
strategy.order("SL", strategy.position_size < 0, XQty, nav, slP, "TPSL", strategy.oca.reduce, "TPSL", when= not revCond and XQty > 0)
//保有ポジションなし か 逆方向の窓で注文をチャンセル
strategy.cancel("TP", XQty == 0 or revCond)
strategy.cancel("SL", XQty == 0 or revCond)
=====
Pine講座㊲ バックテスト|MACD Strategy の解説(MACDのGC・DCによる途転戦略)TradingView内蔵のストラテジーはみんな同じような感じですね。
今回は、MACDのGC・DCによる途転売買です。
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
=====
//@version=4
strategy( "MACD Strategy の解説" )
//設定項目と初期値の指定
fastLength = input( 12 )
slowLength = input( 26 )
MACDLength = input( 9 )
//MACDの算出
MACD = ema( close, fastLength ) - ema( close, slowLength )
//MACDのEMAを算出
aMACD = ema( MACD, MACDLength )
//MACDとMACDのEMAの差を算出
delta = MACD - aMACD
//MACDが平均値を上抜けた
if ( crossover( delta ,0 ) )
//成行で買い
strategy.entry( "MacdLE", strategy.long, comment="MacdLE" )
//MACDが平均値を下抜けた
if ( crossunder( delta ,0 ) )
//成行で売り
strategy.entry( "MacdSE", strategy.short, comment="MacdSE" )
//確認用で描画
plot( MACD )
plot( aMACD )
plot( delta ,style=plot.style_histogram )
=====
Pine講座㊱ バックテスト|RSI Strategyの解説(RSIによる途転売買)今回は「RSI Strategy」のコードを解説します!
※ TradingView内蔵のストラテジーを
上から順番に解説しています
※ 解説はコードの中で
このストラテジーは、エントリーしたあと、
じわじわ逆方向に動くと大変です。
あまり良いスキームではありませんね。
(ハマる値動きはあると思います)
=====
//@version=4
strategy( "RSI Strategy の解説" )
//設定の項目と初期値の指定
//RSIを計算する期間
length = input( 14 )
//買いエントリーの基準となるライン
overSold = input( 30 )
//売りエントリーの基準となるライン
overBought = input( 70 )
//計算に使う価格
price = close
//RSIの計算
vrsi = rsi(price, length)
//RSIの計算値がある
if (not na(vrsi))
//基準のライン(初期値:30)を上抜けたら
if (crossover(vrsi, overSold))
//買いエントリー
strategy.entry("RsiLE", strategy.long, comment="RsiLE")
//基準のライン(初期値:70)を下抜けたら
if (crossunder(vrsi, overBought))
//売りエントリー
strategy.entry("RsiSE", strategy.short, comment="RsiSE")
//確認用で描画
plot( vrsi )
hline( overSold )
hline( overBought )
=====
Pine講座㉟ バックテスト|Prabolic SAR Strategyの解説(パラボリックのブレイクで途転売買)今回はパラボリックのストラテジーです。
わりとシンプルです。
TradingViewの良いところは、
こういうバックテストを
・色んな銘柄
・色んな時間軸
で即座に検証できるところですね。
ぜひ、ためしてみてください^^
=====
//@version=4
strategy("Parabolic SAR Strategy", overlay=true)
//パラボリックの計算値の指定
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
//パラボリックの算出
psar = sar(start, increment, maximum)
//パラボリックが高値より上
if (psar >= high)
//パラボリックの価格に買いの逆指値
//パラボリックを上抜けたら買いに途転
strategy.entry("ParLE", strategy.long, stop=psar, comment="ParLE")
//条件をみたさない
else
//注文をキャンセル
strategy.cancel("ParLE")
//パラボリックが安値より下
if (psar <= low)
//パラボリックの価格に売りの逆指値
strategy.entry("ParSE", strategy.short, stop=psar, comment="ParSE")
//条件を満たさなくなったら注文をキャンセル
else
strategy.cancel("ParSE")
//確認用でパラボリックをプロット
plot( psar ,style=plot.style_circles ,color=color.red ,linewidth=2 )
=====
Pine講座㉞ バックテスト|Momentum Strategy の解説(相場の勢いをもとに途転売買)相場の勢いをみるモメンタムをもとにした
TradingView内蔵のストラテジーの解説です。
モメンタムといっても仕組みは大変シンプルで、
「終値を一定期間さかのぼって比較するだけ」です。
このストラテジーは、モメンタムの確認を2段階で行っていました。
解説はコードの中に記載しています。
=====
//@version=4
strategy( "Momentum Strategy の解説" )
length = input( 12 )
price = close
//モメンタム(勢い)を算出する関数を作成
//seria(数値)とlength分さかのぼった seria を比較
momentum( seria, length ) => seria - seria
//終値をlength分さかのぼって比較
mom0 = momentum( price, length )
//mom0を1本さかのぼって比較
mom1 = momentum( mom0, 1 )
//mom0 と mom1 がプラスのとき
if ( mom0 > 0 and mom1 > 0 )
//高値+1ティックで逆指値を発注
strategy.entry( "MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE" )
//上の条件を満たさないとき
else
//上の逆指値注文をキャンセル
strategy.cancel( "MomLE" )
//mom0 と mom1 がマイナスのとき
if ( mom0 < 0 and mom1 < 0 )
//安値-1ティックで逆指値を発注
strategy.entry( "MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE" )
//条件を満たさないときは逆指値注文をキャンセル
else
strategy.cancel( "MomSE" )
//確認用で描画
plot( mom0 ,color=color.red )
plot( mom1 )
=====
Pine講座㉝ バックテスト|Keltner Channel Strategy の解説(チャネルブレイクの途転戦略)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 )
=====
Pine講座㉑ ラインを表示するPineスクリプトのversion4では、
簡単にラインを表示することもできるようになりました。
=====
//@version=4
study( "ラインを表示する", overlay=true )
var line l = na
line.delete( l )
l := line.new( x1=bar_index ,y1=high ,x2=bar_index ,y2=high , extend=extend.right )
=====
基本的な使い方は、label.new( ) とほとんど同じなので
気になる方は前回のアイデアを確認してみてください!
次回は、label と line を使ってインジケーターを作成してみたいと思います!
Pine講座㉓ 終値から ±2-ATR にラインを描画するlabel と line を応用して、
簡単なインジケーターを作成してみます。
今回つくるのは、最新の終値から
上下に2-ATRのところにラインを引くインジケーターです。
※ 以下のコードは、[]を半角の「 」に書き換える必要があります
=====
//@version=4
study( "終値から ±2-ATR にラインを描画する" ,overlay=true )
//ローソク足 1本分の時間を取得
dt = time - time[1]
//ATRを算出
atr20 = ema( tr ,20 )
//終値から±2-ATRの値を算出
c_p_2atr = close + atr20[1] * 2
c_m_2atr = close - atr20[1] * 2
// line を描画
var line upper = na
var line lower = na
line.delete( upper )
line.delete( lower )
upper := line.new( time-10*dt ,c_p_2atr ,time+30*dt ,c_p_2atr ,xloc.bar_time ,color=color.red )
lower := line.new( time-10*dt ,c_m_2atr ,time+30*dt ,c_m_2atr ,xloc.bar_time ,color=color.red )
// label を描画
var label label_top = na
var label label_bottom = na
label.delete( label_top )
label.delete( label_bottom )
label_top := label.new( time-10*dt ,c_p_2atr ,xloc=xloc.bar_time ,text="+2ATR" ,style=label.style_none )
label_bottom := label.new( time-10*dt ,c_m_2atr ,xloc=xloc.bar_time ,text="-2ATR" ,style=label.style_none )
=====
Pine講座㉔ 取引量を算出してインフォパネルに表示するATRをもとに取引量を算出して、
インフォパネルに表示するPineスクリプトです。
※ 実際のトレードに用いるには調整が必要です
=====
//@version=4
study( "取引量を算出してインフォパネルに表示する" ,overlay=true )
//資金量
asset = 1000000
//トレードに当てる金額
//ここでは1%
value = asset / 100
//ラベル位置の調整用
dt = time - time[1]
//ATRを算出
atr20 = ema( tr ,20 )
//取引量を算出
unit = value / atr20
// label を描画
var label l = na
label.delete( l )
l := label.new( time + dt*15, highest( high ,20 ), xloc=xloc.bar_time, style=label.style_labeldown, text="Unit Size "+tostring( round(unit) ), textcolor=color.white )
=====
※ [] を (全角を半角)に変更してお試しください
Pine講座㉕ TradingViewでバックテストをする今回から、バックテストの解説に入っていきたいと思います!
まずは、検証結果の見方を簡単に。
▶ TradingView内蔵のストラテジー(テスター)を入れます
今回は以下の見方を確認するために、
TradingView内蔵のストラテジーを表示させてみます。
通常のインジケーターと同様の手順で、
「MovingAvg2Line Cross」というストラテジーを挿入します。
(インジケーターを挿入する画面で検索 → 挿入)
すると「ストラテジーテスター」という窓が表示されると思います。
(表示されない方は、「Pineエディタ」タブの右隣にある「ストラテジーテスター」タブを開いてください)
▶ ストラテジーテスター > 概要
テスト結果の基本的な数値とグラフが表示されます。
グラフは
・左縦軸 → 資産の増減
・右縦軸 → ドローダウン
・横軸 → トレード回数
が表示されています。
▶ ストラテジーテスター > パフォーマンスサマリー
テスト結果の詳細な数値が表示されます。
おすすめは、勝率とペイオフレシオ(リスクリワード比率)ですね。
▶ ストラテジーテスター > トレード一覧
テストにおけるトレードの履歴が表示されます。
Pine講座㉖ バックテスト|2本のSMAで途転まずは、TradingViewに最初から入っているストラテジーの解説をしていきます。
今回は、MovingAvg2Line Cross
2本の移動平均線の
ゴールデンクロス(GC)と
デッドクロス(DC)で
途転売買する手法です。
コードの中に、直接解説を記入していきます!
=====
//Pineスクリプトのバージョンを宣言
//@version=4
//ストラテジーの宣言
strategy("MovingAvg2Line Cross", overlay=true)
//SMAの計算値を設定
//ポップアップで変更もできるように(input関数)
fastLength = input(9)
slowLength = input(18)
//計算のもとになる価格を指定
price = close
//SMAの計算
mafast = sma(price, fastLength)
maslow = sma(price, slowLength)
//**
//* 以下で条件分岐して売買
//*
//短期が長期を上抜けた場合
if (crossover(mafast, maslow))
//買いエントリー
strategy.entry("MA2CrossLE", strategy.long, comment="MA2CrossLE")
//短期が長期を下抜けた場合
if (crossunder(mafast, maslow))
//売りエントリー
strategy.entry("MA2CrossSE", strategy.short, comment="MA2CrossSE")
=====
crossover( {a} ,{b} )
{a} が {b} を上抜けたときに True を返します
crossunder( {a} ,{b} )
{a} が {b} を下抜けたときに True を返します
strategy.entry( )
エントリーする関数。
strategy.long、strategy.short で「買い」「売り」を指定できる。
すでにポジションがあるときに、逆方向のエントリーをすると「途転」となる。(買いと売りが同数になるわけではないことに注意)
Pine講座㉗ バックテスト|残高の推移を時系列で表示する「ストラテジーテスター>概要」のグラフの横軸は、「取引回数」がデフォルトです。
概要を把握するにはまったく問題ありませんが、ときにチャートと照らし合わせて時系列で確認したいケースがあります。
今回の方法を使うと、オシレーターの窓に「残高の推移」を表示することができますので、
・どの売買で
・どれくらいの資金の増減
みたいなことが、
簡単に確認できるようになります。
前回のコードに追記しているので、
追記部分のみ解説を加えたいと思います。
=====
//@version=4
strategy( "MovingAvg2Line Cross" )
fastLength = input( 9 )
slowLength = input( 18 )
price = close
// 残高の計算(スタート時の資金 + 累計損益)
// strategy.initial_capital → スタート時の資金
// strategy.netprofit → 累計損益
balance = strategy.initial_capital + strategy.netprofit
mafast = sma( price ,fastLength )
maslow = sma( price ,slowLength )
if ( crossover( mafast ,maslow ) )
strategy.entry( "MA2CrossLE" ,strategy.long ,comment="MA2CrossLE" )
if ( crossunder( mafast, maslow ) )
strategy.entry( "MA2CrossSE" ,strategy.short ,comment="MA2CrossSE" )
// スタート時の資金を描画
plot( strategy.initial_capital )
// 残高の描画
plot( balance )
=====
Pine講座㉙ バックテスト|残高とATRで取引量を算出する前回までに取得した「残高」から
取引量を算出するコードです。
残高とATRをもとに取引量を調整していきます。
小次郎講師やタートルズの資金管理ですね。
次回は、この取引量をもとに売買します。
追加した箇所を解説してます。
=====
//@version=4
//initial_capitalで元金を指定
strategy( "MovingAvg2Line Cross" ,initial_capital=100000 )
fastLength = input( 9 )
slowLength = input( 18 )
price = close
balance = strategy.initial_capital + strategy.netprofit
//投資金の0.5%をトレードに充てる
amount_rate = 0.005
//ATRを算出
atr = ema( tr ,20 )
//ATRと残高をもとに取引量を算出
amount = ( balance * 0.005 ) / atr
mafast = sma( price ,fastLength )
maslow = sma( price ,slowLength )
if ( crossover( mafast ,maslow ) )
strategy.entry( "MA2CrossLE" ,strategy.long ,comment="MA2CrossLE" )
if ( crossunder( mafast, maslow ) )
strategy.entry( "MA2CrossSE" ,strategy.short ,comment="MA2CrossSE" )
//1000通貨単位に丸めて描画
plot( round( amount / 1000 ) * 1000 )
=====
Pine講座㉛ バックテスト|BB Strategy の解説TradingView内蔵の BB Stragtegy(ボリンジャーバンドストラテジー)を解説します。
※ 少し書き換えた部分もあります
解説はコード内にて
=====
//Pineスクリプトのバージョンを宣言
//@version=4
//ストラテジーのコードであることを宣言
strategy("Bollinger Bands Strategy", overlay=true)
//変数と設定できる項目を指定
source = close
length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
//lengthで指定した値(20)でSMAを算出
basis = sma(source, length)
//lengthで指定した値(20)で標準偏差を算出し、
//multで指定した値(2.0)を乗算する
//初期値だと 2シグマ になる
dev = mult * stdev(source, length)
//SMAにシグマを加算・減算
//±2シグマのバンドができる
upper = basis + dev
lower = basis - dev
//買いエントリーの条件を指定する
//source(終値)が、lower(-2シグマ)を上抜けたとき
buyEntry = crossover(source, lower)
//売りエントリーの条件を指定する
//source(終値)が、upper(+2シグマ)を下抜けたとき
sellEntry = crossunder(source, upper)
//買いエントリーの条件がtrueなら
if ( buyEntry )
//lower(-2シグマ)の価格で逆指値の買いエントリー
//stopやocaなどについては後述
strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandLE")
//買いエントリーの条件がfalse
else
//逆指値の買い注文をキャンセル
strategy.cancel(id="BBandLE")
//売りエントリーの条件がtrueなら
if ( sellEntry )
//upper(+2シグマ)の価格で逆指値の売りエントリー
strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandSE")
//売りエントリーの条件がfalse
else
//逆指値の売り注文をキャンセル
strategy.cancel(id="BBandSE")
//確認用でBBの各線を描画
plot( basis )
plot( upper )
plot( lower )
=====
strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandLE")
を、ちょっとだけ解説します。
最初の "BBandLE" は、この買い注文のIDを指定しています。
IDを指定することで、特定の注文を変更したりキャンセルすることができるようになります。
今回の例でも、strategy.cancel(id="BBandLE") でキャンセルしていますね。
また、strategy.entry( ) は、stop(逆指値)やlimit(指値)を指定することができます。
(指定しない場合はMO(成行)として処理されます)
OCA(One Cancels the All)とは、複数の新規指値・逆指値注文をグループ化し、そのうち1つの注文が約定された場合にその他全ての注文が削除されるものです。この例では、"BollingerBands"というグループを作成しています。
Pine講座㉜ バックテスト|BB Strategy directed の解説このストラテジーは、前回解説したものに
・買いのみの戦略
・売りのみの戦略
・買い売り両方の戦略
を選択できる機能を追加されたものです。
コードも2行増えるだけなので簡単ですね!
※ 追加された箇所だけ解説を入れます
=====
//@version=4
strategy("Bollinger Bands Strategy directed の解説", overlay=true)
source = close
length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
//買いのみ、売りのみ、両方を指定する設定項目
//1,0,-1で設定する
//初期値は0
direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
//strategy.risk.allow_entry_in( ) で「買いのみ、売りのみ、両方」を指定
// 0 → strategy.direction.all → 両方
//-1 → strategy.direction.short → 売りのみ
// 1 → strategy.direction.long → 買いのみ
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev
if (crossover(source, lower))
strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandLE")
else
strategy.cancel(id="BBandLE")
if (crossunder(source, upper))
strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandSE")
else
strategy.cancel(id="BBandSE")
plot( basis )
plot( upper )
plot( lower )
=====
Pine講座⑱ 複数の相関を表示するPine講座⑰のコードを応用すると、
複数の相関を一度に確認するチャートも作ることが出来ます。
主要銘柄や、自分の保有銘柄との相関を常に確認することが出来るようになるので、分散投資をするのにオススメです。
=====
//@version=4
study( "複数の相関を表示する" )
plot( correlation( security( "NK2251!" ,"30" ,close ) ,close ,48 ) ,color=color.blue ,title="Nikkei")
plot( correlation( security( "YM1!" ,"30" ,close ) ,close ,48 ) ,color=color.red ,title="NY Dow")
=====
Pine講座⑰ 2行で日経平均との相関を表示するTradingViewなら他の銘柄との相関もたった2行で確認できてしまいます!
相関というのは「似た動きをするかどうか」です。
+1 → 同じ動き
ー1 → 真逆の動き
0 → 関連なし
上記のように判断することができます。
分散投資をするなら、
相関が0の銘柄同士で行うのが理想ですね。
=====
//@version=4
study( "2行で日経平均との相関を表示する" )
plot( correlation( security( "NK2251!" ,"30" ,close ) ,close ,48 ) ,color=color.red )
=====
security( ) は前回解説しましたので、
前回のアイデアをご覧ください。
correlation( ) は以下のように使います。
correlation( {データA} ,{データB} ,{計算期間} )
{データA} {データB} は、
相関を確認したい組み合わせでデータを入れます。
この例では、{データA} は security( ) で日経平均の終値。
{データB} はメインチャート(米ドル/円)の終値を入れています。
{計算期間} は、相関を確認する期間です。
例では、30分足のデータで「48」と指定し、「1日分の相関」を確認しています。
Pine講座⑯ 2行で日経平均の終値(30分足)を表示するTradingViewには security( ) という関数が用意されていて、
メインチャート以外の様々なデータを取得することができます。
この例でメインチャートに表示しているのはUSDJPYですが、
security( ) を使うことで大証の日経平均先物の価格を表示することができます。
=====
//@version=4
study( "2行で日経平均の終値(30分足)を表示する" )
plot( security( "NK2251!" ,"30" ,close ) ,color=color.red )
=====
security( {銘柄のコード} ,{足種} ,{取得するデータ} )
{銘柄のコード} は「USDJPY」「NK2251!」「TSE:7203」などが入ります。
{足種} は、以下のように指定します。
月と日はアルファベット、日以下の足はすべて分換算です。
月足 → "M"
日足 → "D"
5分足 → "5"
30分足 → "30"
4時間足 → "240"
{取得するデータ} は、基本的なデータを始めテクニカル指標も指定することができます。
始値 → open
高値 → high
安値 → low
終値 → close
20日の最高値 → highest( high ,20 )
20日の単純平均 → sma( close ,20 )
Pine講座⑮ MACDを表示するMACDは描画する要素が多いので
「2行で」というわけにはいきませんが、
組み込みの関数で簡単に描画することができます。
今日からは Pineスクリプト v4 で
プログラムを書いていきたいと思います!
=====
//@version=4
study( "MACDを表示する" )
//macd( ) で MACD を算出する
//macd( ) は唯一、配列で算出結果を受け取る
= macd(close ,12 ,26 ,9)
//MACDの各計算値を描画する
plot(macdLine ,color=color.blue)
plot(signalLine ,color=color.orange)
plot(histLine ,color=color.red ,style=plot.style_histogram)
=====