Chiến lược thoát khỏi EMA hai lần

Tác giả:ChaoZhang, Ngày: 2023-12-07 15:50:13
Tags:

img

Tổng quan

Chiến lược này xác định hướng dài / ngắn bằng cách đánh giá hướng của các đường trung bình động theo cấp số nhân (EMA). Nó đi dài khi có một mô hình hấp thụ tăng và khối lượng giao dịch mở rộng. Nó đóng vị trí khi hướng của EMA được đảo ngược hoặc một mô hình hấp thụ giảm xảy ra.

Chiến lược logic

  1. Sử dụng hai EMA với các thông số khác nhau để xác định xu hướng thị trường.

  2. Khi thị trường đang tăng, nếu một mô hình hấp thụ tăng xuất hiện và khối lượng giao dịch lớn hơn 1,2 lần so với thanh trước, một tín hiệu dài được kích hoạt.

  3. Khi xu hướng thị trường đảo ngược, tức là EMA ngắn vượt dưới EMA dài, nó cho thấy đà suy yếu của những con bò và vị trí hiện tại nên được đóng.

Phân tích lợi thế

  1. Sử dụng EMA kép để xác định cấu trúc thị trường có thể đánh giá chính xác tình trạng bò / gấu.

  2. Mô hình ngập cho thấy động lượng một bên đột ngột tăng lên, có thể nắm bắt các xu hướng lớn.

  3. Nó có một cơ chế dừng lỗ. Bằng cách không đặt giá dừng lỗ nhưng sử dụng đảo ngược cấu trúc thị trường để dừng lỗ, trượt không cần thiết có thể được giảm.

Phân tích rủi ro

  1. Các EMA đôi cũng có thể đánh giá sai cấu trúc thị trường, do đó bỏ lỡ xu hướng hoặc sai lầm đi dài.

  2. Mô hình ngập có thể bị đánh lừa bởi các thị trường khác nhau.

  3. Không có giá dừng lỗ có thể dẫn đến tổn thất lớn hơn.

Hướng tối ưu hóa

  1. Nhiều chỉ số như MACD, A / D có thể được sử dụng để xác định dài / ngắn.

  2. Thêm giá dừng lỗ cố định vừa phải dựa trên nhu cầu.

  3. Tối ưu hóa thời gian EMA dựa trên các đặc điểm giao dịch biểu tượng.

Kết luận

Chiến lược này có logic rõ ràng và dễ hiểu, sử dụng EMA để xác định cấu trúc và mô hình ngập để nắm bắt sự phá vỡ.


/*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")



Thêm nữa