Chiến lược đảo ngược động lực bốn chỉ số

Tác giả:ChaoZhang, Ngày: 2023-11-27
Tags:

img

Tổng quan

Chiến lược này sử dụng ba chỉ số kỹ thuật chính: EMA chuyển động trung bình, chỉ số sức mạnh tương đối RSI và chỉ số kênh hàng hóa CCI để xác định đà tăng giá thông qua EMA chéo và các mục tiếp theo được xác nhận bởi các bài đọc bán quá / mua quá từ RSI và CCI. Chiến lược giao dịch trung hạn này nhằm mục đích nắm bắt sự đảo ngược đà tăng.

Chiến lược logic

  1. Sử dụng chéo giữa EMA 4 giai đoạn và 8 giai đoạn để xác định động lực giá EMA 4 giai đoạn nhanh hơn để phản ứng nhanh chóng và EMA 8 giai đoạn chậm hơn để xác nhận;

  2. Khi EMA tăng, tức là EMA 4 giai đoạn vượt qua EMA 8 giai đoạn, kiểm tra xem RSI (cao hơn 65) và CCI (cao hơn 0) không bị mua quá mức để cung cấp tín hiệu dài;

  3. Khi EMA quay xuống, tức là EMA 4 giai đoạn vượt qua dưới EMA 8 giai đoạn, kiểm tra xem RSI (dưới 35) và CCI (dưới 0) đã bán quá mức để cung cấp tín hiệu ngắn;

  4. Đặt giá dừng lỗ và lấy lợi nhuận dựa trên khoảng cách đầu vào một khi tín hiệu giao dịch được kích hoạt.

Tóm lại, chiến lược này xem xét xu hướng trung hạn và mức mua quá mức / bán quá mức ngắn hạn để tạo ra các tín hiệu tương đối ổn định, trong khi dừng lỗ và lấy lợi nhuận có hiệu quả hạn chế lỗ cho mỗi giao dịch.

Phân tích lợi thế

  1. Nhiều chỉ số giảm thiểu tín hiệu sai từ các dao động cá nhân;

  2. EMA xác định xu hướng chính trong khi RSI và CCI tránh các khu vực quá nóng để cải thiện tỷ lệ thắng;

  3. Thiết lập dừng lỗ tự động và lấy lợi nhuận hạn chế lỗ trong các động thái cực đoan;

  4. Bản chất kỹ thuật thuần túy làm cho chiến lược này dễ dàng thực hiện trong bất kỳ khung thời gian nào.

Phân tích rủi ro

  1. Tin tức cơ bản lớn có thể vượt qua các cấp kỹ thuật;

  2. Stop loss có thể được thực hiện bởi các lệnh biến động lớn cho các lệnh dừng rộng hơn;

  3. Giao dịch thường xuyên thúc đẩy chi phí giao dịch cao hơn do đó tốt nhất để lại cho các thuật toán tần số cao.

Cơ hội gia tăng

  1. Kết hợp các mô hình học máy để tự động điều chỉnh các thông số dựa trên các nguyên tắc cơ bản;

  2. Xây dựng dừng thích nghi phản ứng với biến động thay vì khoảng cách cố định.

Kết luận

Chiến lược đa diện này có thể mang lại lợi nhuận trung hạn nhất quán với các thông số tối ưu, làm cho nó trở thành một hệ thống kỹ thuật dễ tiếp cận.


/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21

//@version=4


strategy(title="Moving Average Exponential", shorttitle="EMA", overlay=true)


len4 = input(4, minval=1, title="Length_MA4")
src4 = input(close, title="Source")
offset4 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out4 = ema(src4, len4)
plot(out4, title="EMA", color=color.blue, offset=offset4)

len8 = input(8, minval=1, title="Length_MA8")
src8 = input(close, title="Source")
offset8 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out8 = ema(src8, len8)
plot(out8, title="EMA", color=color.blue, offset=offset8)


//rsioma
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(ema(src, len)), 0), len)
down = rma(-min(change(ema(src, len)), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
//plot(rsi, color=color.blue)
//band1 = hline(80)
//band0 = hline(20)
//fill(band1, band0, color=color.purple, transp=90)
//hline(50, color=color.gray, linestyle=plot.style_line)
sig = ema(rsi, 21)
//plot(sig, color=color.purple)

//woodie
cciTurboLength = input(title="CCI Turbo Length", type=input.integer, defval=6, minval=3, maxval=14)
cci14Length = input(title="CCI 14 Length", type=input.integer, defval=14, minval=7, maxval=20)

source = close

cciTurbo = cci(source, cciTurboLength)
cci14 = cci(source, cci14Length)

last5IsDown = cci14[5] < 0 and cci14[4] < 0 and cci14[3] < 0 and cci14[2] < 0 and cci14[1] < 0
last5IsUp = cci14[5] > 0 and cci14[4] > 0 and cci14[3] > 0 and cci14[2] > 0 and cci14[1] > 0
histogramColor = last5IsUp ? color.green : last5IsDown ? color.red : cci14 < 0 ? color.green : color.red


// Exit Condition
// Exit Condition
a = input(12)*10
b = input(15)*10
c = a*syminfo.mintick
d = b*syminfo.mintick


longCondition = crossover(out4, out8) and (rsi >= 65 and cci14>=0)
shortCondition = crossunder(out4, out8) and (rsi <=35 and cci14<=0)


long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + d : long_profit_level1  [1]
//long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
//long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - d : short_profit_level1 [1]
//short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
//short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 


//ha
// === Input ===
//ma1_len = input(1, title="MA 01")
//ma2_len = input(40, title="MA 02")

// === MA 01 Filter ===
//o=ema(open,ma1_len)
//cc=ema(close,ma1_len)
//h=ema(high,ma1_len)
//l=ema(low,ma1_len)

// === HA calculator ===
//ha_t = heikinashi(syminfo.tickerid)
//ha_o = security(ha_t, timeframe.period, o)
//ha_c = security(ha_t, timeframe.period, cc)
//ha_h = security(ha_t, timeframe.period, h)
//ha_l = security(ha_t, timeframe.period, l)

// === MA 02 Filter ===
//o2=ema(ha_o, ma2_len)
//c2=ema(ha_c, ma2_len)
//h2=ema(ha_h, ma2_len)
//l2=ema(ha_l, ma2_len)

// === Color def ===
//ha_col=o2>c2 ? color.red : color.lime

// ===  PLOTITING===
//plotcandle(o2, h2, l2, c2, title="HA Smoothed", color=ha_col)

tp=input(120)
sl=input(96)
    
strategy.entry("long", strategy.long, when = longCondition)
//strategy.close("long", when = o2>c2 , comment="ha_long")
strategy.entry("short", strategy.short , when =shortCondition )
//strategy.close("short", when = o2<=c2 , comment = "ha_short" )

//strategy.close("long",when=long_profit_level1 or long_stop_level  , comment="tp/sl")
//strategy.close("short",when=short_profit_level1 or short_stop_level , comment="tp/sl")

strategy.exit("x_long","long",profit = tp, loss = sl) //when = o2>c2)
strategy.exit("x_short","short",profit = tp, loss = sl) //when = o2<c2)



Thêm nữa