Di chuyển chiến lược dừng lỗ dựa trên điểm lấy lợi nhuận và dừng lỗ

Tác giả:ChaoZhang, Ngày: 2024-01-11 11:04:57
Tags:

img

Tổng quan

Ý tưởng cốt lõi của chiến lược này là sử dụng sự chéo chéo của EMA và WMA làm tín hiệu đầu vào và kết hợp lấy lợi nhuận và dừng lỗ dựa trên tính toán điểm cho giao dịch. Ưu điểm lớn nhất của nó là nó có thể kiểm soát rủi ro rất linh hoạt và chính xác bằng cách điều chỉnh số điểm để kiểm soát phạm vi lấy lợi nhuận và dừng lỗ.

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

Khi EMA vượt qua WMA lên, một tín hiệu dài sẽ được tạo ra. Khi EMA vượt qua WMA xuống, một tín hiệu ngắn sẽ được tạo ra. Sau khi nhập vị trí, giá nhập sẽ được tính toán trong thời gian thực, và dừng lỗ và lấy lợi nhuận sẽ được thiết lập dựa trên đó. Ví dụ, đặt dừng lỗ đến 20 điểm và lấy lợi nhuận đến 100 điểm, sau đó giá dừng lỗ cụ thể sẽ là giá nhập trừ 20 điểm * giá trị hợp đồng, và lấy lợi nhuận sẽ là giá nhập cộng 100 điểm * giá trị hợp đồng. Đây là cách kiểm soát rủi ro và lợi nhuận.

Đồng thời, chiến lược cũng sẽ kết hợp giá thị trường hiện tại với mức dừng lỗ lịch sử để điều chỉnh vị trí dừng lỗ chuyển động và nhận ra mức dừng lỗ cuối cùng.

Phân tích lợi thế

So với các điểm cố định hoặc tỷ lệ stop loss, lợi thế lớn nhất của chiến lược này là nó có thể kiểm soát rủi ro rất linh hoạt và chính xác. Bằng cách điều chỉnh số điểm, kích thước stop loss có thể bị ảnh hưởng trực tiếp. Điều này áp dụng rất tốt cho các loại khác nhau và các tham số có thể được điều chỉnh chi tiết dựa trên tần suất và kích thước biến động của thị trường.

Ngoài ra, trailing stop loss cũng là một chức năng rất thực tế. Nó có thể theo dõi và điều chỉnh vị trí stop loss dựa trên những thay đổi thị trường thời gian thực, trong khi đảm bảo kiểm soát rủi ro và tối đa hóa lợi nhuận có thể.

Phân tích rủi ro

Các rủi ro chính của chiến lược này đến từ chính các chỉ số EMA và WMA. Khi có sự chuyển động mạnh mẽ của thị trường, chúng thường đưa ra các tín hiệu sai, dễ dàng dẫn đến dừng lỗ. Trong trường hợp này, nên giảm bớt số điểm dừng lỗ hoặc xem xét thay thế các kết hợp chỉ số khác.

Một điểm rủi ro khác là rất khó để cân bằng dừng lỗ và lấy lợi nhuận. Theo đuổi lợi nhuận cao hơn thường đòi hỏi phải thực hiện những rủi ro lớn hơn, điều này có thể dễ dàng dẫn đến dừng lỗ khi thị trường quay. Do đó, cấu hình dừng lỗ và lấy lợi nhuận cần kiểm tra và đánh giá cẩn thận.

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

Chiến lược này có thể được tối ưu hóa trong các khía cạnh sau:

  1. Kiểm tra các kết hợp tham số khác nhau của EMA và WMA để tìm ra một tối ưu;
  2. Hãy thử các chỉ số khác như MACD, KDJ vv để thay thế hoặc kết hợp, và xem liệu tỷ lệ thắng có thể được cải thiện không;
  3. Đánh giá lợi nhuận rủi ro của các cấu hình điểm khác nhau để dừng lỗ và lấy lợi nhuận và tìm ra cài đặt tối ưu;
  4. Nghiên cứu các đặc điểm của các giống khác nhau và điều chỉnh các tham số để thích nghi với các thị trường khác nhau;
  5. Kết hợp các thuật toán học máy để nhận ra tối ưu hóa động của các thông số.

Kết luận

Ý tưởng cốt lõi của chiến lược này rất đơn giản và rõ ràng, sử dụng EMA và WMA làm cơ sở, và sử dụng cơ chế dừng lỗ dựa trên điểm và lấy lợi nhuận để kiểm soát rủi ro. Ưu điểm của chiến lược nằm trong kiểm soát rủi ro chính xác và linh hoạt, có thể được điều chỉnh cho các thị trường khác nhau.


/*backtest
start: 2024-01-03 00:00:00
end: 2024-01-10 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// inspiration script from: @ahmad_naquib
// inspiration script link: https://www.tradingview.com/script/tGTV8MkY-Two-Take-Profits-and-Two-Stop-Loss/
// inspiration strategy script name: Two Take Profits and Two Stop Loss


////////////
// Do not use this strategy, it's just an exmaple !! The goal from this script is to show you TP and SL based on PIPS
////////////


//@version=5
strategy('SL & TP based on Pips', "PIP SL & TP", overlay=true, initial_capital=1000)

// MA
ema_period = input(title='EMA period', defval=10)
wma_period = input(title='WMA period', defval=20)
ema = ta.ema(close, ema_period)
wma = ta.wma(close, wma_period)

// Entry Conditions
long = ta.crossover(ema, wma) and nz(strategy.position_size) == 0
short = ta.crossunder(ema, wma) and nz(strategy.position_size) == 0

// Pips Calculation
pip1 = input(20, title = "TP PIP", group = "PIP CALCULATION") * 10 * syminfo.mintick
pip2 = input(20, title = "SL PIP", group = "PIP CALCULATION") * 10 * syminfo.mintick

// Trading parameters 
var bool LS = na
var bool SS = na

var float EP = na // Entry Position
var float TVL = na
var float TVS = na
var float TSL = na
var float TSS = na

var float TP1 = na
//var float TP2 = na
var float SL1 = na
///var float SL2 = na

// SL & TP Values
// there's also SL2 and TP2 in case you want to add them to your script, 
//also you can add a break event in the strategy.entry section.

if short or long and strategy.position_size == 0
    EP := close
    SL1 := EP - pip2 * (short ? -1 : 1)
    //SL2 := EP - pip2 * (short ? -1 : 1)
    
    TP1 := EP + pip1 * (short ? -1 : 1)
    //TP2 := EP + pip1 * 2 * (short ? -1 : 1)


// current trade direction    
LS := long or strategy.position_size > 0
SS := short or strategy.position_size < 0

// adjust trade parameters and trailing stop calculations
TVL := math.max(TP1, open) - pip1[1]
TVS := math.min(TP1, open) + pip1[1]
TSL := open[1] > TSL[1] ? math.max(TVL, TSL[1]) : TVL
TSS := open[1] < TSS[1] ? math.min(TVS, TSS[1]) : TVS

//if LS and high > TP1
    //if open <= TP1
        //SL2 := math.min(EP, TSL)

//if SS and low < TP1
    //if open >= TP1
        //SL2 := math.max(EP, TSS)


// Closing conditions
// and those are a closing conditions in case you want to add them.

//close_long = LS and open < SL2
//close_short = SS and open > SL2

// Buy
if (long and not SS)
    strategy.entry('buy', strategy.long)
strategy.exit('exit1', from_entry='buy', stop=SL1, limit=TP1, qty_percent=100)
//strategy.exit('exit2', from_entry='buy', stop=SL2, limit=TP2)

// Sell
if (short and not LS)
    strategy.entry('sell', strategy.short)
strategy.exit('exit3', from_entry='sell', stop=SL1, limit=TP1, qty_percent=100)
//strategy.exit('exit4', from_entry='sell', stop=SL2, limit=TP2)

// Plots
// those are plots for the lines of The tp and sl. they are really useful, and in the next update I will use a filling option.

a = plot(strategy.position_size > 0 ? SL1 : na, color=color.new(#af0829, 30), linewidth = 2, style=plot.style_linebr)
b = plot(strategy.position_size < 0 ? SL1 : na, color=color.new(#af0829, 30), linewidth = 2, style=plot.style_linebr)

c = plot(strategy.position_size > 0 ? TP1 : na, color=color.new(#2e7e00, 30), linewidth = 2, style=plot.style_linebr)
d = plot(strategy.position_size < 0 ? TP1 : na, color=color.new(#2e7e00, 30), linewidth = 2, style=plot.style_linebr)

g = plot(strategy.position_size >= 0 ? na : EP, color=color.new(#ffffff, 50), style=plot.style_linebr)
h = plot(strategy.position_size <= 0 ? na : EP, color=color.new(#ffffff, 50), style=plot.style_linebr)


// those are plot for the TP2 and SL2, they are optional if you want to add them.

//e = plot(strategy.position_size > 0 ? TP2 : na, color=color.new(#00ced1, 0), style=plot.style_linebr)
//f = plot(strategy.position_size < 0 ? TP2 : na, color=color.new(#00ced1, 0), style=plot.style_linebr)


//those are the plot for the ema and wma strategy for short and long signal. they are not really a good strategy, I just used them as an example
//but you have the option to plot them or not.
// do not use this strategy, it's just an exmaple !! The goal from this script is to show you TP and SL based on PIPS

//plot(ema, title='ema', color=color.new(#fff176, 0))
//plot(wma, title='wma', color=color.new(#00ced1, 0))

Thêm nữa