指数移動平均クロスオーバー定量取引戦略


作成日: 2024-03-29 10:59:57 最終変更日: 2024-03-29 10:59:57
コピー: 1 クリック数: 517
1
フォロー
1617
フォロワー

指数移動平均クロスオーバー定量取引戦略

概要

この戦略は,2つの指数移動平均線 ((EMA) の交差を買入シグナルとして使用する.短い周期EMAがより長い周期EMAを下から上へと渡るときは,買入シグナルを生じ;逆に,短い周期EMAがより長い周期EMAを上から下へと渡るときは,売り出せシグナルを生じする.同時に,この戦略は交差点が最近10の取引周期内の最高価格か最低価格であるかどうかを判断し,それによってトレンドの強さを確認する.交差点が最高であれば,価格は背景で緑に表示され,最低であれば,赤に表示される.さらに,この戦略は,交差点の価格をグラフに表示する.

戦略原則

  1. 2つの異なる周期のEMAを計算し,デフォルト周期は5と10である.
  2. 2つのEMAが交差しているかどうかを判断する.もし短期EMAが下から上へと長期EMAを横切ると,買いの信号が生じ,もし短期EMAが上から下へと長期EMAを横切ると,売りの信号が生じます.
  3. 交差信号を生成する際,現在の交差点が,最近10回の取引サイクルの中で最高価格か最低価格であるかどうかを判断する.最高価格であれば,上昇傾向が強いと考えられる.最低価格であれば,下降傾向が強いと考えられる.
  4. 買い信号が生じ,現在持仓がない場合は,多項を開きます. 売り信号が生じ,現在持仓がない場合は,空項を開きます.
  5. 複数の単項を保有し,短期EMAが上から下へと長期EMAを横切った場合,多項平衡;空券を保有し,短期EMAが下から上へと長期EMAを横切った場合,空券平衡.

戦略的優位性

  1. 指数移動平均は,単純移動平均よりも価格の変化により迅速に反応し,より適切な取引シグナルを生成することができる.
  2. 交差点が近年の最高値か最低値かを判断することで,トレンドの強度がより高い取引機会を出し,戦略的利益を増やすことができます.
  3. 交差点の価格をグラフに表示し,トレーダーにより直感的な取引参考を提供します.
  4. このコードの論理は明確で,理解し,実装しやすい.

戦略リスク

  1. EMAの交差から発生する信号は,遅延があり,最適な取引時間を逃す可能性があります.
  2. 変動する市場では,EMAの交差が頻繁に起こり,取引回数が過剰になり,取引コストが増加する.
  3. 戦略には止損策が欠けていて,誤った判断で撤回のリスクが高くなる可能性がある.

戦略最適化の方向性

  1. RSI,MACDなどの技術指標を導入し,トレンドの強さや方向を判断し,信号の正確性を向上させる.
  2. 合理的なストップとストップポイントを設定し,単一取引のリスクを制御する.
  3. 戦略の適応性を高めるために,EMA周期,交叉確認時間ウィンドウなどの取引パラメータを最適化します.
  4. VIXなどの市場情緒指標と組み合わせて,取引信号をフィルタリングし,誤った信号を減らす.
  5. ポジション管理と資金管理モジュールを追加し,取引毎の資金量を動的に調整し,資金利用の効率性を向上させる.

要約する

この戦略は,指数移動平均線交差を中心の論理として,交差点価格の近期相対位置と組み合わせてトレンドの強さを判断する.全体的に見ると,戦略の論理は明確で,優位性は明らかですが,一定の制限とリスクもあります.より多くの補助判断指標を導入し,合理的なリスク管理措置を設定し,重要なパラメータを最適化することで,この戦略の安定性と収益性をさらに向上させることができます.

ストラテジーソースコード
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ZenAndTheArtOfTrading
// @version=5
strategy("ema giao nhau", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Get user input
emaLength1 = input.int(title="EMA #1 Length", defval=5)
emaLength2 = input.int(title="EMA #2 Length", defval=10)

// Get MAs
ema1 = ta.ema(close, emaLength1)
ema2 = ta.ema(close, emaLength2)

// Draw MAs
plot(ema1, color=color.blue, title="EMA 1")
plot(ema2, color=color.red, title="EMA 2")

// Detect crossovers
bool crossOver = ta.crossover(ema1, ema2)
bool crossUnder = ta.crossunder(ema1, ema2)
bool cross = crossOver or crossUnder
//float crossPrice = ta.valuewhen(cross, close, 0)
float crossPrice = cross ? close : na

// Check if the crossover price is the highest price over the past 10 bars
bool highestPrice = crossOver
for i = 1 to 10
    if crossPrice <= close[i]
        highestPrice := false
        break

// Check if the crossover price is the lowest price over the past 10 bars
bool lowestPrice = crossUnder
for i = 1 to 10
    if crossPrice >= close[i]
        lowestPrice := false
        break

// Flag the bar if it is a high/low close
bgcolor(highestPrice ? color.new(color.green, 50) : na)
bgcolor(lowestPrice ? color.new(color.red, 50) : na)

// Display crossover price
if cross
    highestEmaPrice = ema1 > ema2 ? ema1 : ema2
    label myLabel = label.new(bar_index, highestEmaPrice, "CrossPrice=" + str.tostring(crossPrice), color=color.white)
    if highestPrice and strategy.position_size == 0
        strategy.entry(id="Buy", direction=strategy.long)
    if lowestPrice and strategy.position_size == 0
        strategy.entry(id="Sell", direction=strategy.short)

// Exit trades when short-term EMA is breached
if strategy.position_size > 0 and crossUnder
    strategy.close("Buy")
if strategy.position_size < 0 and crossOver
    strategy.close("Sell")