Chiến lược giao dịch ngắn hạn dừng lỗ linh hoạt dựa trên chỉ báo Stochastic


Ngày tạo: 2023-09-28 10:45:41 sửa đổi lần cuối: 2023-09-28 10:45:41
sao chép: 0 Số nhấp chuột: 679
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ố dao động Stochastic để đánh giá tình trạng quá mua quá bán của thị trường, kết hợp với nguyên tắc dừng lỗ linh hoạt để thực hiện giao dịch ngắn hạn. Làm nhiều khi Gold Forks trên chỉ số Stochastic, làm trống khi Dead Forks, đồng thời thiết lập dừng弹性 dựa trên điểm trung tâm giai đoạn trước, đồng thời kiểm soát rủi ro trong khi đảm bảo lợi nhuận.

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

Nguyên tắc nhập cảnh

Stochastic oscillator chỉ số bao gồm% K đường và% D đường. Khi% K đường từ dưới lên phá vỡ% D đường, là tín hiệu Gold Fork, làm nhiều; khi% K đường từ trên xuống phá vỡ% D đường, là tín hiệu Dead Fork, làm trống.

Cụ thể, khi ngã gác chỉ số Stochastic, nếu đường K% nhỏ hơn 80 ((không quá mua), bạn sẽ làm nhiều hơn; khi ngã gác chỉ số Stochastic, nếu đường K% lớn hơn 20 ((không quá bán), bạn sẽ làm trống.

GoLong=crossover(k,d) and k<80 
GoShort=crossunder(k,d) and k>20

Nguyên tắc dừng lỗ

Chiến lược này sử dụng phương pháp dừng linh hoạt, đặt giá dừng dựa trên điểm trung tâm của giai đoạn trước, mã như sau:

piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)

stoploss_long=valuewhen(piv_low,piv_low,0) 
stoploss_short=valuewhen(piv_high,piv_high,0)

Các điểm trung tâm đại diện cho sự kháng cự hỗ trợ quan trọng, và nếu giá vượt qua các điểm trung tâm, bạn sẽ thoát khỏi vị trí, khiến giá dừng giảm theo sự thay đổi của các điểm trung tâm.

Ngoài ra, giá dừng lỗ cũng sẽ xem xét giá thấp nhất và cao nhất trong giai đoạn hiện tại để tối ưu hóa hơn nữa vị trí dừng lỗ, theo mã sau:

if GoLong 
    stoploss_long := low<pl ? low : pl
if GoShort  
    stoploss_short := high>ph ? high : ph   

Lợi thế chiến lược

  1. Sử dụng chỉ số Stochastic để đánh giá tình trạng quá mua và quá bán của thị trường, tránh theo đuổi giá cao và giá thấp.

  2. Ứng dụng nguyên tắc dừng lỗ linh hoạt, có thể tối ưu hóa vị trí dừng lỗ theo sự thay đổi của thị trường;

  3. Kết hợp các bước đột phá trọng tâm để thực hiện dừng lỗ và làm cho nó hiệu quả hơn;

  4. Cân nhắc tối ưu hóa dừng lỗ cho mức giá tối đa tối thiểu tại thời điểm đó, để dừng lỗ chính xác hơn.

Rủi ro và giải pháp

  1. Stochastic có nguy cơ phát ra tín hiệu sai

    • Giải pháp: Xác nhận kết hợp với các chỉ số khác để tránh sai lầm
  2. Rủi ro tăng lỗ do phá vỡ lệnh dừng lỗ

    • Giải pháp: Giảm khoảng cách dừng đúng cách, hoặc sử dụng phương pháp dừng như Chandelier Exit
  3. Rủi ro của việc giao dịch thường xuyên dẫn đến phí giao dịch tăng lên

    • Giải pháp: Giảm số lần giao dịch bằng cách nới lỏng các điều kiện tham gia

Tối ưu hóa tư duy

  1. Tối ưu hóa chiến lược dừng lỗ, như sử dụng Chandelier Exit, dừng di chuyển, dừng rung

  2. Tối ưu hóa điều kiện nhập cảnh, kết hợp với các chỉ số khác để tránh tín hiệu giả của chỉ số Stochastic

  3. Tối ưu hóa các phương pháp ngắt quãng, như sử dụng ngắt quãng di động, ngắt quãng dao động, để đạt được tỷ lệ lợi nhuận cao hơn

  4. Thêm quản lý vị trí, chẳng hạn như số lượng cố định mỗi đơn vị, tỷ lệ đầu tư cố định, để kiểm soát rủi ro đơn vị

  5. Thiết lập các tham số tối ưu hóa, chẳng hạn như số lần K, D, chu kỳ mài dũa, để điều chỉnh các tham số cho các thị trường khác nhau

Tóm tắt

Chiến lược này được sử dụng để đánh giá tình trạng mua bán quá mức thông qua chỉ số Stochastic và quản lý rủi ro bằng cách sử dụng phương pháp dừng lỗ linh hoạt. Chiến lược này có những lợi thế như tránh theo đuổi đà cao, dừng lỗ hiệu quả, nhưng cũng có một số rủi ro tín hiệu sai. Trong tương lai, chiến lược này có thể được cải thiện hơn nữa bằng cách tối ưu hóa điều kiện nhập cảnh, chiến lược dừng lỗ, phương pháp dừng lỗ và quản lý rủi ro.

Mã nguồn chiến lược
/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 2h
basePeriod: 15m
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/
// © Peter_O

//@version=4
//strategy(title="TradingView Alerts to MT4 MT5 example with cancelling pending orders", commission_type=strategy.commission.cash_per_order, commission_value=0.00003, overlay=true, default_qty_value=100000, initial_capital=1000)

// This script was created for educational purposes only.
// It is showing how to create pending orders and cancel them
// Together with syntax to send these events through TradingView alerts system
// All the way to brokers for execution

TakeProfitLevel=input(400)

// **** Entries logic **** {
periodK = 13 //input(13, title="K", minval=1)
periodD = 3 //input(3, title="D", minval=1)
smoothK = 4 //input(4, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
// plot(k, title="%K", color=color.blue)
// plot(d, title="%D", color=color.orange)
// h0 = hline(80)
// h1 = hline(20)
// fill(h0, h1, color=color.purple, transp=75)

GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20
// } End of entries logic

// **** Pivot-points and stop-loss logic **** {
piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)
var float stoploss_long=low
var float stoploss_short=high

pl=valuewhen(piv_low,piv_low,0)
ph=valuewhen(piv_high,piv_high,0)

if GoLong 
    stoploss_long := low<pl ? low : pl
if GoShort 
    stoploss_short := high>ph ? high : ph
plot(stoploss_long, color=color.lime, title="stoploss_long")
plot(stoploss_short, color=color.red, title="stoploss_short")
// } End of Pivot-points and stop-loss logic

CancelLong=crossunder(low,stoploss_long) and strategy.position_size[1]<=0 and strategy.position_size<=0
CancelShort=crossover(high,stoploss_short) and strategy.position_size[1]>=0 and strategy.position_size>=0
entry_distance=input(10, title="Entry distance for stop orders")

plotshape(CancelLong ? stoploss_long[1]-10*syminfo.mintick : na, location=location.absolute, style=shape.labelup, color=color.gray, textcolor=color.white, text="cancel\nlong", size=size.tiny)
plotshape(CancelShort ? stoploss_short[1]+10*syminfo.mintick : na, location=location.absolute, style=shape.labeldown, color=color.gray, textcolor=color.white, text="cancel\nshort", size=size.tiny)

strategy.entry("Long", strategy.long, when=GoLong, stop=close+entry_distance*syminfo.mintick)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.cancel("Long", when = CancelLong)
strategy.entry("Short", strategy.short, when=GoShort, stop=close-entry_distance*syminfo.mintick)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)
strategy.cancel("Short", when = CancelShort)

if GoLong
    alertsyntax_golong='long offset=' + tostring(entry_distance) + ' slprice=' + tostring(stoploss_long) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort='short offset=' + tostring(-entry_distance) + ' slprice=' + tostring(stoploss_short) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if CancelLong
    alertsyntax_cancellong='cancel long'
    alert(message=alertsyntax_cancellong, freq=alert.freq_once_per_bar_close)
if CancelShort
    alertsyntax_cancelshort='cancel short'
    alert(message=alertsyntax_cancelshort, freq=alert.freq_once_per_bar_close)