Tài nguyên đang được tải lên... tải...

K Lâm liên tiếp Chiến lược Bull Bear

Tác giả:ChaoZhang, Ngày: 2024-05-17 13:54:06
Tags:EMAATR

img

Tổng quan

Chiến lược này xác định thị trường bò hoặc gấu dựa trên số lượng nến tăng hoặc giảm liên tiếp và thực hiện giao dịch phù hợp. Khi giá đóng liên tục cao hơn giá nến trước đó đóng trong một số lần xác định, nó đi vào vị trí dài; khi giá đóng liên tục thấp hơn giá nến trước đó đóng trong một số lần xác định, nó đi vào vị trí ngắn. Đặt dừng lỗ và lấy lợi nhuận, và một cơ chế dừng kéo theo được giới thiệu để bảo vệ lợi nhuận.

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

  1. Ghi lại số lần các điều kiện tăng và giảm liên tiếp được đáp ứng. Nếu kết thúc cao hơn nến trước, số lượng tăng tăng thêm 1 và số lượng giảm được đặt lại ở mức 0, nếu kết thúc thấp hơn, số lượng giảm tăng thêm 1 và số lượng tăng được đặt lại ở mức 0, nếu không, cả hai số lượng được đặt lại ở mức 0.
  2. Khi số lượng tăng đạt số k được chỉ định, hãy nhập vào một vị trí dài với lệnh dừng lỗ và lấy lợi nhuận.
  3. Đối với các vị trí dài, ghi giá cao nhất sau khi nhập. Khi giá cao nhất vượt quá giá nhập bằng các đơn vị biến đổi giá tối thiểu iTGT và đóng lại giảm xuống dưới giá cao nhất bằng iPcnt%, đóng vị trí.
  4. Khi số lượng giảm đạt số k2 được chỉ định, hãy vào một vị trí ngắn với lệnh dừng lỗ và lấy lợi nhuận.
  5. Đối với các vị trí ngắn, ghi lại giá thấp nhất sau khi nhập. Khi giá thấp nhất thấp hơn giá nhập bằng các đơn vị biến đổi giá tối thiểu iTGT và sự phục hồi gần hơn giá thấp nhất bằng iPcnt%, đóng vị trí.

Ưu điểm chiến lược

  1. Đơn giản và dễ hiểu, đưa ra quyết định giao dịch dựa trên sự liên tục của nến với logic rõ ràng.
  2. giới thiệu một cơ chế dừng lại để tích cực bảo vệ lợi nhuận sau khi giá di chuyển một khoảng cách nhất định theo hướng thuận lợi.
  3. Thiết lập dừng lỗ và lấy lợi nhuận có thể kiểm soát rủi ro hiệu quả và khóa lợi nhuận.
  4. Các tham số có thể điều chỉnh để phù hợp với các thị trường và phong cách giao dịch khác nhau.

Rủi ro chiến lược

  1. Trong thị trường hỗn loạn, việc mở và đóng các vị trí thường xuyên có thể dẫn đến chi phí trượt lớn.
  2. Phán quyết số nến liên tiếp bị ảnh hưởng bởi tiếng ồn thị trường, có thể dẫn đến các tín hiệu thường xuyên.
  3. Mức dừng lỗ cố định và mức lấy lợi nhuận có thể không thích nghi với những thay đổi về biến động thị trường.

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

  1. Đưa ra nhiều chỉ số kỹ thuật hơn, chẳng hạn như đường trung bình động và biến động, để giúp đánh giá sức mạnh và hướng của xu hướng.
  2. Tối ưu hóa các điều kiện kích hoạt để dừng lại, chẳng hạn như điều chỉnh tỷ lệ phần trăm rút lại dựa trên ATR.
  3. Sử dụng các phương pháp dừng lỗ và lấy lợi nhuận năng động hơn, chẳng hạn như dừng lại và lấy lợi nhuận.
  4. Tối ưu hóa các tham số để tìm sự kết hợp tối ưu cho các thị trường và công cụ khác nhau.

Tóm lại

Chiến lược này nắm bắt xu hướng tăng và giảm thông qua sự liên tục của nến trong khi thiết lập dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro. Việc giới thiệu dừng lại có thể bảo vệ lợi nhuận tốt hơn. Tuy nhiên, nó có thể tạo ra các tín hiệu thường xuyên trong các thị trường hỗn loạn, đòi hỏi tối ưu hóa độ tin cậy tín hiệu hơn nữa. Ngoài ra, việc thiết lập dừng lỗ và lấy lợi nhuận có thể linh hoạt hơn để thích nghi với những thay đổi năng động của thị trường. Nhìn chung, chiến lược có một ý tưởng đơn giản và rõ ràng, phù hợp với các thị trường xu hướng, nhưng vẫn còn chỗ cho tối ưu hóa.


/*backtest
start: 2024-04-16 00:00:00
end: 2024-05-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("K Consecutive Candles 數來寶V2", max_bars_back=300, overlay=true)

// 定義用戶輸入
k = input.int(3, title="Number of Consecutive Candles for Long", minval=1)
k2 = input.int(3, title="Number of Consecutive Candles for Short", minval=1)
stopLossTicks = input.int(500, title="Stop Loss (Ticks)")
takeProfitTicks = input.int(500, title="Take Profit (Ticks)")
iTGT = input.int(200,"iTGT")  // 移動停利點
iPcnt = input.int(50,"iPcnt")  // 移動停利%

var float TrailValue = 0
var float TrailExit = 0
var float  vMP = 0

BarsSinceEntry = ta.barssince(strategy.position_size == 0)

vMP := strategy.position_size

// 创建一个包含键值对的字典
addArrayData(type, value) =>
    alert_array = array.new_string()
    array.push(alert_array, '"timenow": ' + str.tostring(timenow))
    array.push(alert_array, '"seqNum": ' + str.tostring(value))
    array.push(alert_array, '"type": "' + type + '"')
    alertstring = '{' + array.join(alert_array,', ') + '}'


// 定義條件變量
var int countLong = 0  // 記錄連續多頭條件成立的次數
var int countShort = 0 // 記錄連續空頭條件成立的次數

// 計算連續大於或小於前一根的收盤價格的次數
if close > close[1]
    countLong += 1
    countShort := 0 // 重置空頭計數
else if close < close[1]
    countShort += 1
    countLong := 0 // 重置多頭計數
else
    countLong := 0
    countShort := 0

// 開設多頭倉位條件
if countLong >= k
    strategy.entry("Long Entry", strategy.long)
    strategy.exit("Exit Long", "Long Entry", loss=stopLossTicks, profit=takeProfitTicks)
    

if vMP>0
    TrailValue := ta.highest(high,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue > strategy.position_avg_price + iTGT * syminfo.minmove/syminfo.pricescale and close < TrailExit
        
        strategy.close("Long Entry", comment = "Trl_LX"+ str.tostring(close[0]))
// 開設空頭倉位條件
if countShort >= k2
    strategy.entry("Short Entry", strategy.short)
    strategy.exit("Exit Short", "Short Entry", loss=stopLossTicks, profit=takeProfitTicks)

if vMP<0    
    TrailValue := ta.lowest(low,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue < strategy.position_avg_price - iTGT * syminfo.minmove/syminfo.pricescale and close > TrailExit
        
        strategy.close("short60", comment = "Trl_SX"+ str.tostring(close[0]))






Có liên quan

Thêm nữa