Chiến lược giao dịch chênh lệch Alligator của Williams


Ngày tạo: 2023-09-25 17:42:27 sửa đổi lần cuối: 2023-09-25 17:42:27
sao chép: 0 Số nhấp chuột: 1616
1
tập trung vào
1617
Người theo dõi

Tổng quan

Chiến lược này dựa trên chỉ số cá mập của Bill Williams, nhưng sử dụng một đường dây Heiken Ashi khác. Đây là một chiến lược scalping đường ngắn, hoạt động trong khung thời gian từ 1 phút đến 5 phút.

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

Các nguyên tắc giao dịch chính của chiến lược này là:

  1. Sử dụng Heiken Ashi filters thay vì các filters tiêu chuẩn như là giá nhập. Heiken Ashi có thể lọc ra tiếng ồn thị trường, nhận ra xu hướng.

  2. Sử dụng ba đường trung bình trong chỉ số cá mập của Bill Williams: đường hàm dưới, đường răng và đường môi. Chúng tương tự như đường trung bình di chuyển để xác định hướng xu hướng.

  3. Khi ba dòng đồng đều được sắp xếp là: thấp nhất của hàm dưới, trung tâm của hàm răng, cao nhất của hàm môi, thì biểu thị xu hướng đa đầu; khi được sắp xếp theo thứ tự: cao nhất của hàm dưới, trung tâm của hàm răng, thấp nhất của hàm môi, thì biểu thị xu hướng không đầu.

  4. Đánh giá tham gia dựa trên hướng của thực thể Heiken Ashi và cách sắp xếp dây cá ngừ. Nếu thực thể hướng lên và dây cá ngừ được sắp xếp nhìn nhiều, hãy làm nhiều; nếu thực thể hướng xuống và dây cá ngừ được sắp xếp nhìn không, hãy làm trống.

  5. Khi có sự thay đổi trong trật tự của dây cá, nó cho thấy xu hướng bị đảo ngược và bạn nên dừng lại kịp thời.

  6. Quản lý rủi ro bằng cách đặt điểm dừng cố định, điểm dừng lỗ. Có thể chọn điểm lợi nhuận mục tiêu, điểm dừng lỗ và theo dõi dừng lỗ để kiểm soát mỗi khoản lỗ.

Chiến lược này kết hợp các bộ lọc kép, sử dụng Heiken Ashi để xác định xu hướng và sử dụng đường cá mập để đánh giá sự đảo ngược, tạo thành một chiến lược giao dịch đường ngắn có xác suất cao.

Phân tích lợi thế

Chiến lược này có những ưu điểm chính sau:

  1. Bộ lọc kép giảm tín hiệu giả. Sự kết hợp của Heiken Ashi và dây cá mập có thể cải thiện chất lượng tín hiệu.

  2. Đánh giá xu hướng rõ ràng và trực quan. Định vị của dây cá mập là rõ ràng và đáng tin cậy, không gây ra tình huống mơ hồ.

  3. Các giao dịch ngắn hiệu quả. Các giao dịch scalping phù hợp với chu kỳ từ 1 phút đến 5 phút.

  4. Thiết lập tham số đơn giản. Không cần tối ưu hóa phức tạp, một số tham số nhỏ có thể được sử dụng.

  5. Quản lý rủi ro nghiêm ngặt. Sử dụng điểm dừng để kiểm soát mỗi khoản lỗ.

  6. Cơ chế nhập và thoát rõ ràng.

  7. Dễ dàng sao chép và thực hiện. Các nhà giao dịch mới có thể dễ dàng sử dụng chiến lược này.

Phân tích rủi ro

Những rủi ro chính của chiến lược này là:

  1. Rủi ro rút lui: Các dây cá mập tạo ra tín hiệu thường xuyên, sẽ làm tăng tần suất giao dịch và chi phí điểm trượt.

  2. Rủi ro trong tình huống chấn động. Trong tình huống chấn động, dây cá mập sẽ liên tục giao nhau, tạo ra tín hiệu sai.

  3. Rủi ro quá tối ưu hóa. Việc tối ưu hóa tham số không đúng cách có thể dẫn đến đường cong quá phù hợp.

  4. Nguy cơ thất bại của chỉ số. Trong trường hợp thị trường cực đoan, dây cá có thể bị mất hiệu lực hoàn toàn.

  5. Rủi ro bị phá vỡ. Việc phá vỡ nhanh chóng có thể gây ra thiệt hại.

  6. Rủi ro của việc giao dịch quá thường xuyên. Việc giao dịch quá thường xuyên làm tăng chi phí giao dịch và mất điểm trượt không cần thiết.

Các rủi ro trên có thể được giảm thiểu bằng cách quản lý kỳ vọng, tối ưu hóa chiến lược dừng lỗ và kiểm soát tần suất giao dịch.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Kết hợp các chỉ số khác để lọc tín hiệu và tăng tỷ lệ thắng. Ví dụ: kết hợp các chỉ số mạnh như RSI.

  2. Thiết lập dừng động ATR để kiểm soát rủi ro mất mát đơn.

  3. Thêm mô-đun quản lý vị trí để tối ưu hóa quy mô mỗi lần mở vị trí. Bạn có thể tăng vị trí khi xu hướng rõ ràng hơn.

  4. Kết hợp các phương pháp phân tích kỹ thuật như hình dạng đồ họa để tăng độ chính xác của nhập học.

  5. Các tham số được tối ưu hóa theo loại thị trường ((thị trường chứng khoán, ngoại hối, v.v.) để phù hợp hơn với loại này.

  6. Thêm mô-đun học máy để thực hiện tối ưu hóa tùy chỉnh cho các tham số.

  7. Tính toán tỷ lệ thắng của Expectancy, tối ưu hóa tỷ lệ dừng lỗ.

Với sự cải tiến liên tục, chiến lược này có thể trở thành một chiến lược giao dịch đường ngắn ổn định.

Tóm tắt

Chiến lược này sử dụng Heiken Ashi kết hợp với chỉ số cá mập Bill Williams để tạo ra một chiến lược giao dịch ngắn có xác suất cao. Nó có các lợi thế như lọc kép chỉ số, thiết lập tham số đơn giản, cơ chế nhập và thoát rõ ràng, có thể nắm bắt hiệu quả các thay đổi xu hướng để giao dịch.

Mã nguồn chiến lược
/*backtest
start: 2022-09-18 00:00:00
end: 2023-09-24 00:00:00
period: 4d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © 03.freeman
//Scalping strategy based on Bill Williams Alligator technique but applied to heikin ashi candles
//This strategy has to be applied to standard candles and low time frames (1min to 5min)
//@version=4
strategy("Bill Williams Alligator improved", shorttitle="Scalping alligator",overlay=true)
//source = input(close)
useHA = input (true,"Use heikin ashi candle?")

// ----------MA calculation - ChartArt-------------
smoothinput = input(1, minval=1, maxval=5, title='Moving Average Calculation: (1=SMA), (2=EMA), (3=WMA), (4=Linear), (5=VWMA)')

calc_ma(src,l) => 
    smoothinput == 1 ? sma(src, l):smoothinput == 2 ? ema(src, l):smoothinput == 3 ? wma(src, l):smoothinput == 4 ? linreg(src, l,0):smoothinput == 5 ? vwma(src,l):na
//----------------------------------------------

heikinashi_close = security(heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_open = security(heikinashi(syminfo.tickerid), timeframe.period, open)
heikinashi_hl2 = security(heikinashi(syminfo.tickerid), timeframe.period, hl2)

direzione=heikinashi_close>heikinashi_open and heikinashi_close[1]>heikinashi_open[1]? 1 : heikinashi_close<heikinashi_open and heikinashi_close[1]<heikinashi_open[1]? -1 : 0

jawLength = input(13, minval=1, title="Jaw Length")
teethLength = input(8, minval=1, title="Teeth Length")
lipsLength = input(5, minval=1, title="Lips Length")
jawOffset = input(8, title="Jaw Offset")
teethOffset = input(5, title="Teeth Offset")
lipsOffset = input(3, title="Lips Offset")
jaw = calc_ma(heikinashi_hl2, jawLength)
teeth = calc_ma(heikinashi_hl2, teethLength)
lips = calc_ma(heikinashi_hl2, lipsLength)
plot(jaw, title="jaw",offset = jawOffset, color=#3BB3E4)
plot(teeth, title="teeth",offset = teethOffset, color=#FF006E)
plot(lips, title="lips",offset = lipsOffset, color=#36C711)

longCondition = direzione[0]==1 and jaw<teeth and jaw<lips and teeth<lips 
shortCondition = direzione[0]==-1 and jaw>teeth and jaw>lips and teeth>lips


//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => direzione[0]==1 and jaw<teeth and jaw<lips and teeth<lips // functions can be used to wrap up and work out complex conditions
exitLong() => jaw>teeth or jaw>lips or teeth>lips
strategy.entry(id = "Buy", long = true, when = enterLong() )    // use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = exitLong() )                  // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => direzione[0]==-1 and jaw>teeth and jaw>lips and teeth>lips
exitShort() => jaw<teeth or jaw<lips or teeth<lips
strategy.entry(id = "Sell", long = false, when = enterShort())
strategy.close(id = "Sell", when = exitShort() )

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()