Quy tắc giao dịch hỗn loạn Chiến lược dừng lỗ


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

Quy tắc giao dịch hỗn loạn Chiến lược dừng lỗ

Tổng quan

Ý tưởng cốt lõi của chiến lược này dựa trên chiến lược RSI, thêm một số quy tắc quản lý giao dịch quan trọng, bao gồm dừng lỗ, dừng lỗ, theo dõi dừng lỗ và theo dõi lỗ đòn bẩy. Điều này cho phép chiến lược có thể thu được lợi nhuận cao hơn trong tình huống xu hướng trong thời gian phản hồi, trong khi giảm thiểu tổn thất trong tình huống xung đột.

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

Chiến lược này đầu tiên tính toán chỉ số RSI, mua nhiều khi RSI thấp hơn đường mua quá mức và mua ít khi RSI cao hơn đường bán quá mức.

Sau khi kích hoạt nhiều tín hiệu, hãy ghi lại giá cao nhất tại thời điểm đó làm điểm tham chiếu để theo dõi dừng. Nếu giá thấp hơn điểm dừng theo dõi trừ mức dừng, hãy dừng vị trí bằng phẳng.

Sau khi kích hoạt tín hiệu phá giá, hãy ghi lại mức giá thấp nhất tại thời điểm đó như là điểm tham chiếu để theo dõi dừng lỗ. Nếu giá cao hơn điểm dừng lỗ theo dõi cộng với mức dừng lỗ, hãy dừng vị trí bằng phẳng.

Đồng thời thiết lập dừng cố định và dừng lỗ. Nếu giá đạt đến khoảng cách dừng, hãy dừng thanh toán; Nếu đạt đến khoảng cách dừng, hãy dừng thanh toán.

Ngoài ra, theo thiết lập đòn bẩy theo dõi dừng chân đường. Nếu giá chạm vào đòn bẩy theo dõi dừng chân đường, thanh toán lỗ hổng.

Bằng cách theo dõi giá dừng tối đa khi xu hướng đi lên và giá dừng thấp nhất khi xu hướng đi xuống, kết hợp với khoảng cách dừng dừng cố định, bạn có thể có được lợi nhuận cao hơn trong tình huống xu hướng. Trong khi thiết lập dừng theo dõi đòn bẩy có thể tránh được sự gia tăng lỗ.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là việc đưa ra nhiều quy tắc quản lý giao dịch, trong khi sử dụng lợi thế của chiến lược RSI, có thể kiểm soát rủi ro tốt hơn.

Cụ thể, chiến lược này có những ưu điểm:

  1. Trong một xu hướng, theo dõi dừng lỗ có thể liên tục theo dõi xu hướng lợi nhuận, do đó thu được lợi nhuận cao hơn.

  2. Khoảng cách dừng lỗ cố định có thể khóa một phần lợi nhuận và tránh toàn bộ lợi nhuận bị giam giữ khi xu hướng đảo ngược.

  3. Theo dõi lỗ đòn bẩy có thể giúp tránh sự gia tăng tổn thất và kiểm soát rủi ro.

  4. Sự kết hợp của nhiều phương thức dừng lỗ có thể tạo ra những lợi thế riêng biệt trong các môi trường thị trường khác nhau, làm tăng sự ổn định của chiến lược nói chung.

  5. Các tham số chiến lược có thể được điều chỉnh linh hoạt để phù hợp với các loại giao dịch và môi trường thị trường khác nhau.

  6. Lập luận chiến lược rõ ràng và dễ hiểu, dễ xác minh, tối ưu hóa và áp dụng.

Phân tích rủi ro

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

  1. Chiến lược RSI tự nó có một số rủi ro giao dịch sai, có thể xảy ra trường hợp dừng lỗ được kích hoạt. Nó có thể được tối ưu hóa bằng cách điều chỉnh các tham số RSI.

  2. Các cơn động đất gần điểm dừng có thể thường xuyên kích hoạt dừng. Bạn có thể mở rộng khoảng cách dừng để tránh.

  3. Khoảng cách dừng không thể hoàn toàn khóa lợi nhuận trong tình trạng xu hướng. Có thể kết hợp với các chỉ số khác để xác định thời gian kết thúc xu hướng.

  4. Khoảng cách dừng cố định có thể quá nhỏ và không thể tránh hoàn toàn tổn thất. Có thể xem xét sử dụng dừng rung hoặc dừng động.

  5. Mức độ đòn bẩy quá cao có thể dẫn đến việc đòn bẩy theo dõi lỗ dừng quá gần với giá mở. Cần giảm mức độ đòn bẩy thích hợp.

  6. Phạm vi thời gian phản hồi không thể hoàn toàn đại diện cho thị trường trong tương lai. Bạn nên kiểm soát rủi ro và xác minh hiệu quả của các khoảng thời gian khác nhau.

Những rủi ro trên có thể được giảm bớt bằng cách điều chỉnh các tham số, tối ưu hóa cơ chế dừng lỗ và kiểm soát rủi ro. Tuy nhiên, không có chiến lược nào có thể hoàn toàn tránh được rủi ro thị trường, cần kiểm soát rủi ro.

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

Chiến lược này có thể được tối ưu hóa hơn nữa theo một số hướng sau:

  1. Tối ưu hóa các tham số RSI, giảm khả năng giao dịch sai. Có thể thử nghiệm các tham số tốt nhất cho các thị trường khác nhau.

  2. Thử các chỉ số khác để xác định thời gian nhập cảnh, như KD, MACD, v.v., kết hợp với RSI để tạo ra nhiều bộ lọc.

  3. Sử dụng các phương pháp học máy và các phương pháp khác để tối ưu hóa các tham số dừng lỗ động.

  4. Hãy thử các phương pháp dừng phức tạp hơn, chẳng hạn như dừng dao động, dừng trung bình, dừng động.

  5. Tối ưu hóa thiết lập mức độ đòn bẩy, ảnh hưởng của các đòn bẩy khác nhau đến lợi nhuận và kiểm soát rủi ro.

  6. Tự động điều chỉnh các tham số theo môi trường thị trường thay đổi, chẳng hạn như α-Dual Thrust.

  7. Kết hợp với các yếu tố khác để đánh giá tính bền vững của xu hướng, chẳng hạn như năng lượng khối lượng giao dịch.

  8. Sử dụng các công nghệ như Deep Learning để phát triển các phương pháp dừng lỗ ổn định và có thể giải thích được.

  9. Kiểm tra dữ liệu của các giống và giai đoạn khác nhau để đánh giá tính bền vững của chiến lược.

Tóm tắt

Chiến lược này được xây dựng dựa trên chiến lược RSI để tăng nhiều phương thức dừng lỗ, thực hiện đầy đủ vai trò kép của dừng lỗ trong lợi nhuận và kiểm soát rủi ro của xu hướng. Có rất nhiều không gian để tối ưu hóa chiến lược, có thể bắt đầu từ nhiều khía cạnh để tăng lợi thế chiến lược và giảm rủi ro.

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

//@version=2
strategy("Adding some essential components to a prebuilt RSI strategy", overlay=true)

/////////////// Component Code Start ///////////////
testStartYear = input(2011, "Backtest Start Year") 
testStartMonth = input(8, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2016, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(29, "Backtest Stop Day")
// testStopDay = testStartDay + 1
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
/////////////// Component Code Stop ///////////////

///////////// RSI component /////////////
length = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close

vrsi = rsi(price, length)
notna = not na(vrsi)

/////////////// STRATEGY ///////////////
ts = input(99999, "Trailing Stop") / 100
tp = input(99999, "Take Profit") / 100
sl = input(99999, "Stop Loss") / 100

long = notna and crossover(vrsi, overSold)
short = notna and crossunder(vrsi, overBought)

last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = long_signal ? time : nz(last_long_signal[1])
last_short_signal = short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low = not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

long_ts = not na(last_high) and high <= (last_high - ts) //and high >= last_open_long_signal
short_ts = not na(last_low) and low >= (last_low + ts) //and low <= last_open_short_signal

long_tp = high >= (last_open_long_signal + tp)
short_tp = low <= (last_open_short_signal - tp)

long_sl = low <= (last_open_long_signal - sl)
short_sl = high >= (last_open_short_signal + sl)

leverage = input(200, "Leverage")
long_call = last_open_long_signal - (0.8 + 0.2 * (1/leverage)) / leverage * last_open_long_signal
short_call = last_open_short_signal + (0.78 + 0.2 * (1/leverage)) / leverage * last_open_short_signal
long_call_signal = low <= long_call
short_call_signal = high >= short_call

if testPeriod()
    strategy.entry("Long", strategy.long, when=long_signal)
    strategy.entry("Short", strategy.short, when=short_signal)

    // plot(long_call, color=red)
    // plot(short_call, color=green)
    strategy.close("Long", when=long_call_signal)
    strategy.close("Short", when=short_call_signal)
    strategy.close("Long", when=long_tp)
    strategy.close("Short", when=short_tp)
    strategy.close("Long", when=long_sl)
    strategy.close("Short", when=short_sl)
    strategy.close("Long", when=long_ts)
    strategy.close("Short", when=short_ts)