
双指数移動平均交差戦略最適化器は,2つの異なる周期指数移動平均交差信号に基づいて取引する量化戦略である.この戦略は,急速なEMAと遅いEMAの交差関係を利用して市場の傾向の方向を判断し,特定の条件を満たしたときに多空双方向取引を実行する.戦略の核心は,パラメータ化されたEMA設定によって,ユーザーは,異なる市場環境に応じて戦略のパラメータを柔軟に調整することができ,同時にストップフック機能と連携して収益を最大化することができる.
この戦略の核心原理は,技術分析の古典的な均等線交理論に基づいている.主に以下のいくつかの重要な構成要素を含む.
二重EMA交差信号:戦略は,2つの異なる周期の指数移動平均 ((EMA) を使用し,それぞれ,デフォルトパラメータ6の高速EMAと,デフォルトパラメータ16の遅いEMAである.高速EMAが下から遅いEMAを横切ると,多値信号が生成され,高速EMAが上から遅いEMAを横切ると,空値信号が生成される.
方向フィルター: 策略は,ユーザが入力パラメータで取引方向を選択することを許可し,戦略の柔軟性を高めます.longOKそしてshortOK変数制御は,対応する方向の取引を実行するか否かを制御する.
K線形確認:策略は,多信号が発生した場合,現在のK線閉じる価格が開盘価格 ((陽線) よりも高くなければならないことを要求する追加の価格確認機構を導入した.空白信号が発生した場合,現在のK線閉じる価格が開盤価格 ((陰線) よりも低い必要がある.この設計は,一部の偽信号を効果的にフィルターした.
ストップメカニズム:戦略は,多頭と空頭のストップパーセントをそれぞれ設定し (既定はそれぞれ4%),価格が既定の収益目標に達したときに自動的にポジションを平らげ,利益をロックする.
交差逆平仓:多頭ポジションを保有するときに空頭シグナルが発生した場合,または空頭ポジションを保有するときに多頭シグナルが発生した場合,戦略は平仓操作を誘発し,損失拡大を効果的に制御する.
この戦略のコードを詳しく分析すると,以下の利点が明らかになる.
パラメータの柔軟性: 戦略は,ユーザが高速および遅いEMAの周期,取引方向,およびストップパーセンテージをカスタマイズできるようにし,戦略は異なる市場環境と個人のリスクの好みに適応できる.
双重確認機構:戦略はEMA交差信号のみに依存するのではなく,K線形状 ((陽線/陰線) を追加確認として組み合わせ,信号の信頼性を高め,偽突破による損失を減らす.
全方位取引:多空双方向取引をサポートし,単一方向の市場状況に限らず,異なる市場動向の機会を捉えることができます.
ストップ・ストップ・最適化: ストップ・ストップ比率を設定することで,戦略は,価格が予想目標に達したときに自動的に利益をロックすることができ,市場の逆転により既得利益の引き返しを避ける.
逆シグナル平仓:市場の傾向が逆転する可能性があるとき (逆交差信号が発生する) 戦略は,リスクを効果的にコントロールするために,タイミングで平仓する.
計算効率: 策略が内蔵されているta.ema、ta.crossoverそしてta.crossunder函数計算信号,計算効率が高く,リアルタイムで実行しやすい.
ビジュアルサポート: 戦略は,高速と遅いEMAラインと停止レベルをグラフに描画し,ユーザが戦略の実行を直観的に理解できるようにする.
この戦略は合理的に設計されているものの,いくつかの潜在的なリスクがあります.
平均線遅れ:EMAは本質的に遅れの指標であり,急速に変化する市場では遅延信号が生じ,入場と出場のタイミングが良くない.
振動市場のリスク:区間振動の状況で,EMAの交差信号は頻繁に発生するが,持続性が欠如し,頻繁に取引と連続的な損失を引き起こす可能性があります.
ストップ・メカニズムの欠如:現在の戦略は,ストップ・メカニズムのみを設定し,明確なストップ・メカニズムはなく,極端な市場条件では大きな損失に直面する可能性があります.
K線確認制限:K線形状確認を要求すると,特に急速なトレンド転換時に,有効な信号のいくつかを逃す可能性があります.
固定ストップ比率のリスク: 設定された固定ストップ比率は,すべての市場環境に適さない可能性があり,強いトレンドの市場では,過早に利益を上げ,より大きな利益を逃す可能性があります.
波動性適応メカニズムの欠如: 戦略は市場の波動的な動向に応じてパラメータを調整する機能がないため,高波動性または低波動性環境ではうまく機能しない可能性があります.
上記のリスクに対して,以下の方向で戦略を最適化できます.
適応パラメータの導入:ATR ((実際の波動幅度) または歴史的な波動率に基づいてEMAパラメータを動的に調整することができ,戦略が異なる市場波動環境により良く適応できるようにする.これは,固定パラメータが異なる波動率市場でのパフォーマンスの違いが大きいからである.
損失の増減:ATRまたは固定パーセントに基づく損失の増減を導入し,価格が非常に不利なときに自動的に平仓し,単一取引の損失を効果的に制御することを推奨する.
トレンドフィルターを追加:より長い周期のトレンド判断指標 (例えば50日EMA) を追加し,主トレンドの方向のみで取引を行い,波動的な市場で頻繁に取引を避ける.
入場時間を最適化:RSI,MACDなどの他の技術指標と組み合わせて,信号の質を向上させることができます.
ダイナミックストップ:市場の波動性に基づくダイナミックストップを実現するか,移動ストップ (トラッキングストップ) の仕組みを採用し,利益を保護しながら利益の増大を許す.
取引量フィルタを追加:信号生成時に取引量要因を考慮し,取引量がサポートされている場合にのみ取引を実行し,信号の信頼性を向上させる.
タイムフィルター: 取引時間ウィンドウの設定を追加し,市場の波動が低いまたは不規則な時期に取引を避ける.
資金管理の最適化:信号の強さ,市場の波動性,および歴史上の勝率に応じて取引毎の資金比率を調整するダイナミックなポジション管理機構の導入.
双指数移動平均交差戦略最適化器は,合理的に設計された量化取引システムであり,高速と遅いEMAの交差関係によって,K線形状確認と停止機構を組み合わせて,多空双方向取引機能を実現している.戦略の優点は,パラメータの柔軟性,二重確認機構と全方位取引能力にあるが,均線遅れ,波動市場のリスク,および止損機構の欠如などの問題もある.
適応パラメータの導入,止損メカニズムの増強,トレンドフィルターの追加,資金管理の最適化などの方向での改善により,戦略の安定性と収益能力を大幅に向上させることができます.特に,ダイナミックパラメータの調整とリスク管理メカニズムとの組み合わせにより,戦略は,異なる市場環境で比較的安定したパフォーマンスを維持できます.
交易者にとって,この戦略を実際に適用する際には,市場のマクロ分析と組み合わせて,トレンドが明確な市場環境を選択し,十分な歴史回帰とパラメータ最適化を行い,特定の取引品種に適した最適なパラメータパックを見つけることをお勧めします. さらに,戦略のパフォーマンスを継続的に監視し,市場の変化に応じてパラメータを適時に調整することは,戦略の長期的な有効性を維持する鍵でもあります.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-31 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// This strategy has been created for illustration purposes only and should not be relied upon as a basis for buying, selling, or holding any asset or security.
// © kirilov
//@version=6
strategy(
"gosho bot Strategy",
overlay=true,
calc_on_every_tick=true,
currency=currency.USD
)
// INPUT:
// Options to enter fast and slow Exponential Moving Average (EMA) values
emaFast = input.int(title="Fast EMA", defval=6, minval=1, maxval=9999)
emaSlow = input.int(title="Slow EMA", defval=16, minval=1, maxval=9999)
// Option to select trade directions
tradeDirection = input.string(title="Trade Direction", defval="Both", options=["Long", "Short", "Both"])
// CALCULATIONS:
// Use the built-in function to calculate two EMA lines
fastEMA = ta.ema(close, emaFast)
slowEMA = ta.ema(close, emaSlow)
// PLOT:
// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.orange, linewidth=2)
plot(series=slowEMA, color=color.blue, linewidth=2)
percentageDiff = (fastEMA - slowEMA) / slowEMA * 100
// Translate input into trading conditions
longOK = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
// Decide if we should go long or short using the built-in functions
longCondition = ta.crossover(fastEMA, slowEMA)
shortCondition = ta.crossunder(fastEMA, slowEMA)
profit_long = input.float(4, "Profit_long %", minval=0.0, step=0.1) * 0.01
profit_short = input.float(4, "Profit_short %", minval=0.0, step=0.1) * 0.01
short_stop_profit = strategy.position_avg_price * (1 - profit_short)
long_stop_profit = strategy.position_avg_price * (1 + profit_long)
// ORDERS:
// Submit entry (or reverse) orders
if (longCondition and close > open )
strategy.entry(" Long ", strategy.long)
if (shortCondition and close < open )
strategy.entry(" Short ", strategy.short)
// Submit exit orders in the cases where we trade only long or only short
if (strategy.position_size > 0 and shortCondition )
strategy.exit(id="exit long", stop=close)
if (strategy.position_size < 0 and longCondition )
strategy.exit(id="exit short", stop=close)
plot(short_stop_profit)