この戦略は,トレードボリュームが高く,ロングポジションに入るとき,ボリンガーバンド指標とボリューム指標を組み合わせて,ボリンガー上部バンド以上の強力なモメンタムブレイク機会を特定します.また,トレンド方向を決定し,デッドポジションを保持するリスクを減らすために移動平均指標を使用します.
この戦略は主に価格レベル,勢い,トレンドという3つの要因を考慮する.価格がボリンジャー上部帯をバイゾーンに突破すると,取引量の急上昇は強い勢いと資本流入を示します.これはロングポジションに入る適切なタイミングです.その後,デッドポジションを保持しないために市場傾向を決定するために移動平均を使用します.価格アクション,勢い,リスク制御を組み合わせることで,強いトレンドから利益を得ることを目指します.
音量フィルターを組み合わせると リスクを軽減する
移動平均の傾向を決定することで 損失を時間的に削減できるので 保有損失を減らすことができます
意思決定のための複数の指標を組み合わせた定量戦略を実施し,異なる製品と時間枠に合わせて柔軟なパラメータを調整する.
明確なコード構造,読み取りと保守が簡単 指標の計算,信号生成,位置管理のモジュール設計
ボリンジャー・バンドは 極端な価格変動や 信号が欠落したり 誤った信号を生むときに 失敗する可能性があります
総取引量が低い場合,利益はありません. 十分な取引量がなければ,買い信号は利益にならないかもしれません.
移動平均値の動向決定も失敗し,効果的なストップロスを完全に保証できない可能性があります.
パラメータの調節が不適切である場合,戦略の収益性にも影響する.例えば,取引時間窓が短すぎると,トレンドの逆転が見逃される可能性があります.
より良いトレンドとサポート/レジスタンスの分析のためにより多くの技術指標を追加し,ストップロスを改善します.例えばキャンドルスタイクパターン,チャネル,主要なサポートレベル.
機械学習モデルを追加して,実際の突破の可能性を判断し,偽信号を減らす.例えば,LSTMディープラーニングモデル.
ダイナミックなポジションサイジング,ストップロスの追跡などの資本管理戦略を最適化し,単一の取引損失の影響を減らす.
ボリンジャー帯や 戦略の安定性を高めるため 量窓などのパラメータを調整します
この戦略は,ボリンジャーバンドと取引量指標を統合し,強力なモメンタム購入機会を特定し,移動平均が効果的なストップロスを保証する.単一指標戦略と比較して,より高い精度とリスク制御能力を備えています.モジュール式デザイン,トレンドフィルター,ストップロスのメカニズムにより,モメンタムブレイクアウト取引戦略を最適化しやすくします.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © KAIST291 //@version=4 initial_capital=1000 strategy("prototype", overlay=true) length1=input(1) length3=input(3) length7=input(7) length9=input(9) length14=input(14) length20=input(20) length60=input(60) length120=input(120) ma1= sma(close,length1) ma3= sma(close,length3) ma7= sma(close,length7) ma9= sma(close,length9) ma14=sma(close,length14) ma20=sma(close,length20) ma60=sma(close,length60) ma120=sma(close,length120) rsi=rsi(close,14) // BUYING VOLUME AND SELLING VOLUME // BV = iff( (high==low), 0, volume*(close-low)/(high-low)) SV = iff( (high==low), 0, volume*(high-close)/(high-low)) vol = iff(volume > 0, volume, 1) dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100) weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100) //----------------------------------------------------------- Davgvol = sma(volume, dailyLength) Wavgvol = sma(volume, weeklyLength) //----------------------------------------------------------- length = input(20, minval=1) src = input(close, title="Source") mult = input(2.0, minval=0.001, maxval=50, title="StdDev") mult2= input(1.5, minval=0.001, maxval=50, title="exp") mult3= input(1.0, minval=0.001, maxval=50, title="exp1") mult4= input(2.5, minval=0.001, maxval=50, title="exp2") basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev dev2= mult2 * stdev(src, length) Supper= basis + dev2 Slower= basis - dev2 dev3= mult3 * stdev(src, length) upper1= basis + dev3 lower1= basis - dev3 dev4= mult4 * stdev(src, length) upper2=basis + dev4 lower2=basis - dev4 offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) //---------------------------------------------------- exit=(close-strategy.position_avg_price / strategy.position_avg_price*100) bull=( BV>SV and BV>Davgvol) bull2=(BV>SV and BV>Davgvol) bux =(close>Supper and close>Slower and volume<Davgvol) bear=(SV>BV and SV>Davgvol) con=(BV>Wavgvol and rsi>80) imInATrade = strategy.position_size != 0 highestPriceAfterEntry = valuewhen(imInATrade, high, 0) // STRATEGY LONG // if (bull and close>upper1 and close>Supper and high>upper and rsi<80) strategy.entry("Long",strategy.long) if (strategy.position_avg_price*1.02<close) strategy.close("Long") else if (low<ma9 and strategy.position_avg_price<close) strategy.close("Long") else if (ma20>close and strategy.position_avg_price<close ) strategy.close("Long") else if (rsi>80 and strategy.position_avg_price<close) strategy.close("Long") else if (strategy.openprofit < strategy.position_avg_price*0.9-close) strategy.close("Long") else if (high<upper and strategy.position_avg_price<close) strategy.close("Long") ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120)) if (close<strategy.position_avg_price*0.98) strategy.close("Short") else if (rsi<20) strategy.close("Short")