
この戦略の主要な考えは,最後のN個のK線の色に基づいて空にするか空にするかを決定することである.最後のN個のK線がすべて緑であるなら空にする.最後のN個のK線がすべて赤であるなら空にする.その特徴は,逆の論理のパラメータを追加することで,元の論理を反転させることができる.逆の論理のパラメータが真であるとき,最後のN個の緑のK線が空になり,最後のN個の赤のK線だけが空になる.
この戦略は,以下の重要なパラメータに依存しています.
鍵となる論理は,forのループを介して最近のnumCandlesToCheckのみのK線を走行し,連続した緑のK線と赤のK線の数をリアルタイムで統計する。連続した赤のK線≥numCandlesToCheckならlastNCandlesRedを真とマークする。連続した緑のK線≥numCandlesToCheckならlastNCandlesGreenを真とマークする。
lastNCandlesGreenが真であるとき,inverseLogicの参数が偽であるなら多行する.真であるなら空にする.反対に,lastNCandlesRedが真であるとき,inverseLogicの参数が偽であるなら空にする.真であるなら多行する.
余分な空白をしても,barsSinceEntryのカウンターは,ポジション開設後に0にリセットされます.barsSinceEntryがnumCandlesToExitよりも大きい場合は,現在のポジションを平らにする。
これは,K線色決定を利用した面白い戦略で,逆転論理のパラメータを追加し,多空の論理を柔軟に調整できます. 主要なメリット:
この戦略にはいくつかのリスクがあります.
上記のリスクに対して,以下の措置を講じることで制御・最適化することができます.
この戦略は以下の方向から最適化できます.
この戦略の全体的な構想は,わかりやすく,単純なK線色を用いて判断して取引信号を形成する.戦略のパラメータの調整は,豊富な組み合わせの変化を形成し,異なる市場環境と品種に対して最適化調整を行う.同時に,いくつかの潜在的リスクに注意し,リスクを制御するために必要な措置を講じることも必要である.戦略の内容を継続的に豊かにすることで,この戦略は,長期にわたって実戦に値し,継続的に最適化して向上する価値ある戦略になることができる.
/*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")