この戦略は,K-Nearest Neighbors (KNN) 機械学習アルゴリズム,キャンドルスタックパターン認識,およびボリューム分析を組み合わせた包括的な取引システムである.移動平均チャネル,ボリュームしきい値検証,確率統計を含む多次元分析方法を通じて,戦略は潜在的な取引機会を把握するための三次元分析フレームワークを形成する.
戦略の基本的な論理は,いくつかの重要な要素に基づいています.
1. 過剰購入と過剰販売領域を特定するための価格チャネルを構築するために,単純な移動平均値 (SMA) と標準偏差を使用する
2. ハマー,シューティングスター,エングルフィングパターンなど,プログラムで定義された条件を通じて9つのクラシックキャンドルスタイクパターンを識別する.
3. 過去の価格動向から学び,将来の価格動向を予測するためのKNNアルゴリズムを組み込む
4. 信号の確認指標としてボリュームを使用し,信号が起動するときにボリュームが設定された
この戦略は,従来の技術分析と近代的な機械学習方法を組み合わせて堅牢な取引システムを構築する.この戦略の多次元分析フレームワークと厳格な信号確認メカニズムは,取引決定のための信頼できる基盤を提供します.継続的な最適化とリスク管理を通じて,この戦略はさまざまな市場条件下で安定したパフォーマンスを維持することが期待されています.
/*backtest start: 2024-01-17 00:00:00 end: 2025-01-16 00:00:00 period: 2d basePeriod: 2d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=6 strategy("Candle Pattern Analyzer with Volume", overlay=true) // Input parameters length = input.int(20, "Channel Length", minval=1) mult = input.float(2.0, "Volatility Multiplier", minval=0.1) candleLength = input.int(5, "Candle Length", minval=1) k = input.int(5, "KNN Neighbors", minval=1) volumeThreshold = input.int(100000, "Volume Threshold", minval=1) // Calculate channel basis = ta.sma(close, length) dev = mult * ta.stdev(close, length) upper = basis + dev lower = basis - dev // Plot channel plot(basis, color=color.blue) plot(upper, color=color.green) plot(lower, color=color.red) // Identify candle patterns isBullish = close > open isBearish = close < open // Pre-calculate SMAs smaLow = ta.sma(low, candleLength) smaHigh = ta.sma(high, candleLength) smaClose = ta.sma(close, candleLength) // Hammer pattern isHammer = isBullish and low < smaLow and close > smaClose and (close - low) / (high - low) > 0.6 and low < low[1] // Shooting Star pattern isShootingStar = isBearish and high > smaHigh and close < smaClose and (high - close) / (high - low) > 0.6 and high > high[1] // Inverse Hammer pattern isInverseHammer = isBullish and high > smaHigh and close < smaClose and (high - close) / (high - low) > 0.6 and high > high[1] // Bullish Engulfing pattern isBullishEngulfing = isBullish and close > high[1] and open < low[1] // Bearish Engulfing pattern isBearishEngulfing = isBearish and close < low[1] and open > high[1] // Morning Star pattern isMorningStar = isBullish and close[2] < open[2] and close[1] < open[1] and close > open[1] // Evening Star pattern isEveningStar = isBearish and close[2] > open[2] and close[1] > open[1] and close < open[1] // Three Black Crows pattern isThreeBlackCrows = isBearish and close < close[1] and close[1] < close[2] and close[2] < close[3] // Three White Soldiers pattern isThreeWhiteSoldiers = isBullish and close > close[1] and close[1] > close[2] and close[2] > close[3] // Compare previous candles prevCandleUp = close[1] > open[1] prevCandleDown = close[1] < open[1] // Calculate probability probUp = ta.sma(close > open ? 1 : 0, candleLength) / candleLength probDown = ta.sma(close < open ? 1 : 0, candleLength) / candleLength // Generate signals buySignal = isHammer and prevCandleDown and probUp > probDown and volume > volumeThreshold sellSignal = isShootingStar and prevCandleUp and probDown > probUp and volume > volumeThreshold // Highlight patterns color candleColor = na if (isHammer) candleColor := color.green label.new(bar_index, high, "Hammer", color=color.green, style=label.style_label_up) else if (isShootingStar) candleColor := color.red label.new(bar_index, low, "Shooting Star", color=color.red, style=label.style_label_down) else if (isInverseHammer) candleColor := color.blue label.new(bar_index, high, "Inverse Hammer", color=color.blue, style=label.style_label_up) else if (isBullishEngulfing) candleColor := color.yellow label.new(bar_index, high, "Bullish Engulfing", color=color.yellow, style=label.style_label_up) else if (isBearishEngulfing) candleColor := color.purple label.new(bar_index, low, "Bearish Engulfing", color=color.purple, style=label.style_label_down) else if (isMorningStar) candleColor := color.orange label.new(bar_index, high, "Morning Star", color=color.orange, style=label.style_label_up) else if (isEveningStar) candleColor := color.new(color.red, 80) label.new(bar_index, low, "Evening Star", color=color.new(color.red, 80), style=label.style_label_down) else if (isThreeBlackCrows) candleColor := color.black label.new(bar_index, low, "Three Black Crows", color=color.black, style=label.style_label_down) else if (isThreeWhiteSoldiers) candleColor := color.white label.new(bar_index, high, "Three White Soldiers", color=color.white, style=label.style_label_up) // Plot candles barcolor(candleColor) // KNN algorithm var float[] knnData = array.new_float(k, na) var float[] knnLabels = array.new_float(k, na) // Create an array to store KNN labels array.set(knnLabels, 0, 1.0) // Label for "up" movement // Shift KNN dataset to make room for new data point for i = 1 to k-1 array.set(knnData, i, array.get(knnData, i-1)) array.set(knnLabels, i, array.get(knnLabels, i-1)) // Predict next movement using KNN algorithm float prediction = 0.0 for i = 0 to k-1 float distance = math.abs(close - array.get(knnData, i)) prediction += array.get(knnLabels, i) / distance prediction /= k // Plot prediction // line.new(bar_index, close, bar_index + 1, prediction, color=color.purple) // Plot resistance and support lines float resistance = ta.sma(high, length) float support = ta.sma(low, length) // line.new(bar_index, resistance, bar_index + 1, resistance, color=color.green, style=line.style_dashed) // line.new(bar_index, support, bar_index + 1, support, color=color.red, style=line.style_dashed) // Plot buy and sell signals with prices if (buySignal) // label.new(bar_index, low, "Buy at " + str.tostring(low), color=color.green, style=label.style_label_up) strategy.entry("Buy", strategy.long, comment="Buy at " + str.tostring(low)) if (sellSignal) // label.new(bar_index, high, "Sell at " + str.tostring(high), color=color.red, style=label.style_label_down) strategy.entry("Sell", strategy.short, comment="Sell at " + str.tostring(high)) // Create alerts alertcondition(buySignal, title="Buy Signal", message="Buy signal generated!") alertcondition(sellSignal, title="Sell Signal", message="Sell signal generated!")