TrandingView でバックテストしたりインジケーター作ったりするためのスクリプト言語である Pine スクリプトについて、基礎的なことを調べたりしたので備忘録として残します。
サンプルスクリプト
バックテストの簡単なチュートリアル
以下のように「空のストラテジースクリプト」を選択すると、以下のようなテンプレートが生成されます。
//@version=4
strategy("マイストラテジー", overlay=true)
longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
これをそのまま以下のように「チャートに追加」すると、バックテストが自動で実行されます。
このテンプレート(サンプル)でやっていることは、「14日移動平均線と28日移動平均線がクロスしたときにエントリーまたは決済」というのを永遠にドテン繰り返しているという感じです。
例えば、S&P500 の CFD で4時間足でやってみたときの結果は、以下の感じでした。
なんと、ただのサンプルなのに約$500プラス収益になってます!
・・・といっても、投資条件がどうなっているのかわからないので、確認してみます。
以下のように、歯車を選択して、プロパティを表示してみます。
初期投資資金が100,000円で、一回当たりの発注数が1枚ということみたいです。
(ちなみに、ここを変更数とバックテスト条件を変更できるみたいです)
これを考えると、利益はたった+50%なので、普通にS&P500をホールドし続けるほうが良い成績ということになりますね。
やっぱり適当なストラテジーでは、ただの長期投資には負けるということか・・・
サンプルスクリプトの簡単な解説
上記のスクリプトコードですが、現在わかっている段階の説明です。
バージョン
//@version=4
よくわかっていません。ぱっと見、コメントアウトされているので、効力はなさそうな気がしますが・・・ちょっとググった感じ、「何のバージョンで動くスクリプト」ということを表明する効果があるという記事が見当たりました。
とりあえず、現状では情報が多くあるのはバージョン3なので、3 に書き換えたほうがいいのかもしれません。
ストラテジーかインジケーターか
strategy("マイストラテジー", overlay=true)
で、このスクリプトがストラテジー(つまりバックテストができる)であることを示すみたいです。
対して、インジケーターの場合は study(~)
とやればよいみたいです。
ストラテジーとインジケーターの違いは以下の通りです。
- ストラテジー
- バックテストができる
- インジケーターの機能を包含する
- 2000件以上の売買が発生するとエラーになるらしい
- インジケーター
- バックテストできない
つまり端的に言うと、ストラテジーはインジケーターの上位互換ってことでよいと思います。ただし、数には限りがあるよという感じでしょうか。
売買判断
crossover
関数と crossunder
関数でゴールデンクロス(値の上抜け)とデッドクロス(値の下抜け)を判断できるみたいです。
このサンプルスクリプトだと、crossover
関数で「14日線が28日線を上抜けたか」を判断し、crossunder
関数で「14日線が28日線を下抜けたか」を判断します。
売買指示
strategy.entry("任意の文字列A", strategy.long)
で「任意の文字列A」という識別子を付けてロングポジションをエントリーします。
このポジション中に strategy.entry("任意の文字列B", strategy.short)
で「任意の文字列B」という識別子をつけてショートすると、「任意の文字列A」が決済されます。
ちょっとややこしいのですが、「任意の文字列A」とか「任意の文字列B」は、オーダー変更やキャンセルに使用すときに使いますが、ロング中のポジションがあればショートで決済される仕様?がちょっと意味が分かりません。
今わかっていないこと
両建てというか、ロングポジション持ちつつショートポジションをとる方法はないのでしょうか。
上記の strategy.entry
でロングした後にショートすると、新しくポジションをとるのではなく決済が強制されるので、ちょっとそこらへんがわからないです。
コメント