EMAベースのゴールデンクロス取引戦略


作成日: 2024-02-22 17:48:09 最終変更日: 2024-02-22 17:48:09
コピー: 1 クリック数: 729
1
フォロー
1617
フォロワー

EMAベースのゴールデンクロス取引戦略

概要

EMA黄金のクロス取引戦略は,異なる周期のEMA平均線を計算して,それらのクロス状況を判断して,買入と売却の信号を発出する.短周期EMA上を長周期EMAを通過すると,買入の信号を発出する.短周期EMA下を長周期EMAを通過すると,売却の信号を発出する.

戦略原則

この戦略の核心は,2つの異なる周期のEMA平均線を計算することであり,これには,より短い周期のEMA平均線,デフォルト周期は9と,より長い周期のEMA平均線,デフォルト周期は20が含まれている.コードは,pineスクリプトのema内置関数を呼び出すことによって,これらの2つの線をそれぞれ計算する.そして,2つのEMA線が交差しているかどうかを判断することによって,取引を生成する.信号.具体的には,高速線が下から遅い線を通過すると,買入信号が生成され,高速線が上から下から遅い線を通過すると,販売信号が生成される.

交差信号の判断は,pineスクリプトのcrossoverとcrossunderという2つの内置関数によって実現する。crossover関数は,快線が,下から慢線を貫通して,ブール値を返すかどうかを判断する。crossunder関数は,快線が,上から下から慢線を貫通して,ブール値を返すかどうかを判断する。この2つの関数の返値に基づいて,コードは,対応する買入または出売指示を提出する。

さらに,コードには,開始と終了の日付を設定し,余分な時間または空き時間のみを制限するなどの補助条件が提供されています.これは,より精密な反測または最適化に役立ちます.

優位分析

この戦略の最大の利点は,非常にシンプルで直接的で,容易に理解し,実装でき,初心者向けに適していることです.さらに,移動平均は,トレンド追跡指標として,市場トレンドを効果的に追跡し,トレンドを利用して追加の収益を生成することができます.最後に,この戦略のパラメータが少なく,簡単に調整することも,その利点の一つです.

リスク分析

この戦略は,主にノイズ取引とトレンドの逆転のリスクに直面している.EMAラインは,短期的な市場の変動の影響を受けやすく,誤ったシグナルを生じ,不必要な取引を引き起こし,取引の頻度とコストを増加させる可能性がある.また,交差シグナルが発信される時には,トレンドが逆転点に近づいている可能性があり,その時点で取引するリスクは大きい.さらに,パラメータの設定が不適切であることも戦略のパフォーマンスに影響を与える.

EMAサイクルを調整したり,その他のフィルター条件を追加したりなど,ノイズ取引を減らすことができる.一方,単一損失を制御するためにストップを設定することもできる.最適化パラメータは,戦略をより安定させることができる.もちろん,いかなる取引戦略も完全に損失を回避することはできません.一定のリスクを負う必要があります.

最適化の方向

この戦略は以下の方向から最適化できます.

  1. EMA周期パラメータを最適化して,最適なパラメータの組み合わせを探します.
  2. MACD,RSIなどの他の指標のフィルターを追加し,偽信号を減らす
  3. トレンド判断の指標を高め,トレンドの逆転を避ける
  4. 株式の基本的選択指数と組み合わせた
  5. ATRによるストップ・ロスの設定など,ポジション管理の調整

要約する

EMA黄金交差は,シンプルで効果的なトレンド追跡戦略である. EMA交差を利用して取引シグナルを生成し,価格の傾向を自動的に捉え,価格の傾向から利益を得ることができる. この戦略は,理解しやすく,調整しやすいため,初心者向けに非常に適しています.

ストラテジーソースコード
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 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/
// 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=4
strategy(
     "EMA Cross 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(title="Fast EMA", type=input.integer, defval=9, minval=1, maxval=9999)
emaSlow = input(title="Slow EMA", type=input.integer, defval=20, minval=1, maxval=9999)

// Option to select trade directions
tradeDirection = input(title="Trade Direction", options=["Long", "Short", "Both"], defval="Both")

// Options that configure the backtest date range
startDate = input(title="Start Date", type=input.time, defval=timestamp("01 Jan 1970 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2170 23:59"))


// CALCULATIONS:

// Use the built-in function to calculate two EMA lines
fastEMA = ema(close, emaFast)
slowEMA = ema(close, emaSlow)


// PLOT:

// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.black, linewidth=2)
plot(series=slowEMA, color=color.red, linewidth=2)


// CONDITIONS:

// Check if the close time of the current bar falls inside the date range
inDateRange = true

// 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 = crossover(fastEMA, slowEMA)
shortCondition = crossunder(fastEMA, slowEMA)


// ORDERS:

// Submit entry (or reverse) orders
if (longCondition and inDateRange)
    strategy.entry(id="long", long=true, when = longOK)
if (shortCondition and inDateRange)
    strategy.entry(id="short", long=false, when = shortOK)
    
// 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)