ブレイクハイEMAクロスオーバー戦略は,価格ブレイクアウトと指数関数移動平均 (EMA) クロスオーバーに基づいた取引戦略である.この戦略は,指定された期間中の最高価格をバイ・シグナルとして,EMAをセール・シグナルとして使用する.閉じる価格が指定された期間中の最高価格を超えると,戦略はバイ・シグナルを生成する.閉じる価格がEMAを下回ると,戦略はセール・シグナルを生成する.戦略はリスクを制御するためにストップ・ロスの価格も設定する.さらに,この戦略は,ユーザーが異なる取引スタイルと市場状況に適応するためにカスタマイズできる複数のパラメータを提供します.
BreakHigh EMAクロスオーバー戦略の基本原則は,価格ブレイクアウトとEMAクロスオーバーを使用して市場のトレンドを把握することです.価格が指定された期間中の最高価格を超えると,市場は上昇傾向に入ることができることを示します.したがって戦略は購入信号を生成します.同時に,EMAはトレンドフォローする指標として機能します.価格がEMAを下回ると,上昇傾向が終了する可能性を示します.したがって戦略は販売信号を生成します.
戦略は,取引を実施するために以下のステップを使用します.
上記のステップを通じて,ストップロスを使ってダウンサイドリスクを制御しながら,市場の上昇傾向から利益を得ることができます.
BreakHigh EMAクロスオーバー戦略には以下の利点があります.
BreakHigh EMAのクロスオーバー戦略には,いくつかの利点があるが,次のリスクも伴う.
これらのリスクを軽減するために,次の措置を検討できます.
BreakHigh EMAのクロスオーバー戦略のパフォーマンスをさらに向上させるために,次の最適化方向は検討できる.
上記の最適化措置により,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)) //****************************************************************************//