【仮想通貨自動売買bot】速習Pineスクリプト①

いつもお世話になっております。せんまいらっちょv3です。

相変わらず仮想通貨の自動売買botの作成に勤しんでおります。

今回から何回かに分けてTrading Viewで使えるPineスクリプトを勉強していきます。Pineスクリプトを習熟すると下記のように、自分が作成した自動売買の戦略を事前に評価することができます。


今回はデフォルトで利用できるボリンジャーバンド戦略を勉強していきます。

まずはコードの全体像です。

//@version=3
strategy("Bollinger Bands Strategy", overlay=true)
source = close
length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)

basis = sma(source, length)
dev = mult * stdev(source, length)

upper = basis + dev
lower = basis - dev

buyEntry = crossover(source, lower)
sellEntry = crossunder(source, upper)

if (buyEntry)
   strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandLE")
else
   strategy.cancel(id="BBandLE")

if (sellEntry)
   strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandSE")
else
   strategy.cancel(id="BBandSE")

一つずつ見ていきましょう。

strategy("Bollinger Bands Strategy", overlay=true)

このストラテジーの名前を設定しています。またoverlayパラメータをtrueにすることで下記のように既存のチャートに上書きして描画することができます。

上段では価格の推移のみが描画されていますが、下段では戦略が上書きされて描画されているのがわかります。


source = close
length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)

closeは組み込み変数で終値を利用するという意味です。それをsourceという変数に代入することで、他の行に使い回せるようにしています。このようにsource変数に代入していることで、仮に終値ではなく、始値を利用して戦略を評価したいと思ったときに、各行を全て書き換える必要がなくなります。

input関数はGUI上で自由に設定できる変数のようなものです。これを設定しておくと、後々色々パラメータをいじることで、どのように投資戦略のパフォーマンスが変わるか試すことができます。minvalはその変数が取りうる最小値、maxvalは最大値を示しています。


basis = sma(source, length)
dev = mult * stdev(source, length)

smaは単純移動平均線を返してくれます。これより上段で定義した値が代入されています。sourceはclose,lengthは20ですね! stdev関数は標準偏差を返します。


upper = basis + dev
lower = basis - dev

basis + devで移動平均線に標準偏差を足したボリンジャーバンドの上側を定義しています。lowerは下側のボリンジャーバンドです。


buyEntry = crossover(source, lower)
sellEntry = crossunder(source, upper)

crossoverはcrossover(x,y)というように二つの値を利用して、xがyの値を超えた時trueという真偽値を返します。この場合sourceにはclose,lowerにはボリンジャーバンドの下側が入っていますから、終値がボリンジャーバンドの下側をはみ出して、中に戻ってくるタイミングで買いエントリーをするという意味です。crossunderはcrossunder(x,y)でxがyの値を下回った時trueを返します。


if (buyEntry)
   strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandLE")
else
   strategy.cancel(id="BBandLE")

if (sellEntry)
   strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", oca_type=strategy.oca.cancel, comment="BBandSE")
else
   strategy.cancel(id="BBandSE")

先ほど定義した、エントリータイミングを利用して具体的な売買をしているスクリプトがこの部分です。if else 構文は、もしある条件がtrueだったら、こういう動作をしなさい。そうでない場合は別のこういう動作をしなさいという条件文を示してます。

strategy.entryで売買の指示をだします。"BBandLE"というパラメータはidを示しており、このidとstrategy.cancel関数と使うことで、id指定で注文をキャンセルすることができます。

また次のパラメータのstrategy.longは買い、strategy.shortは売りを表しています。stopパラメータには損切り価格を設定します。上段の場合、ボリンジャーバンドの外側から内側にかけて、終値が入ってくる際に買いエントリーをしかけるが、また外側に逃げていくようならば、その時点で損切りすることを示しています。

oca_name,oca_typeパラメータを利用することで注文をグループ化することができ、グループ化した注文のどれかが成立すると、グループ化された他の注文がキャンセルされるといった高度な使い方ができるようです。


以上、デフォルトのボリンジャーバンド戦略のPineスクリプトを見ていきました。デフォルトの戦略でも結構勉強になります。他の戦略も見て、有用な関数等があれば解説したいと思います。


機械学習関連やトレードのつぶやきをしてますので、もしよろしければフォローお願いします。

https://twitter.com/comusou3?lang=ja





サポートいただいたお金は、サーバー代や書籍購入代として利用させていただきます。