この戦略は,選択された株や仮想通貨の潜在的なブレイクアウト機会を特定するために,二重移動平均システムを採用する. 基本的な原則は,短期移動平均が長期移動平均を下回るときに購入し,価格が長期移動平均を再テストするときに売却することです.
この戦略は,異なる期間の2つの単純な移動平均値 (SMA) を取引信号として利用する.最初のSMAは全体的なトレンド方向を表現するためにより長い期間に有する.第2のSMAは短期的な価格変動を把握するためにより短い期間に有する.
短期SMAが長期SMAを下から越えると,全体的な価格上昇傾向を示し,したがって戦略はロングポジションを開く.価格が長期SMAを再テストするために引き下げると,短期の引き下げが終了し,戦略は停止またはポジションの利益を取ることを検討することを示します.
さらに,この戦略は,極端な状況での取引を避けるために"過売り"と"過買い"の条件を有し,SMAクロスオーバーと合理的な評価基準の両方が満たされている場合にのみポジションを開く.
この戦略の最適化にはさらに余地があります.
この戦略は,機会を検出するために二重移動平均システムを使用してトレンドフォローとプルバック取引の強みを組み合わせます.同時に,埋め込まれたオーバーバイト/オーバーセール条件は不必要なポジション開設を回避します.これはより深い研究と最適化に値する非常に実践的な量子取引戦略です.
/*backtest start: 2023-02-20 00:00:00 end: 2024-02-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=5 strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Inputs ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA') ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA') sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters") too_deep = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too') too_thin = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too') // Calculations ma1 = ta.sma(close,ma_length1) ma2 = ta.sma(close,ma_length2) too_deep2 = (ma2/ma1-1) < too_deep too_thin2 = (ma2/ma1-1) > too_thin // Entry and close condtions var float buy_price = 0 buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2 close_condition1 = (close > ma2) and strategy.position_size > 0 and (close < low[1]) stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na close_condition2 = strategy.position_size > 0 and stop_distance > sl stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na // Entry and close orders if buy_condition strategy.entry('Long',strategy.long) if buy_condition[1] buy_price := open if close_condition1 or close_condition2 strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : "")) buy_price := na plot(ma1,color = color.blue) plot(ma2,color = color.orange)