Chiến lược giao dịch ô tô dựa trên STOCH

Tác giả:ChaoZhang, Ngày: 2023-09-28 11:38:44
Tags:

Chiến lược này thiết kế một hệ thống giao dịch tự động đơn giản dựa trên chỉ số STOCH. Nó phù hợp với ngoại hối, chỉ số chứng khoán, hàng hóa và có thể được mở rộng sang thị trường chứng khoán và tiền điện tử.

Tổng quan chiến lược

Chiến lược này xác định tình trạng mua quá mức và bán quá mức bằng cách sử dụng chỉ số STOCH kết hợp với các điểm PIVOT để thiết lập các vị trí dừng lỗ, nhận ra xu hướng sau. Nó đi dài hoặc ngắn khi chỉ số STOCH hiển thị các tín hiệu mua quá mức hoặc bán quá mức. Các điểm dừng lỗ được thiết lập gần các điểm PIVOT của ngày để kiểm soát rủi ro một cách hiệu quả. Các điểm lấy lợi nhuận một phần được thiết lập để đóng các vị trí một phần sau một mức lợi nhuận nhất định.

Chiến lược logic

Chiến lược này sử dụng sự giao thoa giữa các đường %K và %D của chỉ số STOCH để tạo ra tín hiệu dài và ngắn. Cụ thể, khi đường %K vượt qua trên đường %D, nó sẽ dài. Khi đường %K vượt qua dưới đường %D, nó sẽ ngắn. Điều này nắm bắt tình trạng mua quá mức và bán quá mức.

Để kiểm soát rủi ro, điểm dừng lỗ dài được đặt gần điểm PIVOT thấp nhất hàng ngày và điểm dừng lỗ ngắn được đặt gần điểm PIVOT cao nhất hàng ngày.

Đối với lợi nhuận một phần, nó đóng 50% vị trí sau một mức lợi nhuận nhất định sau khi mở vị trí.

Tóm lại, chiến lược này nắm bắt các điểm mua quá mức và bán quá mức một cách thích hợp; Kiểm soát rủi ro bằng cách dừng lỗ; và Tối ưu hóa hiệu quả sử dụng vốn.

Điểm mạnh của chiến lược

  • Sử dụng chỉ số STOCH có hiệu quả nắm bắt tình trạng mua quá mức và bán quá mức.

  • Cơ chế lấy lợi nhuận một phần tối ưu hóa hiệu quả sử dụng vốn.

  • Các tham số có thể tùy chỉnh cho phép linh hoạt dựa trên điều kiện thị trường và ưu tiên rủi ro.

  • Logic đơn giản và rõ ràng, dễ hiểu và làm chủ cho tất cả các thương nhân. mã sạch tạo điều kiện cho các sửa đổi và bảo trì.

Rủi ro chiến lược

  • Là một chiến lược theo xu hướng, nó có thể bị mắc kẹt trong các thị trường giới hạn và không thể kiếm lợi nhuận.

  • STOCH có thể tạo ra các tín hiệu sai, gây ra các giao dịch không cần thiết.

  • Khoảng cách dừng lỗ gần các điểm pivot có thể quá gần sau khi phá vỡ.

  • Một số thông số như thời gian có thể cần điều chỉnh cho các thị trường khác nhau, nếu không nó ảnh hưởng đến hiệu suất chiến lược.

  • Backtest chỉ dựa vào dữ liệu lịch sử, không thể đảm bảo hiệu suất trong tương lai.

  • Hệ thống giao dịch tự động đòi hỏi kết nối ổn định để tránh các vấn đề thực hiện giao dịch.

Tối ưu hóa chiến lược

  • Thêm bộ lọc xu hướng để tránh giao dịch mà không có xu hướng rõ ràng. chẳng hạn như sử dụng MA để xác định hướng xu hướng.

  • Thêm phân tích khối lượng để phát hiện các đột phá sai và tránh bẫy. ví dụ: khối lượng tăng / giảm.

  • Điều chỉnh các tham số như đầu vào STOCH dựa trên các sản phẩm và khung thời gian khác nhau để tối ưu hóa hiệu suất.

  • Hãy xem xét các thuật toán học máy để đào tạo các mô hình sử dụng dữ liệu lớn và tối ưu hóa các thông số tự động.

  • Đặt tỷ lệ nhân tố lợi nhuận để kiểm soát rủi ro và tránh thua lỗ lớn.

  • Thêm thêm các bộ lọc như điều kiện giao dịch, các nguyên tắc cơ bản để cải thiện tỷ lệ thắng.

Kết luận

Chiến lược này áp dụng một cách tiếp cận theo xu hướng đơn giản và trực quan dựa trên chỉ số STOCH để xác định các điểm mua quá mức / bán quá mức. Với PIVOT dừng lỗ để kiểm soát rủi ro và lấy lợi nhuận một phần để tối ưu hóa hiệu quả vốn. Thiết kế bao gồm nắm bắt, kiểm soát và tối ưu hóa. Logic đơn giản và có thể tùy chỉnh. Nhưng nó cũng có một số rủi ro và có thể được tối ưu hóa hơn nữa. Kiểm tra liên tục và cải tiến trong giao dịch trực tiếp là rất quan trọng cho lợi nhuận ổn định.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
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 - Forex, indices, commodities, stocks, crypto", commission_type=strategy.commission.cash_per_contract, commission_value=0.00003, overlay=false, default_qty_value=20000, initial_capital=1000)
//
// This script was created for educational purposes only.
// It is showing how to use Alerts-Straight-From-Strategies and
// dynamic variables in TradingView alerts.
// And how to auto-execute them in Forex, indices, commodities markets
// 
// (This method will also work with stocks and crypto - anything your 
// broker is offering via their MT4/MT5 platform).
 
TakeProfitLevel=input(400)
TakePartialProfitLevel=input(150)

// **** Entries logic **** {
periodK = input(13, title="K", minval=1)
periodD = input(3, title="D", minval=1)
smoothK = 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 and year>2009
GoShort=crossunder(k,d) and k>20 and year>2009

AlertTest=open>close or open<close or open==close
// } 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
// } End of Pivot-points and stop-loss logic

// **** Trade counter and partial closing mechanism **** {
var int trade_id=0
if GoLong or GoShort
    trade_id:=trade_id+1

TakePartialProfitLong = barssince(GoLong)<barssince(GoShort) and crossover(high,(valuewhen(GoLong,close,0)+TakePartialProfitLevel*syminfo.mintick))
TakePartialProfitShort = barssince(GoLong)>barssince(GoShort) and crossunder(low,(valuewhen(GoShort,close,0)-TakePartialProfitLevel*syminfo.mintick))
// } End of Trade counter and partial closing mechanism

strategy.entry("Long", strategy.long, when=GoLong)
strategy.exit("XPartLong", from_entry="Long", qty_percent=50, profit=TakePartialProfitLevel)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.entry("Short", strategy.short, when=GoShort)
strategy.exit("XPartShort", from_entry="Short", qty_percent=50, profit=TakePartialProfitLevel)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)

if GoLong
    alertsyntax_golong='long slprice=' + tostring(stoploss_long) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort='short slprice=' + tostring(stoploss_short) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if TakePartialProfitLong
    alertsyntax_closepartlong='closepart tradeid=' + tostring(trade_id) + ' part=0.5'
    alert(message=alertsyntax_closepartlong, freq=alert.freq_once_per_bar_close)
if TakePartialProfitShort
    alertsyntax_closepartshort='closepart tradeid=' + tostring(trade_id) + ' part=0.5'
    alert(message=alertsyntax_closepartshort, freq=alert.freq_once_per_bar_close)


Thêm nữa