
この戦略は,指数移動均線の方向を判断して多空方向を決定する.陽線が大体陰線を飲み込む形状が発生し,取引量が拡大したときに多操作を行う.指数移動均線の方向が転向したときに,または陰線が大体陽線を飲み込む形状が発生したときに平仓操作を行う.
2つの異なるパラメータを使用した指数移動平均線は,市場のトレンド方向を判断する.短期EMA線は長期EMA線の上に多頭市場とみなされ,逆に空頭市場である.
市場が多頭状態にあるとき,陽線が前K線を大体呑み込み,取引量が前K線の1.2倍以上である場合,多頭シグナルが生じます.この形は多頭力が強いことを示し,多頭に追いつくことができます.
市場トレンドが転じるとき,すなわち短期EMAの下から長期EMAを通るとき,多頭力の弱まりを示し,平仓するべきである。または陰線が大体陽線を食い尽くす形状が現れたとき,空頭力の加減を示し,進出すべきである。
双EMAを用いて市場の構造を判断し,多空市場の状態をより正確に判断することができる.
吞食形態は,一方的な勢力が突然増量して進出することを示し,より大きな動きを捉えることができる。取引量と組み合わせてフィルターを拡大し,偽突破による遅延を回避する。
止損メカニズムがある。 止損位を設定しないため,市場構造の転換を使用して止損をすることがあり,無意味な止損による滑点損失を減らすことができる。
二重EMA判断市場構造も判断ミスになり,市場を見逃したり乱入したりすることが多い.EMA周期パラメータを適切に調整することができる.
フォローフォームは震動の操作によって誤導されやすい. フィルター条件を追加することで,誤った取引を防ぐことができます.
止損位を設定していない場合,より大きな損失を招く可能性があります. 試しにbreak even止損などの方法を試すことができます.
MACD,エネルギー潮など,より多くの指標を組み合わせて多空判断することができる.
適当な範囲のストップ・ローンを追加することができます.
取引品種の特性に応じてEMA周期パラメータを最適化することができる。
この戦略の全体的な考え方は明確で分かりやすく,指数移動均線判断構造を使用し,突破を捕捉する吞食形状である.判断論理が単純で,取引信号が明確であることの利点がある.しかし,閉じ込められるリスクもある.さらなる最適化により,より良いリターンを得ることが期待される.
/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=5
// # ========================================================================= #
// # | STRATEGY |
// # ========================================================================= #
strategy(
title = "fpemehd Strategy001",
shorttitle = "f_001",
overlay = true,
default_qty_type = strategy.percent_of_equity,
default_qty_value = 100,
initial_capital = 10000000,
currency = currency.USD,
slippage = 0,
commission_type = strategy.commission.cash_per_order,
commission_value = 0.01,
process_orders_on_close = true)
// # ========================================================================= #
// # | STRATEGY |
// # ========================================================================= #
// Inputs
I_start_date = input (defval = timestamp("20 Jan 1990 00:00 +0900"))
I_finish_date = input(defval = timestamp("20 Dec 2030 00:00 +0900"))
I_short_ema = input.int(defval = 15 , title = "Short EMA", minval = 1 , maxval = 300 , step = 1)
I_long_ema = input.int(defval = 30 , title = "Long EMA", minval = 1 , maxval = 300 , step = 1)
I_body = input.float(defval = 1 , title = "Size of Body", minval = 1 , maxval = 5 , step = 0.1)
time_cond = true
// Calculate Engulfing Candles
C_uptrend = false
C_downtrend = false
C_ema_short = ta.ema(source = close, length = I_short_ema)
C_ema_long = ta.ema(source = close, length = I_long_ema)
C_uptrend := close > C_ema_short and C_ema_short > C_ema_long
C_downtrend := close < C_ema_short and C_ema_short < C_ema_long
C_pre_body = math.abs(open[1]-close[1])
C_pre_body_ratio = (math.abs(open[1]-close[1])) / (math.abs(high[1]-low[1])) * 100
C_now_body = math.abs(open-close)
C_now_body_ratio = (math.abs(open-close)) / (math.abs(high-low)) * 100
C_bullish_engulfing = (open[1] > close[1] and open <= close) and (low < low[1] and high > high[1])
C_bearish_engulfing = (open[1] < close[1] and open >= close) and (low < low[1] and high > high[1])
C_avoid_doge = (C_pre_body_ratio > I_body and C_now_body_ratio > I_body) ? true : false
C_volume_filter = volume > volume[1] * 1.2
// Signals
long_signal = C_uptrend and C_bullish_engulfing and C_avoid_doge and C_volume_filter
close_signal = C_downtrend or C_bearish_engulfing
if long_signal and time_cond
strategy.entry(id = "Long", direction = strategy.long)
if close_signal and time_cond
strategy.close(id = "Long")