2つの移動平均のクロスオーバー戦略

作者: リン・ハーンチャオチャン開催日:2023年9月21日 16時40分01秒
タグ:

概要

この戦略は,二重移動平均の黄金十字と死十字に基づいて設計されています. 短期移動平均が長期移動平均を上回るとロングになり,短期移動平均が長期移動平均を下回るとポジションを閉じる. 戦略はシンプルで理解しやすいので,初心者が学ぶのに適しています.

戦略の論理

戦略は主にSMA (近14%) とSMA (近28%) の指標に基づいています.

まず,短距離移動平均値と長距離移動平均値を定義します.

short_ma = sma(close, 14)  
long_ma = sma(close, 28)

黄金十字と死十字を基準に 入出を決める

longCondition = crossover(short_ma, long_ma)
shortCondition = crossunder(short_ma, long_ma) 

短いMAが長いMAを横切るときにロングする.

strategy.entry("Buy", strategy.long, when = longCondition)

短期MAPが長期MAPを下回る場合 閉じるポジション:

strategy.close_all(when = shortCondition) 

論理は単純で明確で,入口と出口を決定するために二重MAsのクロスオーバーを使用しています. 容量にいくつかの傾向があります.

利点分析

  • シンプルな論理,初心者にとって使いやすい
  • 傾向を決定するためにMAクロスオーバーを使用する
  • パラメータ最適化のための可変的なMA期間
  • ストップ・ロスは,単一の取引損失を制御することができます.

リスク分析

  • 市場変動に敏感で,多重に失敗する取引を生む可能性があります
  • 価格逆転点を見逃す可能性があります
  • MA 交差点近くに閉じ込められる可能性が高い
  • MA 期間を最適化する必要がある. 異なる期間が異なる結果をもたらす可能性があります.
  • トレンドが急激に変化すると,すぐに損失を削減できない

オプティマイゼーションの方向性

戦略は以下の側面で最適化できます.

  1. 最適な組み合わせを見つけるために MA 期間を最適化

適正な組み合わせを見つけるために, (5, 10), (10, 20), (20, 60) など,異なる短時間および長時間の MA 期間をテストする.

  1. 偽信号を避けるためにフィルターを追加する

取引量や価格格差などのフィルターをMAクロスオーバーの近くに追加し,さまざまな市場で過剰な取引を避ける.

  1. ストップ・ロスを含む

ストップ損失価格を設定するか,MAをストップ損失ラインとして使用して単一の取引損失を制御します.

  1. 他の指標と組み合わせる

MACD,KDJなどの補助指標を追加して戦略のパフォーマンスを向上させる.

  1. 入口ポイントを最適化

交差点に直接入力するのではなく,MAsの近くでより良いエントリーポイントを見つけます.例えば,MAのディバージェンスポイントで入力します.

概要

ダブルMA戦略は,初心者にとって使いやすい.しかし,市場変動に敏感で,損失のリスクがあります.パラメータを最適化し,フィルターを追加し,ストップロスを組み込み,他の指標を組み合わせて改善することができます. 強いトレンドではうまく機能できますが,レンジング市場で慎重にまたは適切なストップロスを使用する必要があります.
[/トランス]


/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy("Tester", pyramiding = 50, default_qty_type = strategy.cash, default_qty_value = 20, initial_capital = 2000, commission_type = strategy.commission.percent, commission_value = 0.25)

minGainPercent = input(0.6)
gainMultiplier = minGainPercent * 0.01 + 1


longCondition = crossover(sma(close, 14), sma(close, 28))
shortCondition = crossunder(sma(close, 14), sma(close, 28))


avg_protection = input(1)
gain_protection = input(1)


strategy.entry("Buy", strategy.long, when = longCondition    and (avg_protection >= 1 ? (na(strategy.position_avg_price) ? true : close <= strategy.position_avg_price) : true))
strategy.close_all(when = shortCondition  and (gain_protection >=1 ? (close >= gainMultiplier * strategy.position_avg_price) : true))

もっと