Chiến lược logic ngược cho N nến cuối cùng


Ngày tạo: 2023-12-26 11:00:29 sửa đổi lần cuối: 2023-12-26 11:00:29
sao chép: 1 Số nhấp chuột: 696
1
tập trung vào
1623
Người theo dõi

Chiến lược logic ngược cho N nến cuối cùng

Tổng quan

Ý tưởng chính của chiến lược này là quyết định làm nhiều hoặc làm trống dựa trên màu sắc của N dòng K cuối cùng. Nếu N dòng K cuối cùng là màu xanh lá cây, hãy làm nhiều hơn; Nếu N dòng K cuối cùng là màu đỏ, hãy làm trống.

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

Chiến lược này phụ thuộc vào một số tham số quan trọng:

  1. numCandlesToCheck: dùng để chỉ số K cần kiểm tra
  2. numCandlesToExit: Chỉ số K cần rút khỏi vị trí sau khi giữ vị trí
  3. inverseLogic: tham số của logic ngược, đối nghịch với logic đa không gian gốc trong thời gian thực

Logic quan trọng là đi qua vòng lặp for qua các đường K gần nhất của numCandlesToCheck và thống kê số lần liên tiếp xuất hiện của các đường K xanh và đường K đỏ trong thời gian thực. Đánh dấu lastNCandlesRed là đúng nếu đường K liên tiếp ≥numCandlesToCheck. Đánh dấu lastNCandlesGreen là đúng nếu đường K liên tiếp ≥numCandlesToCheck.

Khi lastNCandlesGreen là đúng, nếu tham số inverseLogic là sai, thì làm thêm; nếu đúng, thì làm trống. Ngược lại, khi lastNCandlesRed là đúng, nếu tham số inverseLogic là sai, thì làm trống; nếu đúng, thì làm thêm.

Bất kể bạn có làm thêm bao nhiêu lần, bộ đếm barsSinceEntry sẽ được đặt lại là 0 khi bạn mở vị trí. Khi barsSinceEntry lớn hơn hoặc bằng với numCandlesToExit, bạn sẽ xóa vị trí hiện tại.

Phân tích lợi thế

Đây là một chiến lược thú vị để sử dụng quyết định màu K-line, thêm tham số logic reverse , có thể điều chỉnh một cách linh hoạt nhiều logic làm空. Những ưu điểm chính là:

  1. Những ý tưởng mới, có thể tạo ra một đầu tư ngược lại với logic phổ biến của thị trường
  2. Mã được viết rõ ràng, đơn giản, dễ hiểu và dễ sửa đổi
  3. Bạn có thể tìm các tham số tối ưu bằng cách điều chỉnh tham số
  4. Tuy nhiên, chiến lược này vẫn có thể hoạt động và tạo ra tín hiệu.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro cần lưu ý:

  1. Màu sắc của đường K không hoàn toàn đại diện cho tình hình, theo dõi xác suất có tín hiệu sai
  2. Không thể xác định giá trị tối ưu cho tham số numCandlesToCheck
  3. Không thể xác định giá trị tối ưu cho tham số numCandlesToExit
  4. Cài đặt tham số logic ngược không đúng có thể làm tăng tổn thất
  5. Vấn đề không thể kiểm soát hiệu quả lỗ hổng đơn lẻ

Các biện pháp sau đây có thể được áp dụng để kiểm soát và tối ưu hóa các rủi ro trên:

  1. Thêm các bộ lọc khác để tránh các tín hiệu sai, chẳng hạn như đánh giá xu hướng ở cấp độ lớn hơn
  2. Lướt qua các tham số khác nhau để tìm kiếm sự kết hợp tối ưu
  3. Tham gia hệ thống ngăn chặn tổn thất để kiểm soát tổn thất đơn lẻ
  4. Kiểm tra tính hợp lệ của tham số logic ngược

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các hướng sau:

  1. Tăng giá trị phân tích để tránh bị lắp đặt
  2. Giá trị của tham số tối ưu hóa numCandlesToCheck và numCandlesToExit
  3. Chỉ số xu hướng theo chu kỳ lớn kết hợp với tín hiệu lọc sai
  4. Tham gia chiến lược dừng lỗ và dừng lại
  5. Phân tích hiệu quả của các chiến lược xác thực khác nhau
  6. So sánh lợi nhuận của logic nguyên thủy và logic ngược

Tóm tắt

Kỹ thuật tổng thể của chiến lược rất rõ ràng và dễ hiểu, sử dụng màu sắc K đơn giản để xác định hình thành tín hiệu giao dịch. Điều chỉnh các tham số chiến lược có thể tạo ra sự thay đổi kết hợp phong phú, do đó điều chỉnh tối ưu cho các môi trường và giống thị trường khác nhau. Đồng thời, cần chú ý đến một số rủi ro tiềm ẩn và áp dụng các biện pháp cần thiết để kiểm soát rủi ro. Bằng cách liên tục làm phong phú nội dung chiến lược, chiến lược có thể trở thành một chiến lược có giá trị đáng chiến đấu lâu dài và liên tục tối ưu hóa.

Mã nguồn chiến lược
/*backtest
start: 2022-12-25 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Last Number of  Candles", overlay=true)

// Define the condition for a green candle
isGreenCandle(candle) =>
    close[candle] > open[candle]

// Define the condition for a red candle
isRedCandle(candle) =>
    close[candle] < open[candle]

// Input to specify the number of candles to check
numCandlesToCheck = input(5, title="Number of Candles to Check")
numCandlesToExit = input(2, title="Number of Candles To Exit")  // Corrected the input title

// Initialize variables to count consecutive green and red candles
var int consecutiveGreenCandles = 0
var int consecutiveRedCandles = 0

// Initialize barsSinceEntry outside the loop
var int barsSinceEntry = 0

// Loop through the last "numCandlesToCheck" candles
for i = 0 to numCandlesToCheck - 1
    if isGreenCandle(i)
        consecutiveGreenCandles := consecutiveGreenCandles + 1
        consecutiveRedCandles := 0 // Reset the count for consecutive red candles
    else if isRedCandle(i)
        consecutiveRedCandles := consecutiveRedCandles + 1
        consecutiveGreenCandles := 0 // Reset the count for consecutive green candles

// Check if the last "numCandlesToCheck" candles are green or red
lastNCandlesGreen = consecutiveGreenCandles >= numCandlesToCheck
lastNCandlesRed = consecutiveRedCandles >= numCandlesToCheck

// Calculate the quantity based on the investment value and current asset price
investmentValue = input(10000, title="Investment Value")
var assetPrice = close
var quantity = investmentValue / assetPrice


inverseLogic = input(false, title="inverseLogic")

// Entry condition: Open a buy order if the last "numCandlesToCheck" candles are green
if lastNCandlesGreen
    if inverseLogic
        strategy.entry("Short", strategy.long, qty = quantity)
    else 
        strategy.entry("Buy", strategy.long, qty = quantity)// Reset barsSinceEntry when entering a trade
    barsSinceEntry := 0

// Entry condition: Open a short order if the last "numCandlesToCheck" candles are red
if lastNCandlesRed
    if inverseLogic
        strategy.entry("Buy", strategy.long, qty = quantity)

    else 
        strategy.entry("Short", strategy.short, qty = quantity)
    // Reset barsSinceEntry when entering a trade
    barsSinceEntry := 0

// Increment barsSinceEntry
barsSinceEntry := barsSinceEntry + 1

// Exit condition: Close the position after 2 bars
if barsSinceEntry >= numCandlesToExit
    strategy.close("Buy")
    strategy.close("Short")