
この戦略は,技術指標距離測定とMACD反転シグナルを組み合わせた混合量化取引方法である.この戦略は,現在の市場状態と,牛市と熊市の中央点との事前定義のユーロリットの距離を計算し,MACD指標の交差信号と組み合わせて,トレンドの動力を捉え,潜在的反転を識別する複合戦略を形成する.この戦略の特徴は,複数の技術指標 (EMA,波動率,動量,RSI,MACD) を組み合わせた特性のベクタを組み合わせて,数学的に市場状態と前提条件の類似性を測定し,より正確な取引信号を生成するものである.
この戦略の核心となる原則は,以下の2つのメカニズムに基づいています.
距離測定装置策略はまず,価格EMA,波動率,動力,RSI,MACD線,MACD柱状図を含む6つの技術指標からなる特征ベクターを構築します.同時に,牛市と熊市の2つの中心点ベクターは,それぞれ上昇と下落の傾向にある市場の理想的な状態を代表します.現在の市場状態ベクタとこれらの2つの中心点ベクタの間のユーロメートルの距離を計算することによって,策略は,現在の市場がどの状態に近いかを判断することができます.
MACDの交差信号機構: 第二層確認として,戦略は,市場の動力の変化を判断するためにMACD指標の交差信号を使用する.MACD線上の交差信号線は,買取信号とみなされ,MACD線下交差信号線は,売り込み信号とみなされる.
この2つのメカニズムの組み合わせにより,二重確認システムが形成される:一方では,距離測定によって市場の全体的な傾向を判断し,一方では,MACDを交差して短期的な動力の変化を判断する.戦略は,2つのメカニズムの共同確認を活用したり (距離測定とMACDが同時に同じ信号を与える) または,いずれかのメカニズムから独立して生成される信号に基づいて取引することができ,信号の多様性と捕獲機会の頻度を高めます.
多次元市場状況の評価: 複数の技術指標を特徴ベクトルに組み合わせることで,戦略は単一の指標にのみ依存するのではなく,複数の次元から市場の状態を評価することができ,偽信号のリスクを低減します.
フレキシブルな信号生成機構戦略は,距離測定とMACDの交差の2つのメカニズムを同時に使用して,トレンドの動きの継続的な動力を捉え,潜在的逆転点を早期に発見し,適応性が向上する信号を生成します.
数学的モデルの客観性ユーロリットの計算は,主観的な判断要因の影響を減らすために,市場状態を評価する客観的,数学的な方法を提供します.
自動決済メカニズム戦略は,新しいシグナルが生じるときに,逆方向のポジションを自動的に平らげ,迅速に変化する市場に対応するために,損失を一時停止し,ポジションの方向を転換するのに役立ちます.
性能モニタリング機能: 戦略は,取引の利益と損失の追跡と表示機能を内蔵し,戦略のパフォーマンスをリアルタイムで評価し,必要なパラメータ調整を行うことができます.
パラメータ感度リスク策略で使用されるEMA,RSI,MACDなどの指標は,特定のパラメータの設定に依存しています. これらのパラメータが現在の市場条件に適していない場合,誤ったシグナルの発生を引き起こす可能性があります. 解決策は,回測によって最適なパラメータの組み合わせを見つけ,パラメータの有効性を定期的に再評価することです.
過剰取引のリスク: 策略は2つの異なるメカニズムに基づいてシグナルを独立に生成できるため,波動性の高い市場では,過剰な取引シグナルが生み出され,取引コストが増加する可能性があります. 信号フィルタリングメカニズムを追加したり,信号生成ロジックを調整することによって,不要な取引を減らすことができます.
トレンドと反転判断の衝突: 市場状況によっては,距離測定とMACD信号は相互に矛盾する指示を与え,戦略行動の不一致を引き起こす可能性があります. 明確な信号優先規則の確立または追加の確認メカニズムの導入が推奨されています.
中心点設定の静態性:現在の戦略の牛熊市の中央点部分のパラメータは静的設定 ((RSI値など) であり,すべての市場環境に適応できない可能性があります. 適応機構を導入し,歴史的データに基づいて中心点の位置を動的に調整することを考えることができます.
単一の時間枠の限界: 策略は単一のタイムフレーム内でのみ動作し,より大きいまたはより小さなタイムフレームの重要な信号を逃す可能性があります. 複数のタイムフレームの策略に拡張することを考慮すると,信号の信頼性が向上します.
適応的センターポイントデザイン:現在の牛市・熊市中心点の一部パラメータは固定であり,歴史的データに基づく自動計算の動的中心点として改善することができる.例えば,過去Nサイクルのデータを用いて理想的な牛市・熊市状態を決定し,中心点を市場条件に自動的に調整できるようにすることができる.
信号優先度とフィルタリング機構:市場環境に基づく信号優先制度を導入する.例えば,高波動率環境において反転信号を優先する,低波動率傾向が顕著な環境において距離測定信号を優先する.同時に,波動率または交付量に基づく信号フィルターを追加して,ノイズ信号を減らすことができる.
ストップ・損失と利益目標のメカニズム:現在の戦略には明確なストップ・ロッドと利益目標設定がないため,ATRまたは固定パーセントに基づくストップ・ロッドの仕組み,およびサポート/レジスタンスレベルまたはリスク・リターン・比率に基づく利益目標設定を追加できます.
多時間枠分析統合: より大きな時間枠のトレンド情報を現在の戦略に統合する.例えば,日線トレンドの方向が一致している場合にのみ,時間レベルでの取引シグナルを実行する,信号の信頼性を高める.
特徴重度の動的調整: 特性ベクトルの異なる指標に動的重みを与え,異なる市場条件下での各指標の予測能力に応じてその影響を自動的に調整し,距離計算の正確性を向上させる.
機械学習の強化: シンプルな機械学習アルゴリズムの導入を考慮して,中心点の位置や特性の重みを最適化したり,集群アルゴリズムを使用して,単純な牛と熊の2つの状態ではなく,市場の複数の状態の中心点を自動的に発見することもできます.
技術指標距離測定とMACD反転混合量化取引戦略は,Euclidean Distance計算技術を使用して,複数の一般的な技術指標を統合して市場状態の評価システムに統合し,MACD交差信号と組み合わせて二重確認機構を形成する革新的な量化取引方法である.この方法は,継続的なトレンドの動力を捉え,潜在的市場反転点を認識するだけでなく,強い適応性と柔軟性を持っています.
この戦略の核心的な優位性は,多次元市場評価能力と数学モデルの客観性にあるが,パラメータの感受性,過剰取引,信号衝突などのリスクにも直面している. 適応的中心点設計を導入し,信号優先システムの最適化,止損機構の追加,多時間枠分析の統合,機械学習技術の適用など,戦略には大きな最適化と向上の余地がある.
量的なトレーダーにとって,伝統的な技術分析方法と数学モデルを組み合わせたこの戦略は,探索に値する新しい方向性を提供し,特に,戦略の説明性を維持しながら,取引意思決定の客観性を向上させたいトレーダーに適しています.
/*backtest
start: 2024-04-15 00:00:00
end: 2024-12-31 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("Bysq-Distance Reversal Entry - BTCUSDT (v6)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, margin_long=0, margin_short=0)
// ========== FEATURE ENGINEERING ==========
price = close
priceNorm = ta.ema(price, 5)
volatility = ta.stdev(price, 20)
momentum = ta.ema(close - close[5], 5)
rsi = ta.rsi(close, 14)
macdLine = ta.ema(close, 12) - ta.ema(close, 26)
signalLine = ta.ema(macdLine, 9)
macdHist = macdLine - signalLine
// Fitur sebagai vector
featureVector = array.new_float(6)
array.set(featureVector, 0, priceNorm)
array.set(featureVector, 1, volatility)
array.set(featureVector, 2, momentum)
array.set(featureVector, 3, rsi)
array.set(featureVector, 4, macdLine)
array.set(featureVector, 5, macdHist)
// Centroid bullish
bullishCentroid = array.new_float(6)
array.set(bullishCentroid, 0, price)
array.set(bullishCentroid, 1, volatility)
array.set(bullishCentroid, 2, momentum)
array.set(bullishCentroid, 3, 60.0)
array.set(bullishCentroid, 4, macdLine)
array.set(bullishCentroid, 5, macdHist)
// Centroid bearish
bearishCentroid = array.new_float(6)
array.set(bearishCentroid, 0, price)
array.set(bearishCentroid, 1, volatility)
array.set(bearishCentroid, 2, momentum)
array.set(bearishCentroid, 3, 40.0)
array.set(bearishCentroid, 4, macdLine)
array.set(bearishCentroid, 5, macdHist)
// Fungsi Euclidean Distance
euclideanDistance(arr1, arr2) =>
dist = 0.0
for i = 0 to array.size(arr1) - 1
a = array.get(arr1, i)
b = array.get(arr2, i)
dist += math.pow((a - b), 2)
math.sqrt(dist)
// Hitung jarak ke centroid
distToBullish = euclideanDistance(featureVector, bullishCentroid)
distToBearish = euclideanDistance(featureVector, bearishCentroid)
// ========== SINYAL ==========
// Original distance strategy signals
isDistanceBuySignal = distToBullish < distToBearish and ta.crossover(macdLine, signalLine)
isDistanceSellSignal = distToBearish < distToBullish and ta.crossunder(macdLine, signalLine)
// Reversal strategy signals
isReversalBuySignal = ta.crossover(macdLine, signalLine)
isReversalSellSignal = ta.crossunder(macdLine, signalLine)
// Combined signals - using both strategies
isBuySignal = isDistanceBuySignal or isReversalBuySignal
isSellSignal = isDistanceSellSignal or isReversalSellSignal
// ========== EKSEKUSI ==========
if isBuySignal
strategy.close("Sell") // Close any sell position first (from reversal strategy)
strategy.entry("Buy", strategy.long)
if isSellSignal
strategy.close("Buy") // Close any buy position first (from reversal strategy)
strategy.entry("Sell", strategy.short)
// ========== METRIK KINERJA ==========
float lastOpenTradeProfit = na
if strategy.opentrades > 0
lastOpenTradeProfit := strategy.opentrades.profit(strategy.opentrades - 1)
float lastClosedTradeProfit = na
if strategy.closedtrades > 0
lastClosedTradeProfit := strategy.closedtrades.profit(strategy.closedtrades - 1)
// Plot info
plot(lastOpenTradeProfit, title="Last Open Trade Profit", color=color.blue)
plot(lastClosedTradeProfit, title="Last Closed Trade Profit", color=color.orange)