
価格突破のEMA交差戦略は,価格突破とインデックス移動平均の (EMA) 交差に基づいた取引戦略である.この戦略は,指定された周期内の最高価格を買取信号として使用し,EMAを販売信号として使用する.閉盘価格が指定された周期内の最高価格を突破すると,戦略は買取信号を生成し,閉盘価格がEMAを下回ると,戦略は販売信号を生成する.この戦略は,リスクを制御するためにストップ・ロスの価格を設定する.さらに,この戦略は,異なる取引スタイルと市場環境に対応するためにユーザーにカスタマイズされた複数のパラメータを提供します.
最高値のEMA交差を突破する戦略の核心原則は,価格の突破とEMA交差を利用して市場トレンドを捉えることです.価格が指定された周期内の最高値を破るときは,市場が上昇傾向に入ることを示すため,戦略は買取シグナルを生成します.同時に,EMAは,価格がEMAを下回るときは,上昇傾向が終了する可能性を示し,戦略は販売シグナルを生成します.
この戦略は,以下のステップを使って取引を可能にします.
上記のステップにより,この戦略は,上向きの市場トレンドで利益を得ることができ,同時に,下向きのリスクをコントロールするために,ストップ・ロスを使用します.
EMAの交差点を突破する戦略は以下の利点があります.
EMAの交差点を突破する戦略にはいくつかの利点がありますが,以下のリスクもあります.
これらのリスクを軽減するために,以下の措置を考慮すべきです.
最高価格の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))
//****************************************************************************//