Chiến lược dừng lỗ hai giai đoạn


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

Chiến lược dừng lỗ hai giai đoạn

Tổng quan

Ý tưởng chính của chiến lược này là thiết lập hai điểm dừng, khi điểm dừng đầu tiên được kích hoạt, điểm dừng sẽ được di chuyển đến giá vào cửa, để ngăn chặn việc dừng bị chặn.

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

Chiến lược này dựa trên các chỉ số Bollinger Bands và Stochastic Indicators. Khi giá vượt qua Bollinger Bands, bạn sẽ thả lỗ, và khi Stochastic Indicators cho thấy oversold, bạn sẽ thả lỗ.

Trong khi đó, các chiến lược tiếp cận của chúng tôi là:

  1. Thêm vào khi giá đóng cửa thấp hơn Brin và Stochastic K đi qua D

  2. Khi giá đóng cửa cao hơn Brin Belt và Stochastic K trên đường đi qua đường D để mở cửa

Chiến lược này đặt hai điểm dừng, điểm dừng đầu tiên được cố định là 200 điểm và điểm dừng thứ hai được cố định là 500 điểm.

Khi điểm dừng đầu tiên trong quá trình di chuyển giá được kích hoạt, chiến lược này sẽ di chuyển điểm dừng sang giá nhập. Điều này có thể khóa lợi nhuận trong giai đoạn đầu tiên, đồng thời ngăn chặn lỗ hổng bị chi phối bởi biến động giá.

Khi điểm dừng thứ hai được kích hoạt hoặc điểm dừng lỗ được kích hoạt, chiến lược này sẽ hoàn toàn thanh toán.

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

Ưu điểm lớn nhất của chiến lược dừng lỗ hai giai đoạn này là nó có thể khóa lợi nhuận, đồng thời ngăn chặn dừng lỗ bị chiết khấu bởi biến động giá. Bằng cách di chuyển điểm dừng lỗ đến giá nhập, bạn có thể làm giảm khả năng bị chiết khấu bởi dừng lỗ, bảo vệ lợi nhuận.

Một lợi thế khác là chiến lược này sử dụng một chiến lược kết hợp của chỉ số Bollinger Bands để xác định phạm vi biến động giá và chỉ số Stochastic để xác định mức mua quá mức, hai chỉ số này bổ sung cho nhau để cải thiện độ chính xác của việc tham gia.

Rủi ro chiến lược

Rủi ro chính của chiến lược này là cả chỉ số Brin và Stochastic đều có thể tạo ra tín hiệu sai. Nếu tính toán phạm vi Brin sai, sẽ dẫn đến thời gian nhập cảnh bị lỗi hoặc tạo ra tín hiệu sai. Nếu chỉ số Stochastic tạo ra đột phá sai, cũng sẽ dẫn đến nhập cảnh sai.

Ngoài ra, điểm dừng chuyển sang giá vào cửa cũng có nguy cơ bị phá giá một lần nữa. Nếu thị trường có sự đảo ngược kiểu V, điểm dừng có thể được kích hoạt lần thứ hai.

Để giảm thiểu những rủi ro này, các tham số Brin có thể được điều chỉnh, tối ưu hóa các tham số chỉ số Stochastic và tăng khoảng cách điểm dừng thích hợp.

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

Chiến lược dừng lỗ hai giai đoạn này có thể được tối ưu hóa hơn nữa:

  1. Bạn có thể thử nghiệm các tổ hợp tham số khác nhau, tối ưu hóa tham số Brin và tham số Stochastic, tìm ra tổ hợp tham số tối ưu nhất.

  2. Có thể thử nghiệm các thiết lập điểm dừng khác nhau, tối ưu kích thước điểm dừng và tìm cấu hình tối ưu.

  3. Các chỉ số khác có thể được thêm vào, chẳng hạn như trung bình di chuyển, để tạo ra một chiến lược kết hợp nhiều chỉ số, tăng độ chính xác của nhập cảnh.

  4. Các logic di chuyển điểm dừng khác nhau có thể được nghiên cứu, chẳng hạn như di chuyển ra ngoài một khoảng cách nhất định, thay vì giá vào.

  5. Bạn có thể tăng số lần di chuyển điểm dừng, thiết lập di chuyển dừng ba hoặc nhiều giai đoạn.

Tóm tắt

Chiến lược này sử dụng chỉ số Brin và chỉ số Stochastic để xác định thời gian vào thị trường, thiết lập hai điểm dừng, di chuyển điểm dừng đến giá vào thị trường sau khi đạt đến điểm dừng đầu tiên, tạo thành chiến lược dừng lỗ hai giai đoạn. Chiến lược này có thể khóa lợi nhuận một cách hiệu quả và ngăn chặn lỗ hổng.

Mã nguồn chiến lược
/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 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/
// © fpsd4ve

//@version=5

// Add Bollinger Bands indicator (close, 20, 2) manually to visualise trading conditions
strategy("2xTP, SL to entry", 
     overlay=false,
     pyramiding=0,
     calc_on_every_tick=false,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=25,
     initial_capital=1000,
     commission_type=strategy.commission.percent,
     commission_value=0.01
     )

// PARAMETERS
// Assumes quote currency is FIAT as with BTC/USDT pair
tp1=input.float(200, title="Take Profit 1")
tp2=input.float(500, title="Take Profit 2")
sl=input.float(200, title="Stop Loss")
stOBOS = input.bool(true, title="Use Stochastic overbought/oversold threshold")

// Colors
colorRed = #FF2052
colorGreen = #66FF00


// FUNCTIONS
// Stochastic
f_stochastic() =>
    stoch = ta.stoch(close, high, low, 14)
    stoch_K = ta.sma(stoch, 3)
    stoch_D = ta.sma(stoch_K, 3)
    stRD = ta.crossunder(stoch_K, stoch_D)
    stGD = ta.crossover(stoch_K, stoch_D)
    [stoch_K, stoch_D, stRD, stGD]


// VARIABLES
[bbMiddle, bbUpper, bbLower] = ta.bb(close, 20, 2)
[stoch_K, stoch_D, stRD, stGD] = f_stochastic()


// ORDERS
// Active Orders
// Check if strategy has open positions
inLong = strategy.position_size > 0
inShort = strategy.position_size < 0
// Check if strategy reduced position size in last bar
longClose = strategy.position_size < strategy.position_size[1]
shortClose = strategy.position_size > strategy.position_size[1]

// Entry Conditions
// Enter long when during last candle these conditions are true:
// Candle high is greater than upper Bollinger Band
// Stochastic K line crosses under D line and is oversold
longCondition = stOBOS ?
     low[1] < bbLower[1] and stGD[1] and stoch_K[1] < 25 :
     low[1] < bbLower[1] and stGD[1]

// Enter short when during last candle these conditions are true:
// Candle low is lower than lower Bollinger Band
// Stochastic K line crosses over D line and is overbought
shortCondition = stOBOS ?
     high[1] > bbUpper[1] and stRD[1] and stoch_K[1] > 75 :
     high[1] > bbUpper[1] and stRD[1]

// Exit Conditions
// Calculate Take Profit 
longTP1 = strategy.position_avg_price + tp1
longTP2 = strategy.position_avg_price + tp2
shortTP1 = strategy.position_avg_price - tp1
shortTP2 = strategy.position_avg_price - tp2

// Calculate Stop Loss
// Initialise variables
var float longSL = 0.0
var float shortSL = 0.0

// When not in position, set stop loss using close price which is the price used during backtesting
// When in a position, check to see if the position was reduced on the last bar
// If it was, set stop loss to position entry price. Otherwise, maintain last stop loss value
longSL := if inLong and ta.barssince(longClose) < ta.barssince(longCondition)
    strategy.position_avg_price
else if inLong
    longSL[1]
else
    close - sl

shortSL := if inShort and ta.barssince(shortClose) < ta.barssince(shortCondition)
    strategy.position_avg_price
else if inShort
    shortSL[1]
else
    close + sl

// Manage positions
strategy.entry("Long", strategy.long, when=longCondition)
strategy.exit("TP1/SL", from_entry="Long", qty_percent=50, limit=longTP1, stop=longSL)
strategy.exit("TP2/SL", from_entry="Long", limit=longTP2, stop=longSL)

strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("TP1/SL", from_entry="Short", qty_percent=50, limit=shortTP1, stop=shortSL)
strategy.exit("TP2/SL", from_entry="Short", limit=shortTP2, stop=shortSL)


// DRAW
// Stochastic Chart
plot(stoch_K, color=color.blue)
plot(stoch_D, color=color.orange)

// Circles
plot(stOBOS ? stRD and stoch_K >= 75 ? stoch_D : na : stRD ? stoch_D : na, color=colorRed, style=plot.style_circles, linewidth=3)
plot(stOBOS ? stGD and stoch_K <= 25 ? stoch_D : na : stGD ? stoch_K : na, color=colorGreen, style=plot.style_circles, linewidth=3)

// Levels
hline(75, linestyle=hline.style_dotted)
hline(25, linestyle=hline.style_dotted)