
この戦略は,移動平均の交差,相対的に強い指数 ((RSI) と大幅な取引量の拡大の判断を組み合わせ,価格が高い取引量の後に一定割合の反転が発生したときにポジションを空白にすると,また,異なる割合の利益をロックするために3つの進行ストップカードを設定します.戦略には,価格が有利な動きを続ける機会を捕捉するための選択可能なトラッキングストップ機能もあります.
急速移動平均と遅い移動平均の黄金交差は,トレンドが変化し始めていることを判断するための初期のシグナルを提供します. RSI指標は,超買い超売状態を評価するために使用され,これらのシナリオでは,信号の安定性を確保するために入場シグナルを生じることを避けるのに役立ちます. 取引量が平均を大幅に上回ると,市場の注意が潜在的価格変化に注意を向けていることを示します. これらの取引量の激化は,市場への入場シグナルの力を強化します.
空気信号の取得と停止退出の原理は,多行と類似しており,ここでは説明することはありません.指摘すべきは,この戦略は多行と空気能力の両方を持っていることです.
この戦略には以下の利点があります.
平均線とRSIの交差は,上場のタイミングを判断し,超買い超売り区域に仓庫を設置することを避け,利益の確率を高めます.
取引量の急増を補助的判断として利用し,価格変動幅の大きい間隔の倉庫を選択することを保証し,信号の指示力を強化する.
価格と取引量が一定パーセント下がる戦略を用いてポジションを構築し,入札のタイミングの精度を高め,反転または上昇の良機を把握する.
3つの連続したストップカードを設定し,価格変動の上昇のスペースを充分利用して利益をロックし,投資家は自分のリスクを負う状況に応じていくつかのストップカードを使用することができます.
選択可能なトラッキング・ストップ・ロスの機能により,投資家は市場の変動に応じて有効化するか選択し,保証金の同時にもっと大きな利益を得ることができます.
また,多頭と空頭取引にも適用され,市場の上昇と低下の両方で利益を得ることができ,戦略の実用性を高めます.
金融商品の取引にはリスクがありますが,注意すべき点は以下の通りです.
遅い平均線交差は必ずしも市場の動きを正確に判断することはできず,平均線パラメータが正しく使用されていない場合でも誤った信号が発生する.
RSI指標のパラメータの設定が不適切であることも,超買い超売り領域への漏れにつながる可能性があります.市場に応じてRSI周期パラメータを調整する必要があります.
取引量の急増は,価格の大幅な変化とは全く同じではない.取引量の基準は,適切に調整することができる.
価格や取引量の減少が大きすぎても小さすぎても,上場時期に影響を及ぼし,市場に応じて調整する必要がある.
設定されたストップ幅でストップオークの完全取引を保証することはできず,市場の突然の変化は滑り込みを引き起こす可能性があります.
ストップを追跡する 設定幅が大きすぎると,早期にストップを退出させ,より大きな利益を失う可能性があります.
上記のリスクに対して,コード最適化,パラメータ調整,そして厳格な反射テストによって,戦略の安定性と信頼性を確保する必要がある.
この戦略はさらに改善できる余地があります.
ブリン帯,KDなどの指標の組み合わせの使用は,信号の正確性をさらに向上させることができる.
LSTMなどの機械学習方法と組み合わせた動的移動平均の構築は,最近の市場状況に応じて平均線パラメータを自動的に調整し,トレンドの判断力を向上させることができます.
市場変動に基づくストップ/ストップ・損失のダイナミック調整機能を追加し,戦略が現在の市場変動の程度に応じてストップ・アップ幅を自動的に調整できるようにした.
ダイナミック・アソシエーション・メソッドを利用して,大盤全体的な下落と個別の株との関連性に基づいてリアルタイムで回落因子を最適化して,最適なポジション構築タイミングを選択する.
多要素モデルを採用し,感情分析,関連ルール分析などの選択と組み合わせて,価格関連性と取引量変化の最も強い指標を適用する戦略を適用することで,戦略の効果を大幅に向上させることができます.
この戦略は,全体的に中短線投資家の使用に非常に適しています.最適化された戦略機能は,より完善でスマートで,実戦での応用価値が高いでしょう.積極的な進取的な量化取引戦略として,投資の豊富なリターンを提供しながら,リスクを減らすために努力し,本当に安定して戦うでしょう.
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Advanced Strategy with Volume and Price Retracement and Multi-Take Profit (USDT)", overlay=true)
// Parametreler
fastLength = input(12, minval=1, title="Fast Moving Average")
slowLength = input(26, minval=1, title="Slow Moving Average")
rsiPeriod = input(14, minval=1, title="RSI Period")
volLength = input(20, minval=1, title="Volume MA Length")
volMultiplier = input(2.0, title="Volume Spike Multiplier")
trailOffset = input(1, title="Trailing Offset (%)")
usdtPerTrade = input(50000, title="USDT per Trade")
retraceFactor = input(0.8, title="Retracement Factor for Entry")
takeProfit1 = input(1, title="Take Profit 1 (%)")
takeProfit2 = input(2, title="Take Profit 2 (%)")
takeProfit3 = input(3, title="Take Profit 3 (%)")
trailForTP = input(true, title="Use Trailing Stop for Take Profits")
// Hesaplamalar
fastMA = sma(close, fastLength)
slowMA = sma(close, slowLength)
rsi = rsi(close, rsiPeriod)
volMA = sma(volume, volLength)
volumeSpike = volume > volMA * volMultiplier
// Durum Değişkenleri ve Saklanan Değerler
var float spikeVolume = na
var float spikePrice = na
var int direction = 0
// Alım/Satım Sinyalleri
longCondition = crossover(fastMA, slowMA) and rsi < 70
shortCondition = crossunder(fastMA, slowMA) and rsi > 30
// Hacim Spike ve Fiyat Hareketinin Saklanması
if (longCondition and volumeSpike)
spikeVolume := volume
spikePrice := close
direction := 1
else if (shortCondition and volumeSpike)
spikeVolume := volume
spikePrice := close
direction := -1
// Retracement Kontrolü ve Giriş Emirleri
if (direction == 1 and volume < spikeVolume * retraceFactor and close < spikePrice * (1 - trailOffset / 100))
strategy.entry("Long", strategy.long, qty=usdtPerTrade / close)
spikeVolume := na
direction := 0
else if (direction == -1 and volume < spikeVolume * retraceFactor and close > spikePrice * (1 + trailOffset / 100))
strategy.entry("Short", strategy.short, qty=usdtPerTrade / close)
spikeVolume := na
direction := 0
// Take Profit Emirleri
if strategy.position_size > 0
strategy.exit("TP1", "Long", limit=strategy.position_avg_price * (1 + takeProfit1 / 100), qty_percent=33, trail_offset=trailForTP ? atr(14) / 2 : na)
strategy.exit("TP2", "Long", limit=strategy.position_avg_price * (1 + takeProfit2 / 100), qty_percent=33, trail_offset=trailForTP ? atr(14) : na)
strategy.exit("TP3", "Long", limit=strategy.position_avg_price * (1 + takeProfit3 / 100), qty_percent=34, trail_offset=trailForTP ? atr(14) * 1.5 : na)
if strategy.position_size < 0
strategy.exit("TP1", "Short", limit=strategy.position_avg_price * (1 - takeProfit1 / 100), qty_percent=33, trail_offset=trailForTP ? atr(14) / 2 : na)
strategy.exit("TP2", "Short", limit=strategy.position_avg_price * (1 - takeProfit2 / 100), qty_percent=33, trail_offset=trailForTP ? atr(14) : na)
strategy.exit("TP3", "Short", limit=strategy.position_avg_price * (1 - takeProfit3 / 100), qty_percent=34, trail_offset=trailForTP ? atr(14) * 1.5 : na)
// Pozisyon çıkışları
strategy.close("Long", when=shortCondition)
strategy.close("Short", when=longCondition)