双方向の迅速量的な逆転取引戦略

作者: リン・ハーンチャオチャン, 日時: 2023-12-19 15:59:36
タグ:

img

概要

これは,価格チャネル,ボリンジャーバンド,および急速RSIインジケーターに基づいた二重トラック逆転取引戦略です.効率的な逆転取引を達成するために,トレンドを識別するためのチャネルインデックス,サポートおよびレジスタンスレベルを認識するためのボリンジャーバンド,および過剰購入および過剰販売のシグナルを検出するための急速RSIを組み合わせます.

戦略の論理

この戦略は,主に以下の指標に基づいて取引決定を行います.

  1. 価格チャネル: 特定の期間の最高値と最低値を計算し,チャネルの中央線をプロットする. 価格がチャネルを突破すると取引信号が生成される.

  2. ボリンジャーバンド: センターラインは価格チャネルのセンターラインである. 上部と下部帯は,センターラインからの価格偏差の標準偏差に基づいて計算される. 価格がボリンジャーバンドと相互作用するときに取引信号が生成される.

  3. Fast RSI (Period = 2): 価格の過剰購入および過剰販売状況を決定する.RSIが5を下回るときはロング,RSIが95を超えるとショート.

  4. クリプトボトム指標:価格がサポートレベルを突破したかどうかを決定します.高速RSIと組み合わせて,高い確率のロング信号を生成します.

価格がチャネルやボリンガー帯を突破して取引をするタイミングと,RSIの過剰購入・過剰販売の指標に基づいて,ロング・ショート・トレードを行うタイミングによって,この戦略の核心トレードロジックは形成されます.

戦略 の 利点

この戦略には以下の利点があります.

  1. ダブルトラックシステムは信号の精度を高め,価格チャネルは主要なトレンドを判断し,ボリンジャー帯は正確なサポートとレジスタンスレベルを特定します.この組み合わせは信号の質を向上させます.

  2. 急速なRSI指標は,過剰購入と過剰販売を検出することによって逆転機会を捉える.RSI期間は2に設定されているため,逆転ノードを迅速に識別することができます.

  3. CryptoBottomは,ロング信号の確認を加速します.サポートレベルを突破することで,底部特性の判断が迅速になり,ロング信号の欠落を回避できます.

  4. 合理的なパラメータ設定と最適化が簡単です. シンプルで直感的なパラメータ組み合わせにより,パラメータ最適化が容易になります.

戦略 の リスク

この戦略にはいくつかのリスクもあります:

  1. ボリンジャー帯の不適切なパラメータ設定は,重要な価格動きを見逃したり,誤ったシグナルを生む可能性があります.

  2. 双軌間の相互作用パターンは複雑で 正確な判断のために 技術的な洗練が必要です

  3. 価格が引き戻される可能性は排除できないので 逆転が失敗するリスクは依然として存在します

  4. パラメータ最適化における困難.市場の状況が変化した場合,最適なパラメータは非効果的になる可能性があります.

オプティマイゼーションの方向性

戦略は以下の点で改善できる:

  1. ボリンジャー帯のパラメータを最適化し,上下帯を価格に近づけ,取引信号の精度を向上させる.

  2. ストップ・ロスのメカニズムを追加して 損失が一定値に達すると 削減します.これはリスクを効果的に制御します.

  3. 誤った信号を減らすために傾向,サポート,レジスタンスのレベルを決定するためのより多くの指標を組み込む.

  4. マシン学習アルゴリズムを導入し パーマータを自動調整して 変化する市場環境に適応できるようにする

結論

この戦略は,価格チャネル,ボリンジャーバンド,および高速RSIインジケーターを統合して,二方向逆転取引システムを構築する.主要なトレンドを判断する一方で,サポート,レジスタンス,オーバーバイト/オーバーセールドの機会を迅速に把握する.パラメータ設定はシンプルで直接的で,理解し最適化するのが簡単です.逆転の機会を効果的に特定し,アルゴリズム取引に適しています.


/*backtest
start: 2022-12-18 00:00:00
end: 2023-11-30 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.3", shorttitle = "NoroBands str 1.3", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, "Use ColorBar")
usecb = input(true, "Use CryptoBottom")
usersi = input(true, "Use RSI")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
src = close

//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//CryptoBottom
mac = sma(close, 10)
lencb = abs(close - mac)
sma = sma(lencb, 100)
max = max(open, close)
min = min(open, close)

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//dist
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Signals
up = trend == 1 and ((close < open or color == false) or close < hd) ? 1 : 0
dn = trend == -1 and ((close > open or color == false) or close > ld) ? 1 : 0 
up2 = close < open and lencb > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0 //CryptoBottom
//dn2 = close > open and len > sma * 3 and max > max[1] and fastrsi > 90 ? 1 : 0 //CryptoBottom
up3 = fastrsi < 5 ? 1 : 0
//dn3 = fastrsi > 99 ? 1 : 0

longCondition = up == 1 or (up2 == 1 and usecb == true) or (up3 == 1 and usersi == true)
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

もっと