Chiến lược đảo ngược thanh đinh đinh

Tác giả:ChaoZhang, Ngày: 2024-01-25 12:29:29
Tags:

img

Tổng quan

Chiến lược đảo ngược thanh đinh đinh là một chiến lược giao dịch xu hướng dựa trên các mô hình giá ngắn hạn. Nó sử dụng các thanh đinh như là tín hiệu, kết hợp với đường trung bình động để xác định hướng xu hướng, để đạt được bước vào chính xác cao. Nó cũng sử dụng một cơ chế dừng theo dõi độc đáo để nhận ra lợi nhuận cực kỳ cao.

Nguyên tắc

Các tín hiệu nhập cảnh

Tín hiệu đầu vào cho chiến lược này là xuyên qua các thanh chân.

  1. Một mô hình ngắn hạn đặc biệt hình thành: tín hiệu tăng từ thanh pin tăng, tín hiệu giảm từ thanh pin giảm
  2. Các thanh pin xuyên qua các đường trung bình động: các thanh tăng xuyên qua các MAs xu hướng giảm, hoặc các thanh giảm xuyên qua các MAs xu hướng tăng

Sự kết hợp như vậy đảm bảo lọc hầu hết tiếng ồn và tăng độ chính xác nhập.

Định nghĩa xu hướng

Chiến lược sử dụng ba MAs của các giai đoạn khác nhau để xác định xu hướng. Cụ thể, khi MAs nhanh, trung bình và chậm liên kết theo một hướng, nó được xác định là xu hướng. Nếu không, nó được coi là hợp nhất.

Đối với các mục dài, MA nhanh > MA trung bình > MA chậm được yêu cầu. Đối với các mục ngắn, MA nhanh < MA trung bình < MA chậm được yêu cầu.

Cơ chế dừng mất mát

Chiến lược này sử dụng một cơ chế dừng lỗ theo dõi độc đáo. Sau khi nhập, các điểm dừng lỗ tối ưu được theo dõi dựa trên các giá trị được xác định bởi người dùng cho các điểm theo dõi và bù đắp. Điều này cho phép tối đa hóa lợi nhuận thu được trong khi kiểm soát rủi ro.

Phân tích lợi thế

Nhập hiệu quả cao

Các tín hiệu xuyên thủng chỉ cho phép nhập vào các điểm cơ hội có xác suất cao, tránh giao dịch quá ồn ào. Kết hợp với bộ lọc xu hướng tiếp tục tránh hầu hết các hoạt động đối lập. Điều này đảm bảo độ chính xác cao cho chiến lược.

Lợi nhuận cực kỳ lớn

Việc dừng lại duy nhất là điểm nổi bật lớn nhất của chiến lược này. Nó kiểm soát chính xác mức dừng lỗ trong phạm vi nhỏ trên cơ sở mỗi giao dịch, trong khi đảm bảo lợi nhuận tối đa.

Kết quả mô phỏng cho thấy lợi nhuận điên rồ sau khi áp dụng cơ chế này, với tổng lợi nhuận vượt quá 1000% cho nhiều cặp, và lợi nhuận tối đa cho mỗi giao dịch hơn 100 lần rủi ro ban đầu.

Phân tích rủi ro

Nguy cơ tăng cân

Với các kết quả gần như giống như "thánh cốc", rất có thể đây là một mô phỏng quá tải của thị trường.

Ngoài ra, thời gian thử nghiệm ngắn hai năm có thể không ghi lại những thay đổi về chế độ thị trường cấu trúc có thể ảnh hưởng đến kết quả thực tế.

Rủi ro dừng lại

Các giá trị stop trailing quá nhạy cảm có thể gây ra quá nhiều stop out không mong muốn. Các sự kiện thị trường đột ngột cũng có thể vô hiệu hóa các lệnh stop loss. Đây là những rủi ro nội tại liên quan đến việc sử dụng trailing stop.

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

Điều chỉnh các thông số Trailing Stop

Để làm cho nó nhanh nhẹn và đáng tin cậy, hãy cố gắng thư giãn các điểm kéo theo để tránh quá nhạy cảm.

Tăng khung thời gian thử nghiệm cũng giúp kiểm tra độ bền của tham số.

Tối ưu hóa thời gian MA

Thời gian MA hiện tại có thể không phải là bộ tham số tối ưu.

Ví dụ, tăng sự khác biệt giữa thời gian MA nhanh và trung bình, hoặc sửa đổi cách MA tương tác.

Kết luận

Chiến lược đảo ngược thanh đinh đinh đã đạt được kết quả kiểm tra ngược đáng kinh ngạc thông qua sự tham gia hiệu quả cao và lợi nhuận cực đoan.

Với việc điều chỉnh hoặc tối ưu hóa các tham số thích hợp, chiến lược này có thể mang lại lợi nhuận đáng kể trong giao dịch trực tiếp, trở thành một hệ thống theo xu hướng mạnh mẽ.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Time Frame: H1
strategy("Pin Bar Magic v1", overlay=true)

// User Input
usr_risk = input(title="Equity Risk (%)",type=input.integer,minval=1,maxval=100,step=1,defval=3,confirm=false)
atr_mult = input(title="Stop Loss (x*ATR, Float)",type=input.float,minval=0.1,maxval=100,step=0.1,defval=0.5,confirm=false)
slPoints = input(title="Stop Loss Trail Points (Pips)",type=input.integer,minval=1,maxval=1000,step=1,defval=1,confirm=false)
slOffset = input(title="Stop Loss Trail Offset (Pips)",type=input.integer,minval=1,maxval=1000,step=1,defval=1,confirm=false)
sma_slow = input(title="Slow SMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=50,confirm=false)
ema_medm = input(title="Medm EMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=18,confirm=false)
ema_fast = input(title="Fast EMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=6,confirm=false)
atr_valu = input(title="ATR (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=14,confirm=false)
ent_canc = input(title="Cancel Entry After X Bars (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=3,confirm=false)

// Create Indicators
slowSMA = sma(close, sma_slow)
medmEMA = ema(close, ema_medm)
fastEMA = ema(close, ema_fast)
bullishPinBar = ((close > open) and ((open - low) > 0.66 * (high - low))) or ((close < open) and ((close - low) > 0.66 * (high - low)))
bearishPinBar = ((close > open) and ((high - close) > 0.66 * (high - low))) or ((close < open) and ((high - open) > 0.66 * (high - low)))
atr = atr(atr_valu)

// Specify Trend Conditions
fanUpTrend = (fastEMA > medmEMA) and (medmEMA > slowSMA)
fanDnTrend = (fastEMA < medmEMA) and (medmEMA < slowSMA)

// Specify Piercing Conditions
bullPierce = ((low < fastEMA) and (open > fastEMA) and (close > fastEMA)) or ((low < medmEMA) and (open > medmEMA) and (close > medmEMA)) or ((low < slowSMA) and (open > slowSMA) and (close > slowSMA))
bearPierce = ((high > fastEMA) and (open < fastEMA) and (close < fastEMA)) or ((high > medmEMA) and (open < medmEMA) and (close < medmEMA)) or ((high > slowSMA) and (open < slowSMA) and (close < slowSMA))
    
// Specify Entry Conditions
longEntry = fanUpTrend and bullishPinBar and bullPierce
shortEntry = fanDnTrend and bearishPinBar and bearPierce

// Long Entry Function
enterlong() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = low[1] - atr[1] * atr_mult
    entryPrice = high[1]
    units = risk / (entryPrice - stopLoss)
    strategy.entry("long", strategy.long, units, stop=entryPrice)
    strategy.exit("exit long", from_entry="long", trail_points=slPoints, trail_offset=slOffset)
    
// Short Entry Function
entershort() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = high[1] + atr[1] * atr_mult
    entryPrice = low[1]
    units = risk / (stopLoss - entryPrice)
    strategy.entry("short", strategy.short, units, stop=entryPrice)
    strategy.exit("exit short", from_entry="short", trail_points=slPoints, trail_offset=slOffset)
    
// Execute Long Entry
if (longEntry)
    enterlong()

// Execute Short Entry
if (shortEntry)
    entershort() 
    
// Cancel the Entry if Bar Time is Exceeded
strategy.cancel("long", barssince(longEntry) > ent_canc)
strategy.cancel("short", barssince(shortEntry) > ent_canc)

// Force Close During Certain Conditions
strategy.close_all(when = hour==16 and dayofweek==dayofweek.friday, comment = "exit all, market-closed")
strategy.close_all(when = crossunder(fastEMA, medmEMA), comment = "exit long, re-cross")
strategy.close_all(when = crossover(fastEMA, medmEMA), comment = "exit short, re-cross")

// Plot Moving Averages to Chart
plot(fastEMA, color=color.red)
plot(medmEMA, color=color.blue)
plot(slowSMA, color=color.green)

// Plot Pin Bars to Chart
plotshape(bullishPinBar, text='Bull PB', style=shape.labeldown, location=location.abovebar, color=color.green, textcolor=color.white, transp=0)
plotshape(bearishPinBar, text='Bear PB', style=shape.labelup, location=location.belowbar, color=color.red, textcolor=color.white, transp=0)

// Plot Days of Week
plotshape(hour==0 and dayofweek==dayofweek.monday, text='Monday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.tuesday, text='Tuesday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.wednesday, text='Wednesday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.thursday, text='Thursday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.friday, text='Friday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==16 and dayofweek==dayofweek.friday, text='Market Closed', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)









Thêm nữa