トレーディングビューの投信戦略テスターでBitfinexのLong、Shortのボリューム増減でエントリーする

Bitfinexのロング、ショートのボリュームを監視して、BitMEXでエントリーを行う投資戦略テスターのPineスクリプトです。

投資戦略テスターの内容

Bitfinex、BTCUSDのロング、ショートのボリュームの増減を監視して
BitMEXのXBTUSDを売買する投資戦略テスターです。
下記の銘柄、時間で検証しています。

銘柄:BITMEX:XBTUSD
時間:1時間

以下、エントリー条件です。

・エントリー

ロング条件:ロングのボリュームがしきい値より下がる かつ ショートのボリュームがしきい値より上がる
ショート条件:ロングのボリュームがしきい値より上がる かつ ショートのボリュームがしきい値より下がる

・クローズ

ロング、ショート条件:トレイルストップ

投資戦略テスターのイメージ画像

投資戦略テスターの設定 入力

Pineスクリプトのコード

解説

入力値

long_symbol = input("BITFINEX:BTCUSDLONGS", type=symbol, title="ロング 通貨")
short_symbol = input("BITFINEX:BTCUSDSHORTS", type=symbol, title="ショート 通貨")
per = input(0.3, type=float, step=0.1, title="%(ボリュームの何%をしきい値とするか)")
trail = input(30, type=float, title="トレイル幅")
tick = input(10, type=float, title="ティック幅")

input()で入力する項目を指定します。以下の項目を指定します。
ロング通貨:ロング対象の通貨
ショート通貨:ショート対象の通貨
%:ボリュームがこの%以上、増減したらエントリー
トレイル幅:ドル
ティック幅:XBTUSDは0.1ドル刻みのため、10倍する(あってる?)

ロング、ショートボリュームの習得

// 計算 ------------------------------------
long = security(long_symbol, period, close)
short = security(short_symbol, period, close)

security()でロング銘柄とショート銘柄の値を習得します。

ロング、ショートのしきい値計算

// ロング・ショートしきい値(ボリュームの何%か)
long_th = long / 100 * per
short_th = short / 100 * per

現在のボリュームから入力値で指定した%がしきい値となります。

ロング・ショート判定

// 売買判定
// ロング条件(ロングがしきい値より下がる かつ ショートがしきい値より上がる かつ ポジションなし)
is_long = change(long, 1) < -long_th and change(short, 1) > short_th and pos == 0
// ショート条件(ロングがしきい値より上がる かつ ショートがしきい値より下がる かつ ポジションなし)
is_short = change(long, 1) > long_th and change(short, 1) < -short_th and pos == 0

change()で一つ前の足との差分を習得します。
ロングのエントリー条件:ロングが指定%以上減る かつ ショートが指定%以上増える かつ ポジションなし
ショートのエントリー条件:ショートが指定%以上増える かつ ショートが指定%以上減る かつ ポジションなし

売買箇所

// 売買 ------------------------------------
// テスト期間の判定
if is_test_period()
    // エントリー
    strategy.entry("L", strategy.long, when=is_long)
    strategy.entry("S", strategy.short, when=is_short)
    // クローズ(トレイルストップのみ)
    strategy.exit("Exit L", "L", trail_points=trail * tick, when=pos > 0)
    strategy.exit("Exit S", "S", trail_points=trail * tick, when=pos < 0)

strategy.entry()でロング、ショートのエントリー条件がTrueの場合、エントリーが行われます。
strategy.exit()でクローズします。
条件はトレイル金額 かつ 前の足でポジションをもっている
です。