「大きな取引所とのVolumeと価格の差を使う」改
securityを使ってより細かい時間軸で検証できるようコードを書き換えた。
code:aa.pine
//@version=4
//bitFlyer or ByBit 1h
strategy("まだ2勝しかしてないオオサンショウウオ", overlay=false,default_qty_type=strategy.cash, initial_capital=100000, default_qty_value=100000,currency="USD")
reso = input(type=input.resolution, defval="60" ,title="検証に使用する時間軸")
length = input(type=input.integer,defval=200 ,title="標準化に使用する期間")
entry_threshold = input(title="価格差が生じているかどうかの閾値", defval=4, step=0.1)
entry_volume_threshold = input(title="全取引所Volumeの平均がこの閾値以上でないと取引しない(-1 ~ 1ぐらいの範囲がベスト?)",defval=0,step=0.1)
reverse_switch = input(false,title="取引を反転する:取引所によって癖が違うので反転は有効な場合がある")
zscore(ticker_id, timeframe, src, length) =>
sec_source = security(ticker_id, timeframe, src)
sec_sma = security(ticker_id, timeframe, sma(src,length))
sec_stdev = security(ticker_id, timeframe, stdev(src,length))
(sec_source - sec_sma) / sec_stdev
//closeの比較
bitFlyer_fxbtcjpy_close_Zscore = zscore("bitFlyer:FXBTCJPY",reso,close,length)
bybit_btcusd_close_Zscore = zscore("ByBit:BTCUSD",reso,close,length)
//ByBitを使う場合はbitFlyerの代わりにByBitを差し込む
bitFlyer_fxbtcjpy_close_Zscore := base_broker == "ByBit" ? bybit_btcusd_close_Zscore : bitFlyer_fxbtcjpy_close_Zscore
bitmex_xbtusd_close_Zscore = zscore("BitMEX:XBTUSD",reso,close,length)
binance_btcusdt_close_Zscore = zscore("Binance:BTCUSDT",reso,close,length)
coinbase_btcusd_close_Zscore = zscore("Coinbase:BTCUSD",reso,close,length)
kraken_btcusd_close_Zscore = zscore("kraken:BTCUSD",reso,close,length)
//volumeの比較
bitFlyer_fxbtcjpy_volume_Zscore = zscore("bitFlyer:FXBTCJPY",reso,volume,length)
bybit_btcusd_volume_Zscore = zscore("ByBit:BTCUSD",reso,volume,length)
//ByBitを使う場合はbitFlyerの代わりにByBitを差し込む
bitFlyer_fxbtcjpy_volume_Zscore := base_broker == "ByBit" ? bybit_btcusd_volume_Zscore : bitFlyer_fxbtcjpy_volume_Zscore
bitmex_xbtusd_volume_Zscore = zscore("BitMEX:XBTUSD",reso,volume,length)
binance_btcusdt_volume_Zscore = zscore("Binance:BTCUSDT",reso,volume,length)
coinbase_btcusd_volume_Zscore = zscore("Coinbase:BTCUSD",reso,volume,length)
kraken_btcusd_volume_Zscore = zscore("kraken:BTCUSD",reso,volume,length)
base_Zscore = base_broker == "bitFlyer" ? bitFlyer_fxbtcjpy_close_Zscore
: base_broker == "ByBit" ? bybit_btcusd_close_Zscore : bitmex_xbtusd_close_Zscore
average_Zscore = (bitFlyer_fxbtcjpy_close_Zscore + bitmex_xbtusd_close_Zscore + binance_btcusdt_close_Zscore + coinbase_btcusd_close_Zscore + kraken_btcusd_close_Zscore - base_Zscore) / 4
base_volume_Zscore = base_broker == "bitFlyer" ? bitFlyer_fxbtcjpy_volume_Zscore
: base_broker == "ByBit" ? bybit_btcusd_volume_Zscore : bitmex_xbtusd_volume_Zscore
average_volume_Zscore = (bitFlyer_fxbtcjpy_volume_Zscore + bitmex_xbtusd_volume_Zscore + binance_btcusdt_volume_Zscore + coinbase_btcusd_volume_Zscore + kraken_btcusd_volume_Zscore - base_volume_Zscore) / 4
//plot
// plot(average_Zscore / base_Zscore)
// plot(average_volume_Zscore / base_volume_Zscore,color=color.red)
plot(average_Zscore,color=color.aqua)
plot(base_Zscore,color=color.blue)
plot(average_volume_Zscore,color=color.orange)
plot(base_volume_Zscore,color=color.red)
// plot(bitFlyer_fxbtcjpy_close_Zscore / base_Zscore, color=color.blue) //bF
// plot(bitmex_xbtusd_close_Zscore / base_Zscore, color=color.red) //BitMEX
// plot(binance_btcusdt_close_Zscore / base_Zscore, color=color.greelength) //Binance
// plot(coinbase_btcusd_close_Zscore / base_Zscore, color=color.orange) //Coinbase
// plot(kraken_btcusd_close_Zscore / base_Zscore, color=color.teal) //Kraken
if(average_volume_Zscore > entry_volume_threshold)
if(average_Zscore / base_Zscore > entry_threshold)
if(not reverse_switch)
strategy.entry("Long",strategy.long)
else
strategy.entry("Short",strategy.short) //反転
else if(average_Zscore / base_Zscore < entry_threshold * -1)
if(not reverse_switch)
strategy.entry("Short",strategy.short)
else
strategy.entry("Long",strategy.long) //反転
else
strategy.close_all()
else
strategy.close_all()