こんにちは。BTCFXを主戦場としているgoghです。
TradingViewを使えば、自分の手法がどのぐらい利益を出せるのか、簡単に確認することができます。
実際のトレードをする前に、自分の手法の勝率やプロフィットファクターを把握することはとても重要なことです。
Pineスクリプトと呼ばれる言語で手法のロジックを組み必要がありますが、プログラミングしたことがある人にとっては、これが思った以上に簡単!

上記の画像は実際に私の検証中の手法をPineスクリプトでストラテジとして作成して、実際にバックテストした結果になっています。
勝率は39.13%ですが、負けるときは小さく負け、勝つ時は大きく勝つロジックを組んでいるため、利益が出ています。
なんとなく「この手法めっちゃイケてるんじゃないか?!」と思っても実際にバックテストをしてみると死ぬほどマイナス・・・なんてことも。
この機会にTradingViewのストラテジ機能を使ってみて、自分の手法の成績を確認してみましょう!
1.まずはTradingViewに登録
https://jp.tradingview.com/gopro/?share_your_love=lemyelaki
TragingViewのストラテジ機能は無料で使えます。
BTC以外にも株価や為替のチャートも確認ができ、高機能・優れたUIなのでぜひ使ってみてください。
2.BTCのチャートを表示する
今回はbitFlyerのFXBTCJPYのチャートでバックテストします。
左上のメニューアイコン隣に「FXBTCJPY」と入力すると表示されます。
画面下のPineスクリプトエディタを開きます。

3.手法を定義する
バックテストをするためには、まず手法を作る必要があります。
今回は例として下記の手法(ルール)をPineスクリプトで組んでみたいと思います。
・前の足が陽線で終わっていること
・前の足の終値から大きく上昇すること(前の足の実体の高さの2倍終値で上昇すること)
・損切りは、前の足の安値に設定する
・利確は損切り幅の2倍に設定する

図は買いエントリーを例にしていますが、売りも対応します。売りの場合は逆で考えてもらって大丈夫です。
4.Pineスクリプトを書く
先にスクリプト全文を載せます。
少ないコードでエントリーから決済までを組むことができます。
一般的なプログラムは、価格データを取得するなどの処理を、自分で書かなければいけません。Pineスクリプトでは足更新のタイミングで自動で価格データを取得してくれるので、チャート特有の処理を自分で書く必要がありません。なのでチャートをもとにしたプログラムを書きたい場合、Pineスクリプトはとっても便利です。
//@version=4
strategy("WAI_no_SAIKYO_SYUHO",overlay=true)
//実体の大きさ
body = abs(close-open)
//陽線か陰線か
yousen = open<close?1:0
insen = open>close?1:0
//前の足が陽線且つ終値が前の足の終値+実体の高さ×2以上、上昇したらロング判定
long = yousen[1] and close > close[1] + body[1]*2 ? 1:0
//前の足が陰線且つ終値が前の足の終値+実体の高さ×2以上、下降したらショート判定
short = insen[1] and close < close[1] - body[1]*2 ? 1:0
//plotshape(short,style=shape.triangledown,color=color.red,transp=70)
//plotshape(long,style=shape.triangleup,color=color.lime,location=location.belowbar,transp=70)
//利確・損切りポイントの初期化
var longProfit = 0.0
var longStop = 0.0
var shortProfit = 0.0
var shortStop = 0.0
//ロング判定がでたらエントリーする
if long
strategy.entry("long", strategy.long, comment="long")
longProfit := close + abs(close-low[1])*2
longStop := low[1]
strategy.exit("exit", "long", limit = longProfit,stop = longStop)
//ショート判定がでたらエントリーする
if short
strategy.entry("short", strategy.short, comment="short")
shortProfit := close - abs(high[1]-close)*2
shortStop := high[1]
strategy.exit("exit", "short", limit = shortProfit, stop = shortStop)
1行ずつ説明していきます。
4−1.まず、おまじないです。
@versionはPineスクリプトのバージョン指定です。最新を使いましょう。
ストラテジーを作る場合は、下記のように記載してあげます。
"WAI_no_SAIKYO_SYUHO"はストラテジの任意の名前です。
//@version=4
strategy("WAI_no_SAIKYO_SYUHO",overlay=true)
4−2.実体の高さと、陽線陰線判定の変数を作ります
基本的に演算子は他のプログラミング言語と同じように使えます。
//実体の大きさ
body = abs(close-open)
//陽線か陰線か
yousen = open<close?1:0
insen = open>close?1:0
body変数に現在の足の終値から始値を引いて絶対値を返すabs関数で足の実体の高さを格納します。
また陽線か陰線か判定するために、三項演算子で
・始値が終値より大きかったら、yousenに1を代入
・始値が終値より小さかったら、insenに1を代入
します。
4−3.ロング(買い)、ショート(売り)の判定処理
//前の足が陽線且つ終値が前の足の終値+実体の高さ×2以上、上昇したらロング判定
long = yousen[1] and close > close[1] + body[1]*2 ? 1:0
//前の足が陰線且つ終値が前の足の終値+実体の高さ×2以上、下降したらショート判定
short = insen[1] and close < close[1] - body[1]*2 ? 1:0
yousen変数に[1]がついてますが、これは一個前の足のデータを参照しています。つまりyousen[1]は、一個前の足が陽線か?を参照します。
4−4.エントリーと利確、損切りを組む
//利確・損切りポイントの初期化
var longProfit = 0.0
var longStop = 0.0
var shortProfit = 0.0
var shortStop = 0.0
//ロング判定がでたらエントリーする
if long
strategy.entry("long", strategy.long, comment="long")
longProfit := close + abs(close-low[1])*2
longStop := low[1]
strategy.exit("exit", "long", limit = longProfit,stop = longStop)
//ショート判定がでたらエントリーする
if short
strategy.entry("short", strategy.short, comment="short")
shortProfit := close - abs(high[1]-close)*2
shortStop := high[1]
strategy.exit("exit", "short", limit = shortProfit, stop = shortStop)
if文を使ってlongに1が入っていたら、ロング(買い)エントリーをします。
strategy.entry関数で買いを実行します。
strategy.exitのlimitプロパティで利確価格を設定でき、
stopプロパティで損切り価格を設定できます。
pineスクリプトでは代入するときに「:=」を使うので注意が必要です。初期化は「=」でOK。
5.バックテストの結果を見てみる

作成したストラテジをチャートに追加すると、エントリーと決済ポイントがが表示されます。
ストラテジーテスタータブから結果を見てみます。
4時間足

1時間足

5分足

6.まとめ
今回検証した手法は過去BTCチャートでは4時間足、1時間足で優位性があったけど、5分足では使い物にならないことがわかりました。
例えば、「RSIが70以下の場合にのみロング」だったり、「SMAの上にいる時だけロング」など、アイデア次第でいろんなエントリー条件を付け加え、どの条件が一番優位性が高いか検証することで、更にこの手法の優位性を磨く事ができると思います。
long = yousen[1] and close > close[1] + body[1]*2 and close > sma(close,100) ? 1:0
(先程のロング条件にsma期間100以上を追加したコード)
TradingViewのストラテジー機能を使うことによって、このように手法の検証をすることができました!
過去検証をすることは、これからのトレード戦略に大きな助けになると思います。ぜひチャレンジしてみてください。