ブレイクアウト最高価格EMAクロスオーバー戦略


作成日: 2024-03-29 14:39:27 最終変更日: 2024-03-29 14:39:27
コピー: 2 クリック数: 527
1
フォロー
1617
フォロワー

ブレイクアウト最高価格EMAクロスオーバー戦略

概要

価格突破のEMA交差戦略は,価格突破とインデックス移動平均の (EMA) 交差に基づいた取引戦略である.この戦略は,指定された周期内の最高価格を買取信号として使用し,EMAを販売信号として使用する.閉盘価格が指定された周期内の最高価格を突破すると,戦略は買取信号を生成し,閉盘価格がEMAを下回ると,戦略は販売信号を生成する.この戦略は,リスクを制御するためにストップ・ロスの価格を設定する.さらに,この戦略は,異なる取引スタイルと市場環境に対応するためにユーザーにカスタマイズされた複数のパラメータを提供します.

戦略原則

最高値のEMA交差を突破する戦略の核心原則は,価格の突破とEMA交差を利用して市場トレンドを捉えることです.価格が指定された周期内の最高値を破るときは,市場が上昇傾向に入ることを示すため,戦略は買取シグナルを生成します.同時に,EMAは,価格がEMAを下回るときは,上昇傾向が終了する可能性を示し,戦略は販売シグナルを生成します.

この戦略は,以下のステップを使って取引を可能にします.

  1. 指定周期内の最高価格を突破購入価格として計算する.
  2. EMAは売り込みのシグナルとして計算されます.
  3. 閉盤価格が買入価格を突破すると,当時は持っていない場合,戦略は買入シグナルを生成する.
  4. EMAの閉店価格を下回ったとき,現在の持有権がある場合は,戦略は売り込みシグナルを生成する.
  5. 指定期間の最低価格をストップ・ストップ価格として計算する.
  6. ストップ・ロスの価格を下回ると,戦略は即座に平仓する.

上記のステップにより,この戦略は,上向きの市場トレンドで利益を得ることができ,同時に,下向きのリスクをコントロールするために,ストップ・ロスを使用します.

戦略的優位性

EMAの交差点を突破する戦略は以下の利点があります.

  1. トレンド追跡:この戦略は,価格突破とEMAの交差を活用して市場トレンドを捉え,上昇傾向から利益を得ることができます.
  2. リスクコントロール:この戦略は,ストップ・ロスの価格を使用して下落のリスクをコントロールし,戦略の最大撤退を効果的に減らすことができます.
  3. パラメータの柔軟性:この戦略は,周期,リスク比率,停止値の使用かどうかなど,さまざまな取引スタイルと市場環境に応じて調整できる複数のパラメータをユーザーにカスタマイズすることができます.
  4. シンプルで効果的: 戦略の論理はシンプルで明快で,理解しやすく,実行しやすく,トレンドマーケットで良い利益を得ることができます.

戦略リスク

EMAの交差点を突破する戦略にはいくつかの利点がありますが,以下のリスクもあります.

  1. 市場の変動リスク:市場の変動が大きい場合,この戦略は偽のシグナルを多く生み出し,頻繁に取引し,資金の損失を引き起こす可能性があります.
  2. トレンド転換リスク:市場のトレンドが逆転したときに,この戦略は売却を延期し,利益の反転や損失の損失に転じることがある.
  3. パラメータ設定リスク:この戦略のパフォーマンスは,周期,リスク比率などパラメータの設定に依存する.パラメータを正しく設定しなければ,戦略の不良パフォーマンスを引き起こす可能性があります.

これらのリスクを軽減するために,以下の措置を考慮すべきです.

  1. 適切な調整パラメータ:異なる市場環境と取引品種に応じて,偽信号と頻繁な取引を減らすために,周期を増大し,リスク比率を下げるなど,戦略パラメータを適切に調整する.
  2. 他の指標と組み合わせる: RSI,MACDなどの他の技術指標と組み合わせて,トレンドとシグナルの有効性を確認し,戦略の信頼性を高めることができます.
  3. 合理的なストップを設定する:下落のリスクを制御する合理的なストップ価格を設定し,利益の機会を逃すことなく早めにストップしない.

戦略最適化の方向性

最高価格のEMA交差戦略の性能をさらに向上させるために,以下の最適化方向を考慮することができます.

  1. 動的調整パラメータ:市場の波動性とトレンドの強さに応じて,動的に戦略パラメータを調整する.例えば,波動が大きいときに周期を拡大し,トレンドが強いときにリスク比率を上げることなど,異なる市場環境に適応する.
  2. 多空の仕組みを導入する:原始的な多頭取引の基礎に,空頭取引の仕組みを導入することで,下降傾向でも利益を得ることができ,戦略の適応性と収益性を向上させる.
  3. ストップとストップを最適化: リスクと利益のロックをより良く管理するために,移動ストップ,部分ストップなどの方法を使用して,ストップとストップの設定を最適化します.
  4. 基本的分析と組み合わせる: 基本的分析と技術的分析を組み合わせる. 例えば,企業の財務報告や経済データの発表などの重要なイベントの前後に,戦略のポジションとパラメータを調整して,市場が変化する可能性に対応する.

上記の最適化により,突破性最高価格EMAの交差策の安定性,適応性,収益性を向上させ,より多くの市場環境で良好なパフォーマンスを得ることができる.

要約する

最高価格のEMA交差を突破する戦略は,価格の突破とEMA交差を利用して市場のトレンドを捉え,ストップを用いることで下行リスクを制御するシンプルで効果的なトレンド追跡戦略である.この戦略の論理は明確で,パラメータは柔軟で,理解し,実行することが容易である.この戦略には,市場波動のリスク,トレンド転換のリスク,パラメータ設定のリスクなどの一定のリスクがあるにもかかわらず,適切なリスク管理手段によってこれらのリスクを軽減することができます.例えば,パラメータを調整し,他の指標と合理的なストップを設定するなど.

ストラテジーソースコード
/*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"}]
*/

// @version = 5
strategy(title="BreakHigh Strategy", overlay=true)
Period = input.int(34, "Number of previous bars(34,52 Recommend)")
showbg = input(defval = false,title = "Show BackGround Color")
showema = input(defval = true ,title = "Show Line")
MarkBuySig = input(defval = true ,title = "Show Buy/Sell Signal")

Risk_Per_Trade = input(2.5, '% of Risk Per Trade') / 100  // Risk% Per Trade Switch
SLDAY = input(title='Lowest price of the previous number of bars', defval=9)
Buysig = input(defval=true, title='Start Strategy')
UseSl = input(defval=false, title='Use Stoploss Price')
Compound = input(defval = false ,title =  "Compound Profit")
xtf = input.timeframe(title='** Fix chart to which time frame ? **)', defval='D')


//BUY
float buyLine = na
buyLine := ta.highest(high,Period)[1] 
plot(showema ? buyLine : na, linewidth=1, style=plot.style_linebr, color=color.new(color.green, 0))

//SELL
output = ta.ema(close, Period)
show = request.security(syminfo.tickerid, xtf, output)
FastL = plot(showema ? show : na, color=color.new(color.white, 0), linewidth=2, title='Slow EMA')

//Buy-Sell Signal
Green = close > buyLine   // Buy
Red = close < show // Sell

buycond = Green and Green[1] == 0
sellcond = Red and Red[1] == 0

bullish = ta.barssince(buycond) < ta.barssince(sellcond)
bearish = ta.barssince(sellcond) < ta.barssince(buycond)

buy = bearish[1] and buycond
sell = bullish[1] and sellcond

plotshape(MarkBuySig ? buy : na, style=shape.labelup, text='Buy Next Bar', textcolor=color.new(color.black, 0), location=location.belowbar, color=color.new(color.green, 0))
plotshape(MarkBuySig ? sell : na, style=shape.labeldown, text='Sell Next Bar', textcolor=color.new(color.black, 0), location=location.abovebar, color=color.new(color.red, 0))
bgcolor(showbg ? bullish ? color.new(color.green,90) : color.new(color.red,90) : na )


// === BACKTEST RANGE === //
use_date_range = input(true)
FromYear = input.int(defval=2012, title='From Year', minval=1950)
FromMonth = input.int(defval=1, title='From Month', minval=1)
FromDay = input.int(defval=1, title='From Day', minval=1)
ToYear = input.int(defval=9999, title='To Year', minval=1950)
ToMonth = input.int(defval=1, title='To Month', minval=1)
ToDay = input.int(defval=1, title='To Day', minval=1)
in_date_range = use_date_range ? time > timestamp(FromYear, FromMonth, FromDay, 00, 00) and time < timestamp(ToYear, ToMonth, ToDay, 23, 59) : true

//****************************************************************************//

//////////////////////////////////////////////
//    define strategy entry / exit          //
//////////////////////////////////////////////

//****************************************************************************//
// LONG CONDITIONS

Select_Long_Condition_1 = close > buyLine // Buy when Have Signal
Open_Long_Condition = Select_Long_Condition_1 and strategy.opentrades == 0

//****************************************************************************//
// STOP LOSS Price

float longSL = na
longSL := Open_Long_Condition ? ta.lowest(low, SLDAY)[1] : longSL[1]  


//****************************************************************************//
// Cal StopLoss

Long_Entry_Price = close
Diff_OPEN_to_SL = math.abs(Long_Entry_Price - longSL)

// Exit CONDITIONS

Exit_Long_Condition = close < show // Sell when Have Signal

//****************************************************************************//
// POSITION SIZE CAP

strategy.initial_capital = 50000

float portSize = Compound ? strategy.netprofit + strategy.initial_capital : strategy.initial_capital
float LossAmoutUnit = portSize * Risk_Per_Trade //50
float PercentSL = ( Diff_OPEN_to_SL / Long_Entry_Price ) * 100
float PositionSize = LossAmoutUnit / Diff_OPEN_to_SL


//****************************************************************************//
// ENTRY/EXIT

if Buysig
    if Open_Long_Condition and in_date_range 
        strategy.entry('LONG', strategy.long, qty=PositionSize)


if Exit_Long_Condition and in_date_range
    strategy.close('LONG')
if close < longSL and UseSl
    strategy.close('LONG')

//****************************************************************************//
// PLOT STOP LOSS

longPlotSL = strategy.opentrades > 0 and strategy.position_size > 0 ? longSL : na
// label.new(bar_index, high, text=str.tostring(longPlotSL),color=color.white, textcolor=color.black)
plot(longPlotSL, title="", linewidth=2, style=plot.style_linebr, color=color.new(color.red, 0))



//****************************************************************************//