この戦略は,移動平均線のターニングポイントに基づいて,MA上向きターニングポイントでロングで,MA下向きターニングポイントでショートでトレンドを判断します.これは典型的なトレンドフォロー戦略です.
ストラテジーは,ストラテジーの分析のための価格として閉じる価格を得るために価格=セキュリティ (tickerid, period, close) を使用し,最初の平均線価格を得るためにma1長さの入力選択に基づいて SMAまたはEMAを計算します. roc1は,価格の1日間の変化率として定義されます.
このように,戦略は,動向平均線のターニングポイントを利用して,株価の傾向変化を把握します.これは典型的なトレンドフォロー戦略に属します.
この戦略の最大の利点は,トレンドを判断するために移動平均線のターニングポイントを利用することである.これは定量取引における比較的成熟した信頼性の高い技術分析方法である.具体的な利点は以下のとおりである.
移動平均値は,価格を平滑させ,傾向の逆転をより信頼的に識別するために一部のノイズをフィルターすることができます.
逆転の強度を決定するために変化率指標を組み合わせて偽のブレイクアウトを回避する.この戦略は,ターニングポイントを検出するだけでなく,変化率グラデントの
簡単なバックテスト最適化のためのシンプルなパラメータ設定.この戦略には,移動平均値とユーザーに理解しマスターすることが簡単なパラメータがいくつかあります.
この戦略の主なリスクは,
トレンドフォロワーストラテジーは,上下を予測できない.この戦略は,トレンドフォロワーストラテジーは,トレンドのみをフォローすることができ,市場の上下を予測することができず,即時の逆転の機会を簡単に逃す.
移動平均の遅延問題 移動平均は価格変動を反映する一定の遅延があり,傾向逆転を特定するタイミングに影響を与える可能性があります.
前もって不適切なパラメータ最適化は結果に直接影響します.この戦略のパラメータ設定は,平均線の期間数や変化率グラデントの
対応する解は次のとおりです.
他の指標を適切に組み合わせて 大きく上昇する波及を予測します
テスト EMA と SMA の代わりに他の速い移動平均値.
最適なパラメータ設定を見つけるために複数最適化することが推奨されます.
この戦略は,次の方向でさらに最適化できます.
2番目の移動平均線を追加して金十字と死十字戦略を形成します.これはトレンドとフィルターノイズを決定するために二重移動平均間の関係を利用します.
移動平均のターニングポイントでのボリュームの変化を観察することで,ターニングポイントの信頼性をさらに確認できます.
RSI や MACD などの他の技術指標の支援作用をテストする.これらの指標は,トレンドを決定し,移動平均のターニングポイントを組み合わせる戦略を形成するのに役立ちます.
複数の市場条件パラメータの最適化とスクリーニング. ブール市場,ベア市場,レンジバインド市場条件の下の組み合わせのためのパラメータ設定を別々にテストし最適化します.
機械学習方法を用いて,異なる市場環境におけるパラメータを動的に最適化し,動的な最適化のためにパラメータの安定性を評価します.
概要すると,これは比較的成熟したトレンドフォロー戦略であり,いくつかの実用的な価値があります. 戦略のアイデアは単純で明確で,調整可能なパラメータがほとんどなく,理解しテストするのが簡単です. 同時に,トレンドフォローレイグなどの問題もあります. 他の指標と組み合わせ,状況に合わせてテストし最適化するか,戦略の安定性と実用的な効果をさらに高めるために動的パラメータ調整のメカニズムを導入することをお勧めします.
/*backtest start: 2023-01-10 00:00:00 end: 2024-01-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("MA Turning Point Strategy", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(25, title="1st MA Length") type1 = input("SMA", "1st MA Type", options=["SMA", "EMA"]) price1 = if (type1 == "SMA") sma(price, ma1) else ema(price, ma1) plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0) lookback1 = input(1, "Lookback 1") roc1 = roc(price1, lookback1) ma1up = false ma1down = false ma2up = false ma2down = false ma1up := nz(ma1up[1]) ma1down := nz(ma1down[1]) ma2up := nz(ma2up[1]) ma2down := nz(ma2down[1]) trendStrength1 = input(2.5, title="Minimum slope magnitude * 100", type=float) * 0.01 if crossover(roc1, trendStrength1) ma1up := true ma1down := false if crossunder(roc1, -trendStrength1) ma1up := false ma1down := true longCondition = ma1up and ma1down[1] if (longCondition) strategy.entry("Long", strategy.long) shortCondition = ma1down and ma1up[1] if (shortCondition) strategy.entry("Short", strategy.short)