
この戦略は,移動平均の転換点に基づいて市場トレンドを判断し,MA上方転換点に多額,MA下の下方転換点に空白する.これは典型的なトレンド型戦略である.
この策略は, price=security ((tickerid, period, close) を使って,策略分析の価格として閉店価格を取得し,インプットを選択してsma平均またはema平均を計算し,長さはma1で,最初の平均値price1が得られます. そして,roc1を価格1の1日間の変化率として定義し,値trendStrength1で平均が明らかな上昇または下降を判断します.roc1がトレンドStrength1を超えると,ma1uptrueを定義し,線が上昇することを意味します.
この戦略は,移動平均の転換点を利用して,株価のトレンドの変化を捉え,典型的なトレンド追跡型の戦略である.
この戦略の最大の利点は,移動平均の転換点を利用してトレンドを判断することにある.これは,量的な取引におけるより成熟し,信頼性の高い技術分析方法である.具体的利点は以下の通りである.
移動平均は,価格を平滑化して,部分的なノイズをフィルターし,トレンドの転換をより正確に認識できるようにします.
変動率指数と組み合わせて,転向の強さを判断し,偽の突破を避ける.この戦略は,転向点を検出するだけでなく,移動平均の偽の突破が不必要な取引をもたらすのを防ぐために,変動率放射の値を設定します.
シンプルなパラメータ設定,簡単に掌握し,反測最適化. この策略は,移動平均のみで,いくつかのパラメータ,設定,および最適化が比較的シンプルで,ユーザが容易に理解し,掌握できるようにする.
この戦略の主なリスクは,
トレンドフォロー戦略は,上下を予測できない.この戦略は,トレンドフォロー型の戦略であり,トレンドの後ろにしか続くことができず,市場の上下を予測できず,瞬間の反転の機会を逃すのが容易である.
移動平均の遅延の問題.移動平均は価格動向に反映される一定の遅延があり,トレンド転換を認識するタイミングに影響を与える可能性があります.
前期パラメータ最適化が適切でないことが直接効果に影響する.この戦略のパラメータ設定は,平均線期数,変化率の放射性値など,戦略の利回り撤回レベルに直接影響する.慎重にテストし,最適化する必要があります.
解決策は以下の通りです.
他の指標と適当に組み合わせて,大レベルの熊市のトップと牛市の底を予測できます.
テスト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)