Chiến lược giao dịch dựa trên sự kết hợp của EMA Breakthrough và K-line Pattern

Tác giả:ChaoZhang, Ngày: 2024-02-21 15:00:06
Tags:

img

Tổng quan

Chiến lược này tích hợp nhiều chỉ số EMA khung thời gian và đánh giá mô hình đường K để đạt được tín hiệu thu thập tương đối nhạy cảm dài hạn và thoát dừng lỗ.

Nguyên tắc chiến lược

Chiến lược chủ yếu dựa trên các chỉ số sau đây để đánh giá:

  1. EMA: Sử dụng 2 bộ 13 và 21 chu kỳ EMA để xác định tín hiệu giao dịch khi giá đột phá.

  2. Mô hình đường K: đánh giá hướng của thực thể đường K và sử dụng nó với chỉ số EMA để lọc các đột phá sai.

  3. Phản kháng hỗ trợ: Được xây dựng bởi các điểm cao nhất trong 10 chu kỳ cuối cùng để xác định xem sự đột phá có vượt qua khu vực này để tăng độ tin cậy tín hiệu hay không.

  4. Tăng trong phân chia thời gian: 120 chu kỳ đóng cửa ở trên mở để đánh giá như tăng trong phân chia thời gian, như một phán quyết phụ trợ.

Các quy tắc để tạo tín hiệu giao dịch là:

  1. Tín hiệu tăng: EMA nhanh vượt qua EMA chậm lên với đường Yang K-line, đóng vị trí ngắn và mở dài.

  2. Tín hiệu giảm: EMA nhanh phá vỡ qua EMA chậm với đường Yin đường K, vị trí dài phẳng.

  3. Khả năng thoát khỏi lỗ dừng: Khả năng thoát khỏi lỗ dừng ở vị trí hiện tại khi tín hiệu ngược xuất hiện.

Ưu điểm

  1. Các chỉ số EMA nhiều khung thời gian đánh giá xu hướng đáng tin cậy hơn và tránh những bước đột phá sai.
  2. Kết hợp với hướng thực thể đường K để lọc để xác định xu hướng chính xác hơn.
  3. Tăng các phán đoán phân chia thời gian và hỗ trợ các phán đoán kháng để đảm bảo chất lượng tín hiệu.
  4. Sử dụng tín hiệu ngược như là dừng lỗ để giảm nguy cơ mất mát.

Rủi ro

  1. Rủi ro của các bước đột phá không hợp lệ dẫn đến tổn thất: Phán quyết của EMA và các đơn vị dòng K không thể tránh hoàn toàn tác động của các bước đột phá không hợp lệ đối với chiến lược.
  2. Rủi ro của lựa chọn tham số không phù hợp: cài đặt không phù hợp của chu kỳ EMA, chu kỳ phán đoán đường K sẽ dẫn đến giảm chất lượng tín hiệu.
  3. Nguy cơ thất bại trong kháng cự hỗ trợ. Sự thất bại kháng cự hỗ trợ lịch sử là phổ biến, điều này cũng sẽ dẫn đến thiếu động lực khi các tín hiệu được tạo ra.
  4. Nguy cơ thất bại phân chia thời gian: tình hình phân chia thời gian thay đổi và không thể hoàn toàn dựa vào nó để phán đoán.

Các rủi ro trên có thể được giảm thiểu thông qua các phương pháp như tránh tối ưu hóa quá mức, lựa chọn tham số cẩn thận, kiểm soát chặt chẽ kích thước vị trí.

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

  1. Giới thiệu các mô hình học máy để hỗ trợ phán đoán. Đào tạo các mô hình phân loại để đánh giá các hướng thực thể đường K để có độ chính xác cao hơn.
  2. Tăng cơ chế dừng lỗ thích nghi như dừng lại hoặc dừng dựa trên biến động.
  3. Kết hợp phân tích tình cảm. giới thiệu một số phán đoán về ý kiến truyền thông để tránh tác động tiêu cực lớn của tin tức.
  4. Thêm mô-đun quản lý kích thước vị trí.

Kết luận

Chiến lược này tích hợp nhiều đánh giá thực thể khung thời gian EMA và K-line để đánh giá xu hướng tương đối đáng tin cậy. Các đánh giá phụ bằng cách sử dụng kháng cự hỗ trợ và phân chia thời gian đảm bảo chất lượng tín hiệu. Sử dụng các tín hiệu ngược để dừng lỗ có thể kiểm soát hiệu quả lỗ dừng duy nhất.


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='ck - CryptoSniper Longs Only (Strategy)', shorttitle='ck - CryptoSniper Longs (S) v1', overlay=true, precision=2, commission_value=0.25, default_qty_type=strategy.percent_of_equity, pyramiding=0, default_qty_value=100, initial_capital=100)

open_long = 0
close_position = 0
last_long=close
last_short=close

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=false

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:', defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0

//=============Hull MA//
show_hma = false
hma_src = input(close, title="HullMA Source:")
hma_base_length = input(8, minval=1, title="HullMA Base Length:")
hma_length_scalar = input(5, minval=0, title="HullMA Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))

//============ signal Generator ==================================//
Period=input(title='Period', defval='120')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)

// Signals//
long = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
short = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short) ? 1 : -1
short_signal = crossover(last_short, last_long) ? -1 : 1

if (long_signal == 1)
    strategy.entry("Long Open", strategy.long)

if (short_signal == -1)
    strategy.close("Long Open")
    
if (long_signal[1] == 1 and short_signal[1] == 1)
    open_long := 1
    close_position := 0

if (short_signal[1] == -1 and long_signal[1] == -1)
    open_long := 0
    close_position := 1

plotshape(open_long == 1, title="Open Long", location=location.belowbar, style=shape.triangleup, size=size.small, color=green, transp=10)
plotshape(close_position == 1, title="Close Long", location=location.abovebar, style=shape.triangledown, size=size.small, color=red, transp=10)
//plot(0, title="Trigger", color=white)

///////////////////////////////////////////////////////////////////////////////////////////

Thêm nữa