Chiến lược đột phá Double Turtle


Ngày tạo: 2023-11-28 16:25:41 sửa đổi lần cuối: 2023-11-28 16:25:41
sao chép: 0 Số nhấp chuột: 689
1
tập trung vào
1619
Người theo dõi

Chiến lược đột phá Double Turtle

Tổng quan

Chiến lược phá vỡ hai bờ biển kết hợp chiến lược phá vỡ của luật giao dịch bờ biển và nguyên tắc dừng chân di động của Linda Raschke, với khả năng phá vỡ tuyệt vời và kiểm soát rủi ro nghiêm ngặt. Chiến lược này đồng thời theo dõi sự phá vỡ lên và xuống của giá, thiết lập vị trí mua hoặc bán khi phá vỡ xảy ra và sử dụng vị trí quản lý dừng chân di động và dừng chân di động.

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

Logic cốt lõi là tháo lỗ khi phá vỡ chu kỳ nhỏ ở mức cao của chu kỳ lớn, và tháo lỗ khi phá vỡ chu kỳ nhỏ ở mức thấp của chu kỳ lớn. Sau khi đặt vị trí, đặt dừng di chuyển và dừng di chuyển, trước tiên xác nhận rủi ro. Khi số lượng vị trí tích lũy đến số lượng dừng được đặt, hãy hủy lệnh dừng trong chu kỳ tiếp theo, sau đó ra khỏi vị trí và đặt dừng di chuyển và dừng di chuyển để khóa lợi nhuận và theo dõi chênh lệch giá.

Bước đi cụ thể là:

  1. Tính toán chu kỳ lớn ((20 chu kỳ) cao điểm prevHigh và chu kỳ nhỏ ((4 chu kỳ) cao điểm smallPeriodHigh。
  2. Khi giá cao của dòng K mới nhất lớn hơn giá cao trước và giá cao trước lớn hơn giá cao chu kỳ nhỏ, điều này cho thấy giá cao chu kỳ lớn đã vượt qua giá cao chu kỳ nhỏ. Nếu không có vị trí, thì vị trí sẽ trống.
  3. Thiết lập dừng di chuyển sau khi xây dựng kho, hủy lệnh dừng sau khi đảo ngược vị trí để ngăn chặn lỗ.
  4. Khi số lượng các vị trí nắm giữ đạt đến số lượng các chu kỳ dừng di động được thiết lập (giờ là 0 chu kỳ), hãy ra một nửa vị trí trong chu kỳ tiếp theo và thiết lập các lệnh dừng di động và dừng di động, theo dõi chênh lệch giá và khóa lợi nhuận.
  5. Đối với đột phá của điểm thấp, tương tự như vậy, dựa trên mối quan hệ đột phá của thời kỳ thấp lớn và thời kỳ thấp nhỏ để xây dựng nhiều vị trí.

Phân tích lợi thế

Đây là một chiến lược đột phá toàn diện với những ưu điểm sau:

  1. Kết hợp với phương pháp giao dịch hai chu kỳ, nó có thể xác định hiệu quả các tín hiệu đột phá.
  2. Sử dụng các công nghệ dừng di động và dừng di động để kiểm soát rủi ro nghiêm ngặt và tránh thua lỗ lớn.
  3. Trong một trận đấu có hai lần, một lần dừng bán một nửa, và sau đó dừng toàn bộ bằng cách di chuyển, khóa lợi nhuận.
  4. Điều này phù hợp với các đặc điểm của thị trường trao đổi nhiều không gian.
  5. Hiệu quả phản hồi tuyệt vời, có khả năng thực hiện đĩa cứng mạnh mẽ.

Phân tích rủi ro

Các rủi ro và biện pháp ứng phó chính là:

  1. Rủi ro phá vỡ giả. Các tham số chu kỳ nên được điều chỉnh thích hợp để đảm bảo tính hiệu quả của phá vỡ.
  2. Theo đuổi rủi ro giảm. Trình lọc nên được thực hiện kết hợp với xu hướng và hình thức, tránh đặt cược vào cuối xu hướng.
  3. Giảm lỗ có thể được mở rộng một cách thích hợp để đảm bảo có đủ không gian.
  4. Rủi ro dừng di động quá nhạy cảm. Cần điều chỉnh cài đặt điểm trượt sau khi dừng để tránh dừng không cần thiết.

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

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

  1. Tăng lượng giao dịch bằng các bộ lọc đột phá để đảm bảo tính xác thực của đột phá.
  2. Tham gia các chỉ số đánh giá xu hướng, tránh đặt cược vào cuối xu hướng.
  3. Kết hợp nhiều chu kỳ thời gian để đánh giá thời gian đột phá.
  4. Thêm thuật toán học máy, tham số tối ưu hóa động.
  5. Kết hợp các chiến lược khác, thực hiện đánh giá thống kê.

Tóm tắt

Chiến lược phá vỡ hai bờ biển sử dụng tổng hợp kỹ thuật hai chu kỳ, lý thuyết phá vỡ và phương pháp quản lý rủi ro nghiêm ngặt, trong khi vẫn giữ tỷ lệ thắng cao cũng đảm bảo sự ổn định của thu nhập. Mô hình chiến lược đơn giản, rõ ràng, dễ hiểu và áp dụng, là một chiến lược định lượng rất tốt. Chiến lược này cũng có rất nhiều không gian tối ưu hóa, nhà đầu tư có thể đổi mới trên cơ sở này để tạo ra một hệ thống giao dịch tốt hơn.

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

//@version=3
strategy(title = "Turtle soup plus one", shorttitle = "Turtle soup plus one", overlay=true)

bigPeriod = input(20)
smallPeriod = input(4)
takeProfitBars = input(0)
trailingStop = input(5, title = "Trailing stop percentages")
if (strategy.position_size == 0)
    strategy.cancel("Long")
    strategy.cancel("Short")
    strategy.cancel("Stop")



stopLossPrice = 0.1
stopLossPrice := nz(stopLossPrice[1])
takeProfitStarted = false
takeProfitStarted := nz(takeProfitStarted[1])

prevHigh = highest(high, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodHigh = highest(high, smallPeriod - 1)[1]
if (high > prevHigh and prevHigh > smallPeriodHigh and close > prevHigh and strategy.position_size == 0)
    strategy.order("Short", strategy.short, stop = prevHigh)

if strategy.position_size < 0 and strategy.position_size[1] == 0
    stopLossPrice := high[1]
    strategy.order("Stop", strategy.long, qty = -strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size < 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close < strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.long, qty = ceil(-strategy.position_size / 2), stop = close)
    if (strategy.position_size != -1)
        strategy.exit("ExitFull", "Short", qty = -strategy.position_size - ceil(-strategy.position_size / 2), loss = stopLossPrice, trail_price  = close, trail_offset = -(close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)
        

prevLow = lowest(low, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodLow = lowest(low, smallPeriod - 1)[1]
if (low < prevLow and prevLow < smallPeriodLow and close < prevLow and strategy.position_size == 0)
    strategy.order("Long", strategy.long, stop = prevLow)

if strategy.position_size > 0 and strategy.position_size[1] == 0
    stopLossPrice := low[1]
    strategy.order("Stop", strategy.short, qty = strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size > 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close > strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.short, qty = ceil(strategy.position_size / 2), stop = close)
    if (strategy.position_size != 1)
        strategy.exit("ExitFull", "Long", qty = strategy.position_size - ceil(strategy.position_size / 2),loss = stopLossPrice, trail_price  = close, trail_offset = (close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2038, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()