この戦略は,変動指標BBとフィルタリング用のカスタムモメント指標を組み合わせて移動平均クロスオーバーを取引信号として使用し,MAクロスオーバー信号の信頼性を向上させ,偽信号を減らすことを目的としています.
50期間のEMAと200期間のSMAを使って 黄金十字と死十字の信号を形成します
価格が上昇傾向にある場合,価格が200日線以上で,カスタムモメントインジケーター値が25以下で,購入信号を生成する必要があります.
価格が下落傾向にある場合,価格が200日線以下で,カスタムモメンタムインジケータ値が75以上で,セールシグナルを生成する必要があります.
カスタムモメントインジケーターは,過去最大値と最小値に基づいて BBのミッドラインとバンド距離を 0-100の範囲に映し出します.
モメント インディケーターは相対的な価格変動を反映し,
中長期トレンドを把握するために EMA と SMA の強みを活用する.
モメントインジケーターによる過濾の強化により,信頼性が向上し,偽信号が減少します.
BB帯距離は波動性強度を反映し,歴史的な正規化はパラメータ依存を避けます.
調整可能な EMA,SMA 期間とインパルス 限界,変化する市場環境に適応できる.
シンプルな論理と最適化柔軟性 強力な実用性
EMAとSMAは遅延効果があり 短期的な機会を逃す可能性があります
範囲限定市場では不適格な傾向がある.
モメントスロージルは最適パラメータの反復バックテストを必要とし 過剰なフィットメントのリスクがあります
長期的システムでは 安定した利回りがありますが 絶対利回りは限られています
適応性を向上させるために MA 期間を短縮したり,補完指標を追加したりできます.
最適なパラメータのために異なるMA組み合わせを試験する.
MACD,KDなどの補完指標を追加します
動き指標のパラメータを最適化します 振り返る期間,マッピング範囲など
ストップ・ロスはリスク管理に 組み込まれる.
機械学習機能抽出を使用して,シンボルの特定のパラメータを調整します.
不合理なクロスオーバー信号を避けるために音量指標を追加します.
この戦略は,長期トレンドフォローと二重モメンタムスローズルフィルタリングの強みを組み合わせて,高い信頼性と実用的な価値を実現する.パラメータ最適化と補完技術によりさらなる改善が可能である.この革新的なコンセプトは,他のトレンドシステムに貴重な洞察を提供している.アルゴリズム取引戦略ライブラリに貴重な追加である.
/*backtest start: 2023-10-26 00:00:00 end: 2023-10-27 13:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="EMA Difference Mapping with Trades", shorttitle="EMA Diff Map", overlay=false) // Inputs emaLength = input(20, "EMA Length") stdDevLength = input(2, "Standard Deviation Length") priceSource = close takeProfitPoints = input(1000, title="Take Profit (in Points)") stopLossPoints = input(2500, title="Stop Loss (in Points)") // Calculate EMA ema = ema(priceSource, emaLength) // Calculate Standard Deviation stdDev = stdev(priceSource, stdDevLength) // Calculate differences diff1 = (ema + stdDev) - ema diff2 = ema - (ema - stdDev) // Calculate min and max differences from last year lookbackPeriod = 504 // Number of trading days in a year minDiff1 = lowest(diff1, lookbackPeriod) maxDiff1 = highest(diff1, lookbackPeriod) minDiff2 = lowest(diff2, lookbackPeriod) maxDiff2 = highest(diff2, lookbackPeriod) // Map differences based on requirements mappedDiff1 = 50 + 50 * ((diff1 - minDiff1) / (maxDiff1 - minDiff1)) mappedDiff2 = 50 - 50 * ((diff2 - minDiff2) / (maxDiff2 - minDiff2)) // Combine mapped differences into a single line mappedLine = if close > ema mappedDiff1 else mappedDiff2 // Plot 'mappedLine' in the main chart area conditionally plot(mappedLine, title="EMA Difference Mapping", color=(close > ema ? color.blue : na), style=plot.style_line, linewidth=2) // Calculate the 50EMA and 200SMA ema50 = ema(close, 50) sma200 = sma(close, 200) // Plot the 50EMA and 200SMA on the main chart plot(ema50, color=color.blue, title="50 SMA", linewidth=2) plot(sma200, color=color.red, title="200 SMA", linewidth=2) // Initialize trade variables var bool waitingForBuy = na var bool waitingForSell = na var bool buyConditionMet = false var bool sellConditionMet = false if not sellConditionMet and crossunder(ema50, sma200) sellConditionMet := true waitingForBuy := false if sellConditionMet waitingForSell := true sellConditionMet := false if waitingForSell and close < sma200 and mappedLine > 75 strategy.entry("Sell", strategy.short) strategy.exit("Sell Exit", "Sell", profit=takeProfitPoints, loss=stopLossPoints) waitingForSell := false // Define the strategy conditions and execute trades if not buyConditionMet and crossover(ema50, sma200) buyConditionMet := true waitingForSell := false if buyConditionMet waitingForBuy := true buyConditionMet := false if waitingForBuy and close > sma200 and mappedLine < 25 strategy.entry("Buy", strategy.long) strategy.exit("Buy Exit", "Buy", profit=takeProfitPoints, loss=stopLossPoints) waitingForBuy := false