2つの移動平均振動のブレイク戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-08 14:43:48
タグ:

img

概要

ダブル・ムービング・平均振動ブレイクアウト戦略は,ダブル・ムービング・平均システムを利用した短期間の取引戦略である.この戦略は,価格チャネルとダブル・ボリンジャー・バンドに基づいて取引信号を生成し,急速なRSIインジケーターによって助けられ,過剰購入および過剰販売条件を決定する.利潤のために中期価格動向のブレイクアウトを捕捉することを目的としている.

戦略の論理

ダブル・ムービング・平均振動ブレイクアウト戦略は,20期間の価格チャネルとボリンジャー・バンドを主要取引指標として使用する.価格チャネルは,現在の価格振動範囲を表す最高価格と最低価格の移動平均から構成される.ボリンジャー・バンドは,価格チャネルのミッドラインと標準偏差によって形成され,価格の変動範囲を直感的に記述する.価格がチャネルの上下線に近づくと,価格は振動範囲を突破して新しいトレンドを形成することがあります.この時点で,過買いまたは過売り状態を判断するためのRSI指標と組み合わせて,トレンド方向を決定し,取引決定を下すことができます.

特に,急速なRSIが5を下回ると,過剰販売ゾーンとみなされ,急速なRSIが99を超えると,過剰購入ゾーンとみなされる.さらに,Kラインエンティティの方向性や価格の新しい高値 (低値) などの要因も,誤ったブレイクを避けるために考慮されるべきである.上記の条件が満たされたとき,購入・販売信号が生成される.

利点

ダブル・ムービング・平均振動ブレイクアウト戦略の最大の利点は,中期価格動向の折りたたみ点を利益のために捉えることです.単一の移動平均値とチャネルと比較して,ダブル・ボリンジャー・バンドは価格変動とボリュームをより直感的に反映しています.また,20日間の移動平均値や60日間の移動平均値などの長いサイクル指標と比較して,価格変化により迅速に対応し,ターンを捉えるのにより高い成功率を持っています.また,高速RSI指標を組み合わせることで,誤ったブレイクアウトを効果的にフィルターすることができます.したがって,この戦略は利益の確率を最大化することができます.

リスク

ダブル・ムービング・平均振動ブレイクアウト戦略にはいくつかのリスクがある.第一に,中期取引自体にはストップ・ロスのリスクが高くなります.強いトレンドでは,中期指標で偽ブレイクアウトが複数回発生し,ストップを引き起こす可能性があります.第二に,過剰購入および過剰販売ゾーンを判断する急速なRSI指標の有効性は市場情勢に影響されます.市場で構造的変化が発生すると,そのような補助指標の有用性は減少します.最後に,閉値,ボリューム,ターンオーバーなどの他の要因を組み込むことは意思決定の正確性を改善することができます.

対策は,ストップ・ロスの範囲を適切に調整し,上昇傾向においてストップ・ロスのポイントを緩め,下落傾向においてそれを緊縮することである.また,1つまたは2つの指標だけに依存しないように,より多くの補助指標を完全に考慮する.判断効果が低下すると,リスクを避けるために位置を適切に削減する.

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

二重移動平均振動ブレイクアウト戦略のさらなる最適化にはまだ余地があります. まず,パラメータ最適化.最適なパラメータ組み合わせを見つけるために,より多くのサイクルパラメータをテストできます. 次に,モデル最適化. 過剰購入および過剰販売領域をより正確に判断するための機械学習モデルを導入します. 第三に,タイムフレーム最適化. 最適なアプリケーションシナリオを決定するために,毎日および60分別などの異なるタイムフレームでテストします. 第四に,条件最適化. 量拡大傾向およびインデックスDMIなどのフィルター信号により多くのボリウムおよび価格指標を追加します.

結論

ダブル・ムービング・平均振動ブレイクアウト戦略は,効果的なトレンド追跡戦略であるダブル・ボリンジャーバンドシステムを構築することで,中期価格ブレイクアウトを捕捉する.この戦略は高い成功率と迅速な応答を有し,効果的に利益を得ることができる.パラメータ最適化,モデル最適化,タイムフレーム選択などの手段によって,戦略のパフォーマンスをさらに改善することができる.この戦略は,定量的な改善とアプリケーションを実行するための経験豊富な定量的なトレーダーに適している.


/*backtest
start: 2023-01-07 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.4", shorttitle = "NoroBands str 1.4", 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")
usemm = input(true, "Use min/max")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
needlo = input(false, defval = false, title = "Show Locomotive")
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
hd2 = center + distsma * 2
ld2 = center - distsma * 2

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

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
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")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//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) and (min < min[1] or usemm == false) ? 1 : 0
dn = trend == -1 and ((close > open or color == false) or close > ld) and (max > max[1] or usemm == false) ? 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

//Locomotive
uploco = trend == 1 and close < open and min < min[1] and close < center ? 1 : 0
plotarrow(needlo == true and uploco == 1 ? 1 : 0, colorup = black, colordown = black, transp = 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)

もっと