BreakHigh EMAクロスオーバー戦略

作者: リン・ハーンチャオチャン,日付: 2024-03-29 14時39分27秒
タグ:

img

概要

ブレイクハイEMAクロスオーバー戦略は,価格ブレイクアウトと指数関数移動平均 (EMA) クロスオーバーに基づいた取引戦略である.この戦略は,指定された期間中の最高価格をバイ・シグナルとして,EMAをセール・シグナルとして使用する.閉じる価格が指定された期間中の最高価格を超えると,戦略はバイ・シグナルを生成する.閉じる価格がEMAを下回ると,戦略はセール・シグナルを生成する.戦略はリスクを制御するためにストップ・ロスの価格も設定する.さらに,この戦略は,ユーザーが異なる取引スタイルと市場状況に適応するためにカスタマイズできる複数のパラメータを提供します.

戦略原則

BreakHigh EMAクロスオーバー戦略の基本原則は,価格ブレイクアウトとEMAクロスオーバーを使用して市場のトレンドを把握することです.価格が指定された期間中の最高価格を超えると,市場は上昇傾向に入ることができることを示します.したがって戦略は購入信号を生成します.同時に,EMAはトレンドフォローする指標として機能します.価格がEMAを下回ると,上昇傾向が終了する可能性を示します.したがって戦略は販売信号を生成します.

戦略は,取引を実施するために以下のステップを使用します.

  1. 指定された期間中の最も高い価格を,ブレイクアウト購入価格として計算する.
  2. EMAを売り信号として計算する.
  3. 閉じる価格がブレイク購入価格を超えると,現在のポジションがない場合,戦略は購入信号を生成します.
  4. 閉じる価格が EMAを下回ると,現在のポジションがある場合,戦略は売り信号を生成します.
  5. ストップ・ロスの価格として,指定された期間中の最低価格を計算します.
  6. ストップ・ロスの値を下回る場合は,ストラテジーは即座にポジションを閉じる.

上記のステップを通じて,ストップロスを使ってダウンサイドリスクを制御しながら,市場の上昇傾向から利益を得ることができます.

戦略 の 利点

BreakHigh EMAクロスオーバー戦略には以下の利点があります.

  1. トレンドトラッキング: 戦略は価格ブレイクとEMAクロスオーバーを使用して市場のトレンドを把握し,上向きのトレンドから利益を得ることができます.
  2. リスク管理: 戦略はダウンサイドリスクを制御するためにストップ・ロスの価格を使用し,戦略の最大引き上げを効果的に減らすことができます.
  3. パラメータの柔軟性: 戦略は,異なる取引スタイルや市場状況に応じて調整できる期間,リスク比,ストップロスの使用かどうかなど,ユーザがカスタマイズできる複数のパラメータを提供します.
  4. シンプルで効果的な: 戦略の論理はシンプルで明確で,理解し実行しやすく,トレンド市場では良い収益を達成することができます.

戦略リスク

BreakHigh EMAのクロスオーバー戦略には,いくつかの利点があるが,次のリスクも伴う.

  1. 市場変動リスク: 市場の変動が高い場合,戦略はより多くの誤った信号を生成し,頻繁に取引と資本損失を引き起こす可能性があります.
  2. トレンド逆転リスク: 市場のトレンドが逆転すると,戦略は売却を遅らせ,利益の追いつきまたは利益を損失に変える可能性があります.
  3. リスク設定パラメータ: 戦略の業績は,期間,リスク比などパラメータの設定に依存します.パラメータが正しく設定されていない場合,戦略の業績が低下する可能性があります.

これらのリスクを軽減するために,次の措置を検討できます.

  1. パラメータを適切に調整する: 異なる市場状況や取引手段に応じて,誤った信号や頻繁な取引を減らすために,期間を延長し,リスク比率を減らすなどの戦略パラメータを適切に調整する.
  2. 他の指標と組み合わせる:RSI,MACDなどの他の技術指標と組み合わせることで,トレンドとシグナルの妥当性を確認し,戦略の信頼性を向上させる.
  3. 合理的なストップ・ロスを設定します.合理的なストップ・ロスの価格を設定します.これはダウンサイドリスクを制御し,損失を早すぎるほど止めないため,利益の機会を逃す可能性があります.

戦略の最適化方向

BreakHigh EMAのクロスオーバー戦略のパフォーマンスをさらに向上させるために,次の最適化方向は検討できる.

  1. 動的パラメータ調整: 市場変動とトレンド強度に応じて,動的戦略パラメータを調整します.例えば,変動が高い時期を増加させ,トレンドが強いときにリスク比率を増加させ,さまざまな市場状況に適応します.
  2. ロング・ショート・メカニズムを導入する: オリジナルのロング・トレードに基づいて,ダウントレンドからも利益を得るためにショート・トレード・メカニズムを導入し,戦略の適応性と収益性を向上させる.
  3. ストップ・ロストとテイク・プロフィートの最適化:リスクをより良く制御し,利益を固定するために,ストップ・ロストとテイク・プロフィートの設定を最適化します.
  4. 基本分析と組み合わせる: 基本分析と技術分析を組み合わせる.例えば,企業の業績報告や経済データリリースなどの重要なイベントの前後,戦略の位置とパラメータを調整する.

上記の最適化措置により,BreakHigh EMAクロスオーバー戦略の安定性,適応性,収益性が向上し,より多くの市場環境で良いパフォーマンスを達成することができます.

概要

ブレイクハイ・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))



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



もっと