Совокупная торговая стратегия на основе индикатора импульса


Дата создания: 2024-02-21 11:59:22 Последнее изменение: 2024-02-21 11:59:22
Копировать: 0 Количество просмотров: 597
1
Подписаться
1617
Подписчики

Совокупная торговая стратегия на основе индикатора импульса

Обзор

Эта стратегия использует множество технических индикаторов, таких как движущиеся средние, MACD, RSI, бриндовые полосы и т. д., чтобы объединить множество сигналов покупки и продажи, чтобы сформировать более совершенную стратегию сбора динамических индикаторов.

Стратегический принцип

Основная логика стратегии заключается в объединении сигналов покупки и продажи по нескольким техническим показателям, в частности, в следующем:

  1. Индикатор движущихся средних: рассчитывается быстрое движение средних и медленное движение средних, когда быстрая линия на прохождении медленной линии генерирует сигнал покупать, когда прохождение нижней линии генерирует сигнал продавать.

  2. MACD-индикатор: вычисляет MACD-линии и сигнальные линии, генерирующие сигнал покупки при прохождении MACD-линии по сигнальной линии и сигнал продажи при прохождении MACD-линии.

  3. RSI-индикатор: рассчитывает значение RSI, чтобы определить, входит ли он в зону перекупа или перепродажи, и в сочетании с золотым пересечением RSI-линии с линией 50 на центральной оси генерирует сигнал покупки и продажи.

  4. Индикатор Брин-пояса: определяет, пробилась ли цена вверх-вниз, и в сочетании с обратным средним трейлером генерирует сигнал покупки-продажи.

  5. Решение о выходе: установление критериев стоп-стоп, при достижении определенного пропорционального количества активно выходить из позиции.

Каждый из вышеуказанных модулей сигналов независим друг от друга, стратегия будет в режиме реального времени отслеживать эти сигналы, открывать позиции при запуске сигнала покупки, открывать позиции при запуске сигнала продажи, чтобы реализовать динамическое агрегирование прибыльного диска.

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

  1. Сигнальные источники: в сочетании с различными техническими показателями, можно легко купить и продать сигналы, не упуская возможности торгов.

  2. Снижение ложных сигналов: агрегированная проверка сигналов различных показателей может в некоторой степени уменьшить негативное влияние ложных сигналов на некоторые показатели.

  3. Использование трендовых индикаторов, таких как движущиеся средние, а также обратных индикаторов, таких как RSI и MACD, может быть эффективным в различных ситуациях.

  4. Автоматический стоп-стоп: в стратегию встроен механизм автоматического стоп-стопа, который позволяет эффективно контролировать риск и избегать увеличения убытков.

Анализ рисков

Однако есть и другие риски, связанные с этой стратегией, в частности:

  1. Риск сбоя индикатора: в определенных ситуациях каждый индикатор может иметь определенный уровень сбоя, что приводит к отклонению сигнала.

  2. Проблема с чрезмерной агрегацией: сигнал слишком агрегирован, что может привести к недостаточному разрешению индикатора, пропусканию некоторых возможностей.

  3. Оптимизация параметров затруднительна: из-за большого количества показателей, оптимизация параметров затруднительна. Неправильная настройка параметров показателей также может повлиять на эффективность стратегии.

  4. Высокая частота смены: более частые стратегические сигналы приводят к более высокой частоте смены, что увеличивает стоимость сделки.

Направление оптимизации

Есть определенные возможности для оптимизации этой стратегии, начиная с следующего:

  1. Тестирование и оптимизация различных показателей и параметров, чтобы найти оптимальное сочетание показателей.

  2. Автоматическое поиск оптимальных параметров с помощью методов машинного обучения, избегая ручной оптимизации параметров.

  3. Тестирование различных методов весового агрегирования индикаторов, чтобы найти оптимальные варианты агрегирования сигналов.

  4. Добавление адаптивного механизма остановки убытков, позволяющего автоматически корректировать стандарты остановки убытков в зависимости от рыночных колебаний.

  5. Добавление алгоритмов открытия позиций, контроль одноразового открытия позиций, снижение риска в одноразовом порядке.

Подвести итог

Эта стратегия в целом является более типичной и общепринятой стратегией агрегированной торговли динамическими показателями, использующей в комплексе сигналы покупки и продажи из нескольких распространенных технических показателей для повышения эффективности стратегии путем агрегирования сигналов. По сравнению с одной стратегией индикатора, она имеет преимущества, такие как более богатый источник сигнала, выявление тенденции и более всеобъемлющее обращение. В то же время, большая сложность оптимизации параметров и повышенный риск неудачи индикатора также являются вопросами, на которые следует обратить внимание.

Исходный код стратегии
/*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)