Chiến lược phán đoán giá lên và giá xuống liên tục của K-line

EMA ATR
Ngày tạo: 2024-05-17 13:54:06 sửa đổi lần cuối: 2024-05-17 13:54:06
sao chép: 1 Số nhấp chuột: 682
1
tập trung vào
1617
Người theo dõi

Chiến lược phán đoán giá lên và giá xuống liên tục của K-line

Tổng quan

Chiến lược này dựa trên số lần tăng hoặc giảm liên tục của đường K để đánh giá thị trường bò hoặc thị trường gấu và giao dịch theo đó. Khi giá đóng cửa liên tục cao hơn giá đóng cửa của đường K trước đó đạt đến số lượng nhất định, mở vị trí đầu nhiều; Khi giá đóng cửa liên tục thấp hơn giá đóng cửa của đường K trước đó đạt đến số lượng nhất định, mở vị trí đầu trống. Đồng thời, thiết lập điểm dừng lỗ và ngăn chặn, và giới thiệu cơ chế dừng di chuyển để 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 đa đầu và đầu trống liên tiếp được thực hiện. Nếu giá tròn cao hơn dòng K trước, tính đa đầu cộng 1, tính đầu trống được đặt lại là 0, nếu giá tròn thấp hơn dòng K trước, tính đầu trống cộng 1, tính đa đầu được đặt lại là 0, nếu không thì cả hai tính được đặt lại là 0.
  2. Khi đếm đa đầu đạt đến con số k, mở vị trí đa đầu, thiết lập dừng lỗ và dừng.
  3. Đối với các vị trí đa đầu, ghi lại giá cao nhất sau khi mở vị trí, khi giá cao nhất vượt quá giá mở vị trí iTGT một đơn vị biến động nhỏ nhất, và giá đóng cửa được rút lại xuống dưới giá cao nhất iPcnt%.
  4. Khi số đầu trống đạt đến số k2 được chỉ định, mở vị trí đầu trống, thiết lập dừng lỗ và dừng.
  5. Đối với vị trí đầu trống, ghi lại giá thấp nhất sau khi mở vị trí, khi giá thấp nhất thấp hơn giá mở vị trí iTGT một đơn vị biến động nhỏ nhất, và giá đóng cửa bật lên trên giá thấp nhất iPcnt%.

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

  1. Đơn giản, dễ hiểu, quyết định giao dịch dựa trên sự liên tục của K-line, logic rõ ràng.
  2. Một cơ chế dừng di động được giới thiệu, chủ động bảo vệ lợi nhuận sau khi giá chạy một khoảng cách theo hướng thuận lợi.
  3. Các thiết lập dừng lỗ và dừng lại có thể kiểm soát rủi ro và khóa lợi nhuận một cách hiệu quả.
  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 một tình huống chấn động, thường xuyên mở lỗ có thể dẫn đến chi phí trượt lớn.
  2. Quyết định số lượng dây K liên tiếp bị ảnh hưởng bởi tiếng ồn thị trường, có thể có tín hiệu thường xuyên.
  3. Các điểm dừng và dừng cố định có thể không thích ứng với sự biến động của thị trường.

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

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

Tóm tắt

Chiến lược này nắm bắt xu hướng bò và gấu thông qua sự liên tục của đường K, đồng thời thiết lập một nút dừng lỗ để kiểm soát rủi ro. Việc giới thiệu nút dừng di động có thể bảo vệ lợi nhuận tốt hơn. Tuy nhiên, có thể có tín hiệu thường xuyên trong thị trường biến động, cần tối ưu hóa thêm độ tin cậy của tín hiệu. Ngoài ra, thiết lập nút dừng lỗ cũng có thể linh hoạt hơn để thích ứng với sự thay đổi động lực của thị trường.

Mã nguồn chiến lược
/*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]))