Ý tưởng chính của chiến lược này là xác định dài hay ngắn dựa trên màu sắc của N nến cuối cùng. Nếu N nến cuối cùng là màu xanh lá cây, đi dài; nếu N nến cuối cùng là màu đỏ, đi ngắn. Phần độc đáo là việc thêm một tham số
Chiến lược này chủ yếu dựa trên các thông số quan trọng sau:
Lý thuyết chính là đi qua các nến numCandlesToCheck cuối cùng thông qua vòng lặp for, và đếm các nến màu xanh lá cây và màu đỏ liên tiếp trong thời gian thực. Nếu nến màu đỏ liên tiếp ≥numCandlesToCheck, đánh dấu lastNCandlesRed là đúng. Nếu nến màu xanh lá cây liên tiếp ≥numCandlesToCheck, đánh dấu lastNCandlesGreen là đúng.
Khi lastNCandlesGreen đúng, đi dài nếu inverseLogic là sai, nếu không đi ngắn. Ngược lại, khi lastNCandlesRed đúng, đi ngắn nếu inverseLogic là sai, nếu không đi dài.
Bất kể dài hay ngắn, barSinceEntry sẽ được thiết lập lại thành 0 sau khi mở vị trí. Khi barSinceEntry lớn hơn hoặc bằng numCandlesToExit, vị trí hiện tại sẽ được đóng.
Đây là một chiến lược thú vị sử dụng màu nến để đưa ra quyết định, với một tham số
Ngoài ra còn có một số rủi ro cần lưu ý cho chiến lược này:
Để đối phó với những rủi ro này, 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 hướng tối ưu hóa chính cho chiến lược này là:
Ý tưởng tổng thể của chiến lược này là rõ ràng và dễ hiểu, tạo ra các tín hiệu giao dịch đơn giản dựa trên xác định màu nến. Điều chỉnh các tham số có thể tạo ra các biến thể kết hợp phong phú để tối ưu hóa nhắm vào các môi trường và sản phẩm thị trường khác nhau. Cũng cần chú ý đến một số rủi ro tiềm ẩn và thực hiện các biện pháp cần thiết để kiểm soát chúng. Bằng cách liên tục làm phong phú nội dung chiến lược, chiến lược này có thể trở thành một chiến lược có giá trị để tiếp tục tối ưu hóa cho giao dịch dài hạn.
/*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")