Эта стратегия объединяет множество технических индикаторов, включая скользящую среднюю, MACD, RSI и полосы Боллинджера, чтобы генерировать различные сигналы купли и продажи, формируя относительно полную стратегию агрегации индикаторов импульса.
Основная логика стратегии заключается в агрегировании сигналов покупки и продажи нескольких технических индикаторов, которые в основном включают следующие аспекты:
Индикатор скользящей средней: рассчитывает быстрые и медленные скользящие средние линии и генерирует сигналы покупки, когда быстрая линия пересекает над медленной линией, и сигналы продажи, когда пересекает ниже.
Индикатор MACD: рассчитывает линию MACD и линию сигнала, генерируя сигналы покупки, когда линия MACD пересекает линию сигнала выше, и сигналы продажи, когда пересекает ниже.
Индикатор RSI: рассчитывает значения RSI для определения того, входит ли он в зоны перекупленности или перепроданности, в сочетании с золотым крестом и крестом смерти линии RSI и средней линии 50 для генерации торговых сигналов.
Индикатор полос Боллинджера: определяет, пробиваются ли цены через верхнюю и нижнюю полосы, в сочетании с сигналами возвращения в среднюю полосу для получения торговых сигналов.
Критерии выхода: устанавливают стандарты стоп-прибыли и стоп-потери, выход из позиций при достижении определенных процентов.
Сигналы каждого модуля индикатора работают независимо друг от друга. Стратегия отслеживает эти сигналы в режиме реального времени, идет на длинный, когда сигналы покупки запускаются, и идет на короткий, когда сигналы продажи запускаются, чтобы динамически агрегировать прибыльные позиции.
Преимущества этой стратегии включают:
Богатые источники сигналов с различными индикаторными сигналами, нелегко упустить возможности.
Уменьшить количество ложных сигналов путем проверки сигналов с помощью различных показателей.
Хорошая адаптивность к тенденциям и переломам с показателями как тенденций, так и среднего перелома.
Автоматический механизм остановки прибыли и остановки убытков помогает контролировать риски.
Существуют также некоторые риски, существующие в этой стратегии:
Риск недействительности показателей при определенных рыночных условиях.
Проблема чрезмерного упрощения при агрегировании слишком большого количества сигналов приводит к недостаточному разрешению.
Сложности в оптимизации параметров при использовании многих показателей.
Высокий уровень оборота и увеличение торговых издержек.
Есть несколько возможностей для дальнейшей оптимизации:
Испытать и оптимизировать комбинации показателей и параметров.
Используйте методы машинного обучения для автоматического поиска оптимальных параметров.
Испытать различные методы взвешивания для агрегирования сигналов.
Добавить адаптивные механизмы стоп-лосса на основе волатильности рынка.
Добавить алгоритмы открытия для контроля пропорций одного открытия для лучшего контроля риска.
В заключение, это типичная и универсальная стратегия агрегации индикаторов импульса, которая объединяет торговые сигналы из различных общих технических индикаторов и улучшает производительность посредством агрегации сигналов. По сравнению со стратегиями с одним индикатором, она имеет преимущества более обильного количества сигнальных источников и лучшей идентификации тенденций и перемен. Между тем, следует также отметить трудности в оптимизации параметров и повышенные риски недействительности. С дальнейшим тестированием и оптимизацией эта стратегия может стать очень практичным количественным торговым инструментом.
/*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)