Chiến lược Trailing Stop theo đà giá


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

Chiến lược Trailing Stop theo đà giá

Tổng quan

Chiến lược này bằng cách tính toán các chỉ số động lực của giá cả, thiết lập dài và ngắn theo dõi hai chiều dừng để khóa lợi nhuận, do đó có thể thực hiện theo dõi xu hướng dừng. Chiến lược này kết hợp với mức kích hoạt, bắt đầu theo dõi dừng chỉ sau khi đạt được lợi nhuận chỉ định, có thể ngăn chặn hiệu quả dừng quá sớm.

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

Tính năng 12 chu kỳ của giá, sau đó tính động lực 1 chu kỳ của động lực. Khi động lực nhanh ( động lực 1 chu kỳ của động lực giá) lớn hơn 0 thì làm nhiều, nhỏ hơn 0 thì làm trống. Như vậy, bạn có thể xác định hướng thay đổi động lực giá, nắm bắt xu hướng giá.

Thiết lập khoảng cách theo dõi dừng lỗ và mức kích hoạt dừng lỗ theo dõi. Khoảng cách theo dõi dừng lỗ là khi giá chạy đến một mức cao hoặc thấp mới, điều chỉnh dừng lỗ đến khoảng cách được chỉ định.

Chiến lược này khóa lợi nhuận bằng cách theo dõi giá cao nhất hoặc giá thấp nhất, và phát ra tín hiệu yên khi giá giảm vượt quá khoảng cách dừng lỗ được đặt.

Phân tích lợi thế chiến lược

  1. Sử dụng phân tích động lượng kép, bạn có thể xác định chính xác hướng xu hướng giá, giảm số lần giao dịch và tránh bị đặt cược.

  2. Có thể thiết lập linh hoạt để theo dõi khoảng cách dừng lỗ, giảm rủi ro, khóa lợi nhuận.

  3. Có thể thiết lập mức kích hoạt dừng lỗ theo dõi, chỉ khởi động cơ chế dừng lỗ khi đạt được một số lợi nhuận nhất định, tránh dừng lỗ sớm.

  4. Có thể thiết lập mức độ dừng của đầu nhiều đầu và đầu trống đồng thời, kiểm soát toàn bộ rủi ro.

  5. Quá trình tính toán đơn giản, hiệu quả, dễ hiểu và thực hiện.

Phân tích rủi ro chiến lược

  1. Đánh giá động lượng kép có thể dẫn đến tín hiệu đảo ngược, cần kết hợp lọc xu hướng.

  2. Thiết lập khoảng cách dừng quá lớn có thể gây ra tổn thất đáng kể.

  3. Cài đặt mức kích hoạt quá cao có thể bỏ lỡ cơ hội dừng lỗ.

  4. Cần nhiều thử nghiệm và tối ưu hóa tham số hơn để tìm điểm dừng tối ưu.

Có thể giảm tín hiệu sai bằng cách đánh giá xu hướng và tối ưu hóa tham số. Thử nghiệm các hợp đồng và cài đặt tham số khác nhau để tìm cấu hình tối ưu.

Hướng tối ưu hóa chiến lược

  1. Kết hợp với các chỉ số nhận diện cấu trúc thị trường, xác định xu hướng dư thừa và tránh giao dịch ngược.

  2. Thêm thêm các điều kiện thời gian, chẳng hạn như thay đổi khối lượng giao dịch, phá vỡ khối lượng, để tăng độ chính xác của tín hiệu.

  3. Tối ưu hóa tham số, thử nghiệm hiệu suất với khoảng cách dừng và mức kích hoạt khác nhau.

  4. Xem xét động theo dõi khoảng cách dừng lỗ, tự động điều chỉnh theo biến động thị trường.

  5. Có thể thiết lập dừng một phần hoặc dừng di chuyển để kiểm soát rủi ro hơn nữa.

Tóm tắt

Cấu trúc tổng thể của chiến lược này rõ ràng, đánh giá xu hướng giá thông qua chỉ số động lực kép, thiết lập dừng chân theo dõi linh hoạt để khóa lợi nhuận, có thể kiểm soát rủi ro giao dịch hiệu quả. Chiến lược dễ hiểu và thực hiện, đồng thời có không gian để tối ưu hóa, thêm nhiều chỉ số kỹ thuật và kiểm tra tham số có thể nâng cao hơn nữa hiệu suất chiến lược. Chiến lược này có thể cung cấp tư duy và tham khảo để thực hiện quản lý dừng lỗ.

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

//@version=5
strategy("Trailing Stop Snippet", overlay=true)

length = input(12)
price = close
momentum(seria, length) =>
	mom = seria - seria[length]
	mom
mom0 = momentum(price, length)
mom1 = momentum( mom0, 1)

tsact = input.float(0.0, "Trailing Stop Activation |", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop |", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na

in_long = strategy.position_size > 0
in_short = strategy.position_size < 0

var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0

if in_long
    if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
    if not tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
if in_short
    if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    if not tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    
trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na

if (mom0 > 0 and mom1 > 0)
	strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
	strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
	strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
	strategy.cancel("MomSE")

tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail    
    strategy.close_all()
if not strategy.opentrades
	array.clear(ts_)

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)