Улучшение стратегий следования за волнами


Дата создания: 2024-01-31 15:35:41 Последнее изменение: 2024-01-31 15:35:41
Копировать: 0 Количество просмотров: 669
1
Подписаться
1617
Подписчики

Улучшение стратегий следования за волнами

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

Принципы стратегии:

  1. Вычислите среднюю цену ap = ((высочайшая цена + низкая цена + цена закрытия) / 3

  2. Вычислим EMA ap на n1 циклов, получим esa

  3. Вычислим n1 циклов ЭМА, где ap имеет абсолютное различие от ЭСА, и получим d

  4. Вычислить волновую линию: ci = {ap-esa}/{0.015}*d)

  5. Вычислим ЭМА для n2 циклов ci и получим конечную волновую линию tci, т.е. wt1

  6. Вычислить 4-циклический SMA wt1 и получить wt2

  7. Горизонтальная линия, изображающая зоны сверхпокупа и зоны сверхпродажи obLevel 12 и osLevel 12

  8. При прохождении линии obLevel2 на wT1 образуется сигнал покупки; при прохождении линии osLevel2 на wT1 образуется сигнал продажи

  9. Добавление средней линии emaFilter и объема транзакций volumeFilter в качестве фильтрационных условий, чтобы избежать ошибочных сигналов

  10. Поступление, установка стоп-стоп-процентов, выход из позиции

Анализ силы:

  1. Волновая линия лучше справляется с многопространственным преобразованием и эффективно улавливает тенденции

  2. Высокая надежность в сочетании с равнолинейной и двойной фильтрацией объема сделок

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

  4. Установка стоп-стоп-убытков, позволяющая блокировать часть прибыли и эффективно контролировать риски

Риски и недостатки:

  1. Выбор параметров в некоторых случаях может привести к плохой производительности или избыточному совместимости

  2. Нет четкого руководства о выборе оптимальных параметров, требуется пробная ошибка

  3. Сигналы не включают более широкие рыночные условия

  4. Риск возникновения фейерверков при использовании в ограниченном диапазоне или на волатильных рынках

  5. Отсутствие правил выхода за пределы прибыли/убытка

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

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

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

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

  4. Построение модели машинного обучения для поиска оптимальных параметров для конкретных активов

  5. Усиление выхода путем добавления стоп-стоп или выхода, основанного на внезапных волатильных расширениях

В заключение:

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

Исходный код стратегии
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bush Strategy test", shorttitle="Nique Audi", overlay=false)

// Paramètres
n1 = input(10, title="Channel Length")
n2 = input(21, title="Average Length")
obLevel1 = input(60, title="Over Bought Level 1")
obLevel2 = input(53, title="Over Bought Level 2")
osLevel1 = input(-65, title="Over Sold Level 1")
osLevel2 = input(-60, title="Over Sold Level 2")
takeProfitPercentage = input(1, title="Take Profit (%)")
stopLossPercentage = input(0.50, title="Stop Loss (%)")

// Calculs
ap = hlc3 
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)

wt1 = tci
wt2 = ta.sma(wt1, 4)

// Tracé des lignes
plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=plot.style_line)
plot(osLevel2, color=color.green, style=plot.style_line)

plot(wt1, color=color.green)
plot(wt2, color=color.red, style=plot.style_line)

// Tracé de la différence entre wt1 et wt2 en bleu
hline(0, "Zero Line", color=color.gray)

// Conditions d'entrée long et court
longCondition = ta.crossover(wt1, obLevel2)
shortCondition = ta.crossunder(wt1, osLevel2)

// Tracé des signaux d'achat et de vente
plotshape(series=longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal")
plotshape(series=shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal")

// Conditions d'entrée et de sortie
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

// Niveaux de prise de profit pour les positions longues et courtes
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentage / 100)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentage / 100)

// Vérification si les niveaux de prise de profit sont atteints
longTakeProfitReached = strategy.position_size > 0 and high >= longTakeProfitLevel
shortTakeProfitReached = strategy.position_size < 0 and low <= shortTakeProfitLevel

// Tracé des formes de prise de profit
plotshape(series=longTakeProfitReached, style=shape.xcross, location=location.belowbar, color=color.blue, size=size.small, title="Take Profit Long")
plotshape(series=shortTakeProfitReached, style=shape.xcross, location=location.abovebar, color=color.blue, size=size.small, title="Take Profit Short")

// Niveaux de stop loss pour les positions longues et courtes
longStopLossLevel = strategy.position_avg_price * (1 - stopLossPercentage / 100)
shortStopLossLevel = strategy.position_avg_price * (1 + stopLossPercentage / 100)

// Vérification si les niveaux de stop loss sont atteints
longStopLossReached = strategy.position_size > 0 and low <= longStopLossLevel
shortStopLossReached = strategy.position_size < 0 and high >= shortStopLossLevel

// Tracé des formes de stop loss
plotshape(series=longStopLossReached, style=shape.xcross, location=location.belowbar, color=color.red, size=size.small, title="Stop Loss Long")
plotshape(series=shortStopLossReached, style=shape.xcross, location=location.abovebar, color=color.red, size=size.small, title="Stop Loss Short")

// Fermeture des positions en cas de prise de profit ou de stop loss
strategy.close("Long", when=longTakeProfitReached or longStopLossReached)
strategy.close("Short", when=shortTakeProfitReached or shortStopLossReached)