Chiến lược hai chỉ số định lượng

Tác giả:ChaoZhang, Ngày: 2023-12-29 16:29:21
Tags:

img

Tổng quan

Chiến lược này là một chiến lược kết hợp dựa trên chỉ số EMA kép và chỉ số Bull Power.

Chiến lược logic

Chiến lược bao gồm hai phần:

  1. Chỉ số 2/20 EMA. Chỉ số này tính toán EMA 2 ngày và 20 ngày. Nó tạo ra tín hiệu mua khi giá vượt qua EMA và bán tín hiệu khi giá vượt qua EMA.

  2. Chỉ số Bull Power. Chỉ số này tính toán sức mạnh tăng/giảm dựa trên mối quan hệ của thanh hiện tại với thanh trước. Nó tạo ra tín hiệu giao dịch khi sức mạnh tăng/giảm vượt ngưỡng.

Hai phần tín hiệu cần phải được kích hoạt cùng một lúc để mở các vị trí. Ví dụ, EMA Golden Cross và Bull Power là các vị trí mở dài tích cực, trong khi EMA Dead Cross và Bull Power là các vị trí mở ngắn âm.

Phân tích lợi thế

  1. Kết hợp các chỉ số để lọc tín hiệu giả. Chỉ số duy nhất có xu hướng bị ảnh hưởng bởi các yếu tố bên ngoài tạo ra tín hiệu giả. Sự kết hợp hai chỉ số có thể xác minh lẫn nhau và lọc ra các tín hiệu giả, cải thiện chất lượng tín hiệu.
  2. Các tham số có thể tùy chỉnh: Thời gian EMA và ngưỡng Bull Power có thể tùy chỉnh để thích nghi với môi trường thị trường khác nhau.
  3. Logic đơn giản và rõ ràng: Chiến lược chỉ sử dụng hai chỉ số chung với logic đơn giản và rõ ràng, dễ hiểu và thực hiện.

Phân tích rủi ro

  1. Rủi ro thất bại chỉ số: Mặc dù sử dụng các chỉ số kết hợp, điều kiện thị trường cực đoan vẫn có thể gây ra sự thất bại của chỉ số.
  2. Rủi ro tối ưu hóa tham số. Cài đặt tham số không phù hợp có thể dẫn đến giao dịch không đủ hoặc quá mức, làm suy yếu hiệu suất chiến lược. Yêu cầu kiểm tra đủ để tìm các tham số tối ưu.

Hướng dẫn tối ưu hóa

  1. Thêm cơ chế dừng lỗ. Đặt dừng lỗ di chuyển hoặc quay lại để kiểm soát lỗ giao dịch đơn.
  2. Tối ưu hóa cài đặt tham số. Kiểm tra các kết hợp tham số khác nhau để tìm các tham số tối ưu cho hiệu suất tốt hơn.
  3. Thêm các điều kiện lọc. Thêm các điều kiện như khối lượng giao dịch hoặc biến động để lọc các điều kiện thị trường bất thường khi mở các vị trí.

Kết luận

Chiến lược này thực hiện các quyết định giao dịch bằng cách kết hợp hai chỉ số EMA và Bull Power. So với các chiến lược chỉ số duy nhất, sự kết hợp loại bỏ các tín hiệu giả hiệu quả trong khi vẫn giữ các tham số có thể tùy chỉnh.


/*backtest
start: 2022-12-22 00:00:00
end: 2023-12-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/07/2022
// This is combo strategies for get a cumulative signal.  
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
//  Bull Power Indicator
//  To get more information please see "Bull And Bear Balance Indicator" 
//  by Vadim Gimelfarb. 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


BP(SellLevel) =>
    pos = 0.0
    value = close < open ?  
             close[1] < open ?  math.max(high - close[1], close - low): math.max(high - open, close - low):
              close > open ? 
               close[1] > open ?  high - low : math.max(open - close[1], high - low) : 
                 high - close > close - low ? 
                  close[1] < open ? math.max(high - close[1], close - low) : high - open : 
                   high - close < close - low ? 
                     close[1] > open ?  high - low : math.max(open - close, high - low) : 
                      close[1] > open ? math.max(high - open, close - low) :
                       close[1] < open? math.max(open - close, high - low): high - low
    val2 = ta.sma(value, 15)                   
    pos :=  val2 > SellLevel ? 1 : -1
    pos

strategy(title='Combo 2/20 EMA & Bull Power', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════  Bull Power ═════●'
SellLevel = input.float(-15, step=0.01, group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosBP = BP(SellLevel)
iff_1 = posEMA20 == -1 and prePosBP == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBP == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)

Thêm nữa