
Đây là một chiến lược giao dịch định lượng kết hợp các đợt phá vỡ của đường cao thấp và xu hướng EMA nhiều chu kỳ. Chiến lược chủ yếu đánh giá thời gian giao dịch bằng cách theo dõi sự phá vỡ của giá đối với các mức thấp cao của ngày hôm trước, kết hợp với đường trung bình EMA và chỉ số dòng tiền ((CMF)). Chiến lược đồng thời sử dụng đường trung bình EMA 200 chu kỳ của hai chu kỳ thời gian trên đường giờ và đường ngày để tăng độ chính xác của giao dịch bằng cách xác minh nhiều chỉ số kỹ thuật.
Logic cốt lõi của chiến lược bao gồm các yếu tố chính sau:
Các quy tắc giao dịch cụ thể như sau: Làm nhiều điều kiện: Giá vượt mức cao nhất một ngày trước + Giá đóng cửa trên EMA + CMF là giá trị chính Điều kiện mở cửa: Giá giảm xuống mức thấp nhất một ngày trước + Giá đóng cửa dưới EMA + CMF là âm Điều kiện thế cân bằng: giá giảm xuống EMA khi mua nhiều, giá vượt qua EMA khi mua ít
Đề xuất kiểm soát rủi ro:
Đây là một hệ thống giao dịch hoàn chỉnh kết hợp nhiều chỉ số kỹ thuật và phân tích nhiều chu kỳ thời gian. Chiến lược tìm kiếm cơ hội giao dịch thông qua phân tích tổng hợp các điểm phá vỡ, xu hướng trung bình và dòng tiền trong ngày. Mặc dù có một số rủi ro, nhưng với kiểm soát rủi ro hợp lý và cải tiến tối ưu hóa liên tục, chiến lược có giá trị ứng dụng tốt.
/*backtest
start: 2024-10-28 00:00:00
end: 2024-11-27 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='The security Daily HIGH/LOW strategy', overlay=true, initial_capital=10000, calc_on_every_tick=true,
default_qty_type=strategy.percent_of_equity, default_qty_value=100,
commission_type=strategy.commission.percent, commission_value=0.1)
// General Inputs
len = input.int(24, minval=1, title='Length MA', group='Optimization parameters')
src = input.source(close, title='Source MA', group='Optimization parameters')
out = ta.ema(src, len)
length = input.int(20, minval=1, title='CMF Length', group='Optimization parameters')
ad = close == high and close == low or high == low ? 0 : (2 * close - low - high) / (high - low) * volume
mf = math.sum(ad, length) / math.sum(volume, length)
// Function to get daily high and low
f_secureSecurity(_symbol, _res, _src) =>
request.security(_symbol, _res, _src[1], lookahead=barmerge.lookahead_on)
pricehigh = f_secureSecurity(syminfo.tickerid, 'D', high)
pricelow = f_secureSecurity(syminfo.tickerid, 'D', low)
// Plotting previous daily high and low
plot(pricehigh, title='Previous Daily High', style=plot.style_linebr, linewidth=2, color=color.new(color.white, 0))
plot(pricelow, title='Previous Daily Low', style=plot.style_linebr, linewidth=2, color=color.new(color.white, 0))
// Entry Conditions
short = ta.crossunder(low, pricelow) and close < out and mf < 0
long = ta.crossover(high, pricehigh) and close > out and mf > 0
if short and barstate.isconfirmed
strategy.entry('short', strategy.short, stop=pricelow[1])
strategy.close('short', when=close > out)
if long and barstate.isconfirmed
strategy.entry('long', strategy.long, stop=pricehigh[1])
strategy.close('long', when=close < out)
// 200 EMA on 1-hour timeframe
ema_200 = ta.ema(close, 200)
ema_200_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 200))
plot(ema_200_1h, color=color.purple, title="200 EMA (1H)")
plot(ema_200, color=color.white, title="200 EMA")