この戦略の主なアイデアは,最後のNのキャンドルの色に基づいて長または短を決定することです.最後のNのキャンドルが緑である場合は,長い;最後のNのキャンドルが赤である場合は,短い.ユニークな部分は,元のロジックを逆転させることができる"逆論理"パラメータを追加することです. "逆論理"パラメータが真実であるとき,最後のNの緑のキャンドルは短になり,最後のNの赤いキャンドルは長くなります.
この戦略は主に以下の重要なパラメータに基づいています
キーロジックは,最後のnumCandlesToCheckキャンドルを forループを通過し,連続した緑と赤のキャンドルをリアルタイムで数える.連続した赤いキャンドルがnumCandlesToCheck ≥なら, lastNCandlesRed を true とマークする.連続した緑のキャンドルがnumCandlesToCheck ≥なら, lastNCandlesGreen を true とマークする.
lastNCandlesGreen が true ならば,inverseLogic が false ならば,long になる.そうでなければ,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")