
Chiến lược này sử dụng một phương pháp phân tích định lượng hỗn hợp, kết hợp hai mô hình phân bố và phân tích hồi quy để xác định các trạng thái thị trường khác nhau. Chiến lược này đầu tiên tính toán các chỉ số đường trung bình di chuyển đơn giản (SMA) và các chỉ số Brin (BB), sau đó tính toán điểm Z dựa trên các mức trung bình và chênh lệch tiêu chuẩn của lợi nhuận lịch sử. Chiến lược mở nhiều vị trí khi điểm Z thấp hơn giá xuống thấp và giá thấp hơn đường xuống; chiến lược tháo dỡ khi điểm Z cao hơn giá tăng và giá cao hơn đường lên.
Nguyên tắc cốt lõi của chiến lược này là sử dụng điểm Z để đo lường vị trí của lợi nhuận hiện tại so với phân bố lợi nhuận lịch sử. Công thức tính toán của điểm Z là: ((giải thưởng hiện tại - trung bình lợi nhuận lịch sử) / chênh lệch tiêu chuẩn lợi nhuận lịch sử. Điểm Z cao hơn, cho thấy lợi nhuận hiện tại vượt quá cực và khả năng mua quá cao hơn; Điểm Z thấp hơn, cho thấy lợi nhuận hiện tại vượt quá cực và khả năng bán quá cao hơn.
Chiến lược định lượng điểm Z hai chiều hỗn hợp là một chiến lược giao dịch định lượng dựa trên các nguyên tắc thống kê, xác định các cơ hội giao dịch tiềm năng bằng cách so sánh lợi nhuận hiện tại với phân phối lợi nhuận lịch sử. Đồng thời, chiến lược sử dụng chỉ số Bollinger Bands để xác nhận hai lần, nâng cao độ tin cậy tín hiệu. Quy tắc chiến lược rõ ràng, dễ thực hiện và tối ưu hóa, nhưng đồng thời cũng đối mặt với các thách thức như nhạy cảm với tham số, rủi ro xu hướng, rủi ro quá phù hợp.
/*backtest
start: 2023-05-22 00:00:00
end: 2024-05-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Estratégia Híbrida Quantitativa", overlay=true)
// Definição de parâmetros
sma_length = input.int(20, title="Período da SMA")
threshold_high = input.float(1.5, title="Threshold Alto")
threshold_low = input.float(-1.5, title="Threshold Baixo")
lookback_period = input.int(252, title="Período de Retorno Histórico (dias)")
// Funções auxiliares
f_sma(source, length) =>
ta.sma(source, length)
f_bollinger_band(source, length, mult) =>
basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)
[basis + dev, basis - dev]
// Cálculo dos indicadores
sma = f_sma(close, sma_length)
[upper_band, lower_band] = f_bollinger_band(close, sma_length, 2)
// Regime de Mercado: Binomial
retornos = ta.change(close, 1)
media_retornos = ta.sma(retornos, lookback_period)
desvio_padrao_retornos = ta.stdev(retornos, lookback_period)
// Indicador de Regime: Z-Score
z_score = (retornos - media_retornos) / desvio_padrao_retornos
// Sinal de Compra e Venda
sinal_compra = z_score < threshold_low and close < lower_band
sinal_venda = z_score > threshold_high and close > upper_band
// Execução de Ordem
if (sinal_compra)
strategy.entry("Long", strategy.long)
if (sinal_venda)
strategy.close("Long")
// Plotagem dos Indicadores
plot(sma, title="SMA", color=color.blue)
plot(upper_band, title="Upper Bollinger Band", color=color.red)
plot(lower_band, title="Lower Bollinger Band", color=color.green)
hline(threshold_high, "Threshold Alto", color=color.red, linestyle=hline.style_dashed)
hline(threshold_low, "Threshold Baixo", color=color.green, linestyle=hline.style_dashed)
plot(z_score, title="Z-Score", color=color.purple)