
この戦略は,移動平均,MACD,RSI,ブリン帯などの複数の技術指標を総合的に使用し,複数の買い売りシグナルを集約し,より完全な動量指標集約取引戦略を形成します.
戦略の核心的な論理は,複数の技術指標の買出信号を集約することであり,具体的には,以下のような要素を中心に構成しています.
移動平均指数: 急速移動平均と遅い移動平均を計算し,高速線を横切ると買い信号を生じ,下を通ると売り信号を生成する.
MACD指数:MACD線と信号線を計算し,MACD線上の信号線を横切るときに買い信号を生じ,下を通るときに売り信号を生成する.
RSI指標:RSI値を計算し,超買いまたは超売り領域に入るか判断し,RSI線と中軸50線の黄金交差と死交差を組み合わせて,買出信号を生成する.
ブリン帯指数:価格が上下軌道を突破するかどうかを判断し,反転中軌道の信号と組み合わせて,買出信号を生成する.
退出判断: ストップ・ストップ・ロスの基準を設定し,一定の比率に達すると積極的に退出する.
上記の各シグナルモジュールは相互に独立しており,戦略はこれらのシグナルをリアルタイムで監視し,買入シグナルを誘発したときにポジションを多めに開き,売出シグナルを誘発したときにポジションを空にして,利得盤の動的集積を実現する.
この戦略には以下の利点があります.
信号源は豊富で,様々な技術指標の買入・売却の信号を組み合わせて,市場機会を逃すのは容易ではない.
偽信号の減少:異なる指標信号の集積検証により,一部の指標の偽信号による悪影響を一定程度に軽減することができる.
トレンドと逆転を兼ね備える:移動平均などのトレンド型の指標,およびRSI,MACDなどの逆転指標を使用すると,さまざまな状況で良い効果が得られます.
自動ストップ: 戦略には自動ストップ・メカニズムが内蔵され,リスクを効果的に制御し,損失拡大を防ぐことができます.
この戦略にはいくつかのリスクがあります.
指標の失敗リスク:特定の状況下では,各指標は特定の失敗が発生し,信号が偏りが生じることがあります.
過剰聚合の問題:信号が過剰聚合され,指標解析度が不十分になりやすい,機会の一部が逃された問題.
参数最適化の難しさ:指標が多いため,参数最適化の難しさが大きい.不適切な指標パラメータの設定も,戦略のパフォーマンスに影響を与える可能性があります.
高い手交換率:戦略信号がより頻繁で,手交換率が高くなり,取引コストが増加する.
この戦略には改善の余地があり,以下のような部分から始めることができます.
各指標とパラメータをテストし,最適化して,最適な指標の組み合わせを見つける.
機械学習によって最適パラメータを自動で探して,手作業によるパラメータ最適化を避けます.
異なる指標重量集約方法をテストし,信号集約の最適な方案を見つけます.
市場波動に応じて自律的にストップ基準を調整できる自己適応のストップメカニズムを追加.
ポジション開設アルゴリズムを追加し,単一のポジション開設比率を制御し,単一のリスクを下げます.
この戦略は,全体的に比較して典型的な,一般的な動態指標集約取引戦略であり,複数の一般的な技術指標の買出信号を総合的に使用し,信号集約によって戦略のパフォーマンスを向上させる.単一の指標戦略と比較して,信号源がより豊富で,傾向を識別し,反転がより全面的な利点がある.同時に,パラメータ最適化の難しさ,指標失敗のリスクが増加することも注意が必要である.さらなるテストと最適化により,この戦略は,非常に実用的量化取引ツールになることができる.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Kesin Etkili Analiz V1 - Artun Sinan", overlay=true)
//indicator("Kesin Etkili Analiz V1 - Artun Sinan", overlay=true)
//BackTest
yearin = input (2019, title="BackTestBaşlangıç Tarihi")
// Göstergelerin parametrelerini tanımlayın
emaShrtPeriod = input.int(title="EMA Kısa Periyodu", defval=50, minval=1)
emaLngPeriod = input.int(title="EMA Uzun Periyodu", defval=100, minval=1)
maPeriod = input.int(50, "Hareketli Ortalama Periyodu", minval=1)
fast = input.int(12, "MACD Hızlı Periyodu", minval=1)
slow = input.int(26, "MACD Yavaş Periyodu", minval=1)
signal = input.int(9, "MACD Sinyal Periyodu", minval=1)
rsiPeriod = input.int(14, "RSI Periyodu", minval=1)
rsiOverbought = input.int(70, "RSI Aşırı Alım Eşiği", minval=50, maxval=100)
rsiOversold = input.int(30, "RSI Aşırı Satım Eşiği", minval=0, maxval=50)
bbPeriod = input.int(20, "Bollinger Bantları Periyodu", minval=1)
bbStd = input.float(2, "Bollinger Bantları Standart Sapması", minval=0.1)
//EMA göstergesi ayarları
ema1 = ta.ema (close,emaShrtPeriod)
ema2 = ta.ema (close, emaLngPeriod)
emaCrossUp = ema1 >= ema2
emaCrossDown = ema2 < ema1
plot(ema1, title="EMAKısa", color=color.rgb(0, 255, 13))
plot(ema2, title="EMAUzun", color=color.rgb(255, 251, 1))
// Göstergeleri hesaplayın
ma = ta.sma(close, maPeriod) // Hareketli ortalama
[macd, macdsignal, macdhist] = ta.macd(close, fast, slow, signal) // MACD
rsi = ta.rsi(close, rsiPeriod) // RSI
[upper, middle, lower] = ta.bb(close, bbPeriod, bbStd) // Bollinger Bantları
// Alım veya satım sinyalleri üretin
buySignal = false
sellSignal = false
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fibonacci seviyelerini tanımlayın
fibLevels = array.new_float(7) // Fibonacci seviyelerini tutacak bir dizi oluşturun
array.set(fibLevels, 0, 0.0) // %0 seviyesini ayarlayın
array.set(fibLevels, 1, 0.236) // %23.6 seviyesini ayarlayın
array.set(fibLevels, 2, 0.382) // %38.2 seviyesini ayarlayın
array.set(fibLevels, 3, 0.5) // %50 seviyesini ayarlayın
array.set(fibLevels, 4, 0.618) // %61.8 seviyesini ayarlayın
array.set(fibLevels, 5, 0.786) // %78.6 seviyesini ayarlayın
array.set(fibLevels, 6, 1.0) // %100 seviyesini ayarlayın
// Tepe ve dip noktasını belirleyin
highpoint = ta.highest (high, 20) // Son 30 mum çubuğunun en yüksek değerini alın
lowpoint = ta.lowest (low, 20) // Son 30 mum çubuğunun en düşük değerini alın
diff = highpoint - lowpoint // Tepe ve dip noktası arasındaki farkı hesaplayın
// Fibonacci seviyelerini hesaplayın
fib0 = lowpoint + diff * array.get(fibLevels, 0) // %0 seviyesini hesaplayın
fib1 = lowpoint + diff * array.get(fibLevels, 1) // %23.6 seviyesini hesaplayın
fib2 = lowpoint + diff * array.get(fibLevels, 2) // %38.2 seviyesini hesaplayın
fib3 = lowpoint + diff * array.get(fibLevels, 3) // %50 seviyesini hesaplayın
fib4 = lowpoint + diff * array.get(fibLevels, 4) // %61.8 seviyesini hesaplayın
fib5 = lowpoint + diff * array.get(fibLevels, 5) // %78.6 seviyesini hesaplayın
fib6 = lowpoint + diff * array.get(fibLevels, 6) // %100 seviyesini hesaplayın
// Alım sinyali: Fiyat %61,8 seviyesinden yukarı yönlü kırılırsa ve MACD çizgisi sinyal çizgisinin üzerine çıkarsa, alım pozisyonu açın
alSignal = close > fib4 and ta.crossover(macd, macdsignal)
// Satım sinyali: Fiyat %61,8 seviyesinden aşağı yönlü kırılırsa ve MACD çizgisi sinyal çizgisinin altına inerse, satım pozisyonu açın
satSignal = close < fib4 and ta.crossunder(macd, macdsignal)
// Çıkış sinyali: Fiyat %38,2 Fibonacci seviyesine ulaşırsa veya belirli bir yüzde oranında kar veya zarar elde ederseniz, pozisyonu kapatın
exitSignal = close >= fib2 or close <= strategy.position_avg_price * 0.95 // Kar oranı olarak %5, zarar oranı olarak %5 belirledik
plot(fib0, title="%0", color=color.rgb(25, 0, 255))
plot(fib1, title="%23.6", color=color.rgb(25, 0, 255))
plot(fib2, title="%38.2", color=color.rgb(25, 0, 255))
plot(fib3, title="%50", color=color.rgb(25, 0, 255))
plot(fib4, title="%61.8", color=color.rgb(25, 0, 255))
plot(fib5, title="%78.6", color=color.rgb(25, 0, 255))
plot(fib6, title="%100", color=color.rgb(25, 0, 255))
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Hareketli ortalama kesişimi sinyali
maCrossUp = ta.crossover(ma, close) // Fiyat hareketli ortalamanın üzerine çıkarsa
maCrossDown = ta.crossunder(ma, close) // Fiyat hareketli ortalamanın altına inerse
// MACD çizgisi ve sinyal çizgisi kesişimi sinyali // Histogram yerine çizgiler
macdCrossUp = ta.crossover(macd, macdsignal) // MACD çizgisi sinyal çizgisinin üzerine çıkarsa
macdCrossDown = ta.crossunder(macd, macdsignal) // MACD çizgisi sinyal çizgisinin altına inerse
// RSI aşırı alım veya aşırı satım sinyali ve 50 seviyesi kesişimi sinyali // Sinyalleri birleştir
// Eşik değerleri doğrudan kullanın
rsiOverboughtSignal = rsi > rsiOverbought and ta.crossover(rsi, 50) // RSI değeri aşırı alım eşiğinin üzerindeyse ve 50 seviyesini yukarı keserse
rsiOversoldSignal = rsi < rsiOversold and ta.crossunder(rsi, 50) // RSI değeri aşırı satım eşiğinin altındaysa ve 50 seviyesini aşağı keserse
// Bollinger Bantları kırılımı sinyali ve orta bant geri dönüşü sinyali // Sinyalleri birleştir
bbBreakUp = close > upper and ta.crossover(close, middle) // Fiyat üst banttan çıkarsa ve orta banta geri dönerse
bbBreakDown = close < lower and ta.crossunder(close, middle) // Fiyat alt banttan inerse ve orta banta geri dönerse
// Sinyalleri birleştirin
buySignal := maCrossUp or macdCrossUp or rsiOversoldSignal or bbBreakUp or emaCrossUp and yearin >= year
sellSignal := maCrossDown or macdCrossDown or rsiOverboughtSignal or bbBreakDown or emaCrossDown and yearin >= year
// Sinyalleri grafikte oklar ile gösterin
plotshape(buySignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(sellSignal, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
plot(macd, title="MACD", color=color.blue) // MACD çizgisini mavi renkte çizin
plot(macdsignal, title="Sinyal", color=color.orange) // Sinyal çizgisini turuncu renkte çizin
if buySignal
strategy.entry("Enter Long", strategy.long)
else if sellSignal
strategy.entry("Enter Short", strategy.short)