이 전략의 주요 아이디어는 마지막 N 촛불의 색을 기준으로 길이를 결정하는 것입니다. 마지막 N 촛불이 녹색이라면 길이를 이동; 마지막 N 촛불이 빨간색이라면 짧이를 이동합니다. 독특한 부분은 원래 논리를 뒤집을 수있는
이 전략은 주로 다음의 중요한 매개 변수들에 의존합니다.
핵심 논리는 마지막 numCandlesToCheck 촛불을 for 루프를 통해 가로질러 연속 녹색 및 빨간 촛불을 실시간으로 세는 것입니다. 연속 빨간 촛불이 ≥numCandlesToCheck이라면 true로 lastNCandlesRed을 표시합니다. 연속 녹색 촛불이 ≥numCandlesToCheck이라면 true로 lastNCandlesGreen을 표시합니다.
lastNCandlesGreen가 true라면 long로 가면 inverseLogic가 false라면 short로 가면 안된다. 반대로 lastNCandlesRed가 true라면 short로 가면 inverseLogic가 false라면 long로 가면 안 된다.
길거나 짧은 상관없이, barsSinceEntry 카운터는 열기 위치 후에 0으로 다시 설정됩니다. barsSinceEntry가 numCandlesToExit보다 크거나 같을 때, 현재 위치가 닫힐 것입니다.
이 전략은
이 전략에는 몇 가지 위험 요소가 있습니다.
이러한 위험을 해결하기 위해 다음의 통제 및 최적화 조치가 채택될 수 있습니다.
이 전략의 주요 최적화 방향은 다음과 같습니다.
이 전략의 전반적인 아이디어는 촛불 색상 결정에 기초하여 단순히 거래 신호를 생성하여 명확하고 이해하기 쉽습니다. 매개 변수를 조정하면 다양한 시장 환경과 제품을 대상으로 최적화를위한 풍부한 조합 변형을 형성 할 수 있습니다. 또한 일부 잠재적 인 위험에주의를 기울이고 통제하기 위해 필요한 조치를 취해야합니다. 전략 콘텐츠를 지속적으로 풍부하게 함으로써이 전략은 장기 거래에 최적화를 계속하는 귀중한 전략이 될 수 있습니다.
/*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")