Chiến lược đạn bạc dựa trên Box Breakout

Tác giả:ChaoZhang, Ngày: 2024-01-15 12:06:32
Tags:

img

Tổng quan

Chiến lược này chủ yếu phát hiện sự đột phá của hộp được hình thành bởi các điểm cao và thấp của đường K để đánh giá hướng và sức mạnh của thị trường. Khi có sự đột phá hộp tăng, chiến lược sẽ đặt một vị trí dài xung quanh điểm đột phá. Khi có sự đột phá hộp giảm, chiến lược sẽ đặt một vị trí ngắn xung quanh điểm đột phá. Một khi tín hiệu giao dịch được tạo ra, chiến lược sẽ đặt lệnh mở các vị trí và đặt dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro.

Chiến lược logic

  1. Chiến lược xác định một khoảng thời gian giao dịch và chỉ tìm kiếm các cơ hội giao dịch trong khoảng thời gian đó.

  2. Sau mỗi đường K hình thành, chiến lược đánh giá liệu có sự đột phá đáng kể giữa giá cao nhất và thấp nhất của hai đường K trước đó hay không.

    2.1 Nếu giá thấp nhất của đường K thứ hai cao hơn giá cao nhất của đường K thứ nhất, sẽ có sự đột phá hộp tăng.

    2.2 Nếu giá cao nhất của đường K thứ 2 thấp hơn giá thấp nhất của đường K thứ 1, sẽ có sự phá vỡ hộp giảm.

  3. Sau khi xác nhận tín hiệu phá vỡ hộp, chiến lược thiết lập một điểm đầu vào dài hoặc ngắn xung quanh giá cao nhất hoặc thấp nhất của đường K hiện tại.

  4. Một khi vị trí được mở, chiến lược thiết lập lợi nhuận dựa trên hai lần phạm vi đột phá để nắm bắt sự gia tăng xu hướng.

  5. Chiến lược cũng đặt mức dừng lỗ ở mức giá thấp nhất hoặc cao nhất của đường K thứ hai để giảm rủi ro mất mát.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. Lý thuyết rất đơn giản và dễ thực hiện.

  2. Sử dụng K-line box breakouts để đánh giá hướng và sức mạnh thị trường có độ chính xác cao.

  3. Các thiết lập lấy lợi nhuận nắm bắt các cơ hội từ tăng tốc xu hướng.

  4. Có một logic dừng lỗ rõ ràng để kiểm soát lỗ đơn.

  5. Ý tưởng chiến lược linh hoạt và có thể được tùy chỉnh theo phong cách cá nhân.

Phân tích rủi ro

Tuy nhiên, có một số rủi ro trong chiến lược:

  1. Các tín hiệu đột phá có thể là đột phá sai, tổn thất không thể tránh hoàn toàn.

  2. Việc dừng lỗ gần điểm vào có thể dễ dàng được kích hoạt bởi các thị trường hung hăng.

  3. Nó không thể đánh giá cấu trúc xu hướng và dừng có thể thường xuyên được kích hoạt trong các thị trường giới hạn phạm vi.

  4. Nó không xem xét tác động của các sản phẩm và thời gian khác nhau.

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

Để tối ưu hóa thêm chiến lược, chúng ta có thể cải thiện từ các khía cạnh sau:

  1. Thiết lập các tham số dừng lỗ thích nghi và lấy lợi nhuận cho các sản phẩm và khoảng thời gian khác nhau.

  2. Thêm các chỉ số kỹ thuật để đánh giá xu hướng để tránh bị mắc kẹt trong các thị trường giới hạn phạm vi.

  3. Thiết lập các cơ hội bổ sung tiếp theo để theo dõi xu hướng chạy.

  4. Kết hợp các chỉ số âm lượng để đánh giá tính xác thực của các tín hiệu đột phá và lọc.

  5. Thêm các thuật toán học máy để giúp xác định hướng xu hướng.

Tóm lại

Chiến lược này được thiết kế dựa trên nguyên tắc đột phá đơn giản để nắm bắt các chạy tăng tốc sau khi đột phá cho lợi nhuận vượt quá. Nó sử dụng dừng và lợi nhuận để kiểm soát rủi ro. Chiến lược dễ hiểu và thực hiện có thể được tùy chỉnh và tối ưu hóa theo nhu cầu cá nhân và môi trường thị trường, làm cho nó rất thực tế.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Dvitash

//@version=5
strategy("Casper SMC Silver Bullet", shorttitle = "Casper SB", overlay=true, calc_on_order_fills = true)

startTime = input(defval = "1000", title = "Start Time")
endTime = input(defval = "1600", title = "End Time")
contractAmt = input.int(defval = 2, title = "Contract Amount")
fvgCol = input.color(defval = color.rgb(63, 61, 179, 41), title = "FVG Color")
borderCol = input.color(defval = color.rgb(35, 33, 172, 41), title = "FVG Border Color")
fvgExtendLength = input.int(defval = 0, minval = 0, title = "FVG Extend Length")

allowedTime = not na(time(timeframe.period, startTime + "-" + endTime +":23456", "America/New_York"))
newDay = bool(ta.change(time('D')))
h = hour(time('1'), "America/New_York")

var bool fvgDrawn = na
var float entryPrice = na 
var float stopPrice = na 
var float tpPrice = na 

if newDay
    fvgDrawn := false
    // a_allBoxes = box.all
    // if array.size(a_allBoxes) > 0
    //     for i = 0 to array.size(a_allBoxes) - 1
    //         box.delete(array.get(a_allBoxes, i))

if allowedTime and barstate.isconfirmed and h <= 16
    //Long FVG
    if high[2] < low and not fvgDrawn
        // box.new(bar_index[2], low, bar_index + fvgExtendLength, high[2], bgcolor = fvgCol, border_color = borderCol)
        stopPrice := low[2]
        entryPrice := low
        tpPrice := entryPrice + (math.abs(low[2] - entryPrice) * 2)
        // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice))
        strategy.entry("long", strategy.long, contractAmt, limit = entryPrice, comment = "Long Entry")
        fvgDrawn := true

    if low[2] > high and not fvgDrawn
        // box.new(bar_index[2], high, bar_index + fvgExtendLength, low[2], bgcolor = fvgCol, border_color = borderCol)
        stopPrice := high[2]
        entryPrice := high
        tpPrice := entryPrice - (math.abs(high[2] - entryPrice) * 2)
        // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice))
        strategy.entry("short", strategy.short, contractAmt, limit = entryPrice, comment = "Short Entry")
        fvgDrawn := true
if h >= 16
    strategy.close_all()
    strategy.cancel_all()

strategy.exit("long exit", from_entry = "long", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Long Exit")
strategy.exit("short exit", from_entry = "short", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Short Exit")

Thêm nữa