指数関数移動平均のクロスオーバー戦略

作者: リン・ハーンチャオチャン開催日:2023年10月17日 16:55:10
タグ:

img

概要

これは,2つの指数関数移動平均値 (EMA) のクロスオーバーをベースに長または短を走る自動取引戦略です. シンプルな技術指標を使用し,初心者が学び練習するのに非常に適しています.

原則

この戦略は2つのEMAを使用します.一つはより大きな時間枠上のEMAであり,もう一つは現在の時間枠上のEMAです.現在のEMAがより大きなEMAを超えると,それは長くなります.現在のEMAがより大きなEMAを下回ると,それは短くなります.

具体的には,戦略はまず2つのEMAパラメータを定義します.

  1. tf - より大きな時間枠,デフォルト毎日.
  2. len - EMA期間の長さ,デフォルト 3.

次に2つの EMA を計算します

  1. ma1 - 日間時間枠における3日間のEMA
  2. ma2 - 現在の時間枠における 3 日間 EMA

最後に,以下をベースに取引を行います.

  • 時間が長くなっています.
  • ma2 < ma1 のとき,それは短くなる.

2つの異なる期間の EMAのクロスオーバーを通してトレンド方向を判断することで,取引を自動化します.

利点

この戦略には以下の利点があります.

  1. シンプルな原則で 分かりやすく 実行しやすい 初心者にも適しています
  2. トレンドに従うと 立派な利益を得ることができます
  3. 価格変化に敏感な EMA を使用することで,傾向の逆転を適時に把握できます.
  4. 異なる期間の EMA を組み合わせることで,それぞれの強みを活用し,システムの安定性を向上させることができます.
  5. テストや最適化が簡単で リアルタイム取引に便利です

リスク

この戦略にはいくつかのリスクもあります:

  1. 弱気傾向が続く能力は 市場変動に 影響する可能性があります
  2. 双 EMA クロスオーバーで遅れると チャンスを逃すかもしれない
  3. 2つの EMA の間の乱交を効果的にフィルターすることはできません.
  4. 単純な EMA にのみ依存し,複雑な市場に適応するのが難しい.

ストップ・ロスを設定し,パラメータを最適化し,他の指標を追加することでリスクを軽減できます.

最適化

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

  1. 最適な組み合わせを見つけるために 異なる大きな期間の EMA パラメータをテストします
  2. 偽信号を避けるために音量フィルターを追加します.
  3. ポジションのサイズと効率性を高めるために傾向指標を組み込む.
  4. 単一の取引損失を制御するために適応ストップ損失を設定します.
  5. 市場の状況に応じてポジションのサイズを最適化する.
  6. マシン学習モデルを追加して 戦略をより賢くします

結論

EMAのクロスオーバー戦略は,学習と実践のための初心者にとって適した単純な指標でトレンドを捉え,より効果的な定量的な取引戦略を開発するために,より多くの技術指標とモデルを導入することによって最適化するための大きな余地があります.


/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Noro's Singapore Strategy", shorttitle = "Singapore str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
tf = input("D", title = "Big Timeframe")
len = input(3, minval = 1, title = "MA length")
src = input(close, title = "MA Source")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MAs
ma1 = request.security(syminfo.tickerid, tf, sma(src, len))
ma2 = sma(src, len)
plot(ma1, linewidth = 2, color = blue, title = "Big TF MA")
plot(ma2, linewidth = 2, color = red, title = "MA")

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]

if ma2 > ma1
    strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if ma2 < ma1
    strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

もっと