
Самостоятельно адаптируемая многосигнальная равнолинейная динамическая кодировка позиций - это количественная торговая стратегия, разработанная специально для криптовалютного рынка, которая сочетает в себе индикаторы технического анализа и динамическую систему управления позициями. Основная идея заключается в использовании перекрестных сигналов быстрого и медленного движения средних и случайных относительно сильных слабых показателей (Стохастический RSI) для определения направления рыночных тенденций и времени входа в рынок, при этом используется пирамидальный метод набора позиций в ответ на обратную коррекцию цены.
Стратегия основана на нескольких ключевых технологических компонентах:
Двойная система скользящих средних: Стратегия использует пересечение двух движущихся средних (быстрое и медленное) в качестве основного входного сигнала. Пользователь может выбрать простое движущееся среднее (SMA), показательное движущееся среднее (EMA) или движущееся среднее (HMA), а также может выбрать пересечение средней линии вверх или вниз в зависимости от рыночных условий.
Рандомный относительно слабый индикатор (Stochastic RSI)В качестве вспомогательного входного условия вызывает сигнал к покупке, когда стохастический RSI на линии K достигает уровня 5 и в то же время быстрое движение среднего значения находится в восходящем тренде ((повышение 5 циклов подряд)).
Динамическая система безопасности заказовПосле первоначального входа в систему стратегия устанавливает несколько безопасных заказов ниже заданного уровня цены. Эти уровни цены рассчитываются на основе параметров отклонения цены и коэффициента масштабирования шагов.
Динамическая корректировка размеров позиций: размер каждого заказа на безопасность постепенно увеличивается в зависимости от масштабирующего фактора заказа на безопасность, образуя нарастающую структуру наложения.
Механизм уравнения целевой прибыли: Стратегия устанавливает целевой уровень прибыли на основе средней цены за позицию, и все позиции будут ликвидированы, когда цена поднимется до этого уровня.
Процесс реализации стратегии выглядит следующим образом:
Многомерный входный сигнал: сочетание трендового показателя (движущаяся средняя) и динамического показателя (стохастический RSI), повышение точности входа и уменьшение ложных сигналов.
Высокая степень адаптацииПримечание: параметры стратегии могут быть настроены в зависимости от рыночных условий и личных предпочтений в отношении риска.
Эффект усреднения затратС помощью предварительно установленной системы безопасных заказов, автоматически набирая позиции при падении цены, эффективно снижается средняя стоимость хранения позиций и повышается вероятность получения прибыли.
Оптимизация финансовой эффективностиВ соответствии с концепцией стоимостного инвестирования, увеличивающийся размер безопасных заказов делает распределение средств более эффективным, и больше средств распределяется по более низким ценам.
Автоматизация исполненияПосле установки параметров, стратегия может работать полностью автоматически, без какого-либо вмешательства человека, сокращая эмоциональные торговые решения.
Гибкая адаптация рынкаСтремиться к тому, чтобы быть в лучшем состоянии, чтобы быть в лучшем состоянии, чтобы быть в лучшем состоянии.
Бесконечные рискиВ стратегическом дизайне явно не предусмотрено механизм остановки убытков, что может привести к значительным убыткам в условиях продолжающегося падения. В экстремальных рыночных условиях, таких как падение цен на активы или возврат к нулю, может привести к серьезным потерям капитала.
Высокий спрос на финансированиеПоскольку стратегия требует резервировать средства для нескольких безопасных заказов, причем размер каждого заказа увеличивается, фактически требуемые средства могут значительно превышать первоначальные вложения, инвесторам необходимо убедиться, что у них есть достаточно свободных средств.
Быть многостороннимПримечание: текущая стратегия разработана только для поддержки многонаправленности и неэффективна в долгосрочных нисходящих тенденциях. Рекомендуется применять эту стратегию для в целом хороших активов.
Параметр Чувствительность: эффективность стратегии в значительной степени зависит от параметров, неправильные параметры могут привести к преждевременному вызову безопасных заказов или чрезмерному наполнению запасов.
Ловушка средней стоимостиХотя стратегия заключается в снижении средних затрат за счет увеличения запасов, если стоимость активов будет падать и не восстановиться, это может привести к “последующему падению” и финансовой изоляции.
Способы смягчения риска включают в себя: применение этой стратегии к активам, которые в целом выглядят хорошо; резервирование достаточного количества средств для реагирования на безопасные заказы; регулярная проверка соответствия параметров стратегии рыночной среде; установление максимального количества ограничений на безопасные заказы; рассмотрение возможности добавления в стратегию глобального механизма остановки потерь.
Увеличение убыточностиНаиболее очевидным недостатком стратегии является отсутствие механизма остановки убытков. Рекомендуется добавление общего параметра остановки убытков, когда убытки достигают определенной пропорции, принудительное ликвидация всех позиций для защиты средств.
Присоединяйтесь к фильтру рыночных тенденций: можно добавить более длительные циклы, такие как долгосрочные движущиеся средние или индикаторы ADX, и выполнять стратегию только в том случае, если основная тенденция совпадает, чтобы избежать ненужных пополнений в явных медвежьих рынках.
Оптимизация логики запуска безопасностиВ настоящее время безопасные заказы основаны только на ценовых отклонениях, которые можно рассматривать в сочетании с объемом оборота, волатильностью или другими техническими показателями, чтобы сделать их более интеллектуальными.
Динамическая корректировка целевой прибыли: можно скорректировать уровень целевой прибыли в зависимости от волатильности рынка или динамики ценового поведения после входа, установив более высокую целевую прибыль в условиях высокой волатильности рынка.
Добавление пустоты: Стратегия расширения поддерживает направление диверсификации, что позволяет ей быть столь же эффективной в нисходящих тенденциях, повышая общерыночную адаптивность стратегии.
Добавить контроль коррекцииНастройка максимального ограничения на вывод, приостановка торговли или перезагрузка параметров, когда стратегический вывод превышает порог, чтобы предотвратить продолжающиеся потери в неблагоприятных рыночных условиях.
Оптимизация циклических параметровДобавлена функция автоматической оптимизации параметров, регулярная корректировка параметров на основе недавних рыночных данных, позволяющая стратегии адаптироваться к изменению рыночных особенностей.
Эти направления оптимизации направлены на повышение способности стратегии к управлению рисками, рыночной адаптации и долгосрочной стабильности, позволяя ей достигать относительно стабильной производительности в различных рыночных условиях.
Самостоятельно адаптируемая многосигнальная равнолинейная динамическая кодируемая стратегия позиций обеспечивает систематизированный способ торговли на криптовалютном рынке путем объединения входных сигналов с движущимися средними и случайными относительно сильными показателями в сочетании с системой динамически безопасных заказов. Ее основное преимущество заключается в возможности автоматически постепенно наращивать позиции при реверсии цены, снижать среднюю стоимость позиции и получать прибыль при ее восстановлении.
Тем не менее, эта стратегия также сопряжена с очевидными рисками, в частности, отсутствием механизма остановки убытков и возможными потерями средств в условиях продолжающейся падения. При использовании этой стратегии инвесторы должны полностью понимать ее рисковые характеристики, обеспечить достаточный запас средств и рассмотреть возможность добавления дополнительных мер контроля риска.
С помощью разумной настройки параметров и направления оптимизации рекомендаций стратегия может стать мощным инструментом для долгосрочных инвесторов в криптовалюты, особенно для инвесторов, которые верят в долгосрочную ценность конкретных криптоактивов, но хотят оптимизировать стоимость входа. В практическом применении рекомендуется сначала провести полное тестирование в симуляторной среде и постоянно корректировать и оптимизировать параметры стратегии в зависимости от фактической рыночной производительности.
/*backtest
start: 2024-08-19 00:00:00
end: 2025-08-18 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"BTC_USDT","balance":5000}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//
//@version=6
strategy(title = 'PEPE- DCA Strategy', overlay = true, pyramiding = 11, process_orders_on_close = true, commission_value = 0.1)
Base_order_size = input.int(1500, 'Base order Size')/close
Safety_order_size = input.int(350, 'Save order')/close
Triger_Type = input.string('Over', 'Entry at Cross Over / Under', options = ['Over', 'Under'], group = 'Deal start condition > Trading View custom signal', inline = '1', tooltip = 'Deal start condition decision')
Short_Moving_Average = input.string('SMA', 'Short Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '2', options = ['SMA', 'EMA', 'HMA'])
Short_Period = input.int(17, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '2')
Long_Moving_Average = input.string('HMA', 'Long Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '3', options = ['SMA', 'EMA', 'HMA'])
Long_Period = input.int(26, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '3')
Target_profit = input.float(1.9, 'Target profit (%)', step = 0.05, group = 'Take profit / Stop Loss', inline = '1') * 0.01
Max_safety_trades_count = input.int(5, 'Max safety trades count', maxval = 10, group = 'Safety orders', inline = '1')
Price_deviation = input.float(2.45, 'Price deviation to open safety orders (% from initial order)', step = 0.01, group = 'Safety orders', inline = '2') * 0.01
Safety_order_volume_scale = input.float(1.85, 'Safety order volume scale', step = 0.01, group = 'Safety orders', inline = '3')
Safety_order_step_scale = input.float(1.61, 'Safety order step scale', step = 0.01, group = 'Safety orders', inline = '3')
// Position status
status_none = strategy.opentrades == 0
status_long = strategy.position_size[1] == 0 and strategy.position_size > 0
/////////// Moving_Averages
Short_Moving_Average_Line = Short_Moving_Average == 'SMA' ? ta.sma(close, Short_Period) : Short_Moving_Average == 'EMA' ? ta.ema(close, Short_Period) : Short_Moving_Average == 'HMA' ? ta.sma(close, Short_Period) : na
Long_Moving_Average_Line = Long_Moving_Average == 'SMA' ? ta.sma(close, Long_Period) : Long_Moving_Average == 'EMA' ? ta.ema(close, Long_Period) : Long_Moving_Average == 'HMA' ? ta.sma(close, Long_Period) : na
///////////// Moving_Averages long condition
Base_order_Condition = Triger_Type == 'Over' ? ta.crossover(Short_Moving_Average_Line, Long_Moving_Average_Line) : ta.crossunder(Short_Moving_Average_Line, Long_Moving_Average_Line) // Buy when close crossing lower band
//////////////////// Savety order deviation
safety_order_deviation(index) =>
Price_deviation * math.pow(Safety_order_step_scale, index - 1)
pd = Price_deviation
ss = Safety_order_step_scale
//////// Cal of deviation steps
step(i) =>
i == 1 ? pd : i == 2 ? pd + pd * ss : i == 3 ? pd + (pd + pd * ss) * ss : i == 4 ? pd + (pd + (pd + pd * ss) * ss) * ss : i == 5 ? pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss : i == 6 ? pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss : i == 7 ? pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss : i == 8 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 9 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 10 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : na
long_line(i) =>
close[1] - close[1] * step(i)
////////// Savety order Triger
Safe_order_line(i) =>
i == 0 ? ta.valuewhen(status_long, long_line(0), 0) : i == 1 ? ta.valuewhen(status_long, long_line(1), 0) : i == 2 ? ta.valuewhen(status_long, long_line(2), 0) : i == 3 ? ta.valuewhen(status_long, long_line(3), 0) : i == 4 ? ta.valuewhen(status_long, long_line(4), 0) : i == 5 ? ta.valuewhen(status_long, long_line(5), 0) : i == 6 ? ta.valuewhen(status_long, long_line(6), 0) : i == 7 ? ta.valuewhen(status_long, long_line(7), 0) : i == 8 ? ta.valuewhen(status_long, long_line(8), 0) : i == 9 ? ta.valuewhen(status_long, long_line(9), 0) : i == 10 ? ta.valuewhen(status_long, long_line(10), 0) : na
l1 = Safe_order_line(1)
l2 = Safe_order_line(2)
l3 = Safe_order_line(3)
l4 = Safe_order_line(4)
l5 = Safe_order_line(5)
l6 = Safe_order_line(6)
l7 = Safe_order_line(7)
l8 = Safe_order_line(8)
l9 = Safe_order_line(9)
l10 = Safe_order_line(10)
//// take profit
TP_line = strategy.position_avg_price * (1 + Target_profit)
//Size of safety orders
safety_order_size(i) =>
Safety_order_size * math.pow(Safety_order_volume_scale, i - 1)
///plots
plot(Short_Moving_Average_Line, 'Short MA', color = color.new(color.red, 0), style = plot.style_line)
plot(Long_Moving_Average_Line, 'Long MA', color = color.new(color.green, 0), style = plot.style_line)
plot(strategy.opentrades == 1 ? l1 : na, 'Safety order1',color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 2 ? l2 : na, 'Safety order2', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 3 ? l3 : na, 'Safety order3', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 4 ? l4 : na, 'Safety order4', color =color.red, style = plot.style_linebr)
plot(strategy.opentrades == 5 ? l5 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 6 ? l6 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 7 ? l7 : na, 'Safety order6', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 8 ? l8 : na, 'Safety order7', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 9 ? l9 : na, 'Safety order8', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 10 ? l10 : na, 'Safety order9', color = color.red, style = plot.style_linebr)
plot(strategy.position_size > 0 ? TP_line : na, 'Take Profit', color = color.green, style = plot.style_linebr)
///////////////SToch-Rsi
smoothK = input.int(1, "ST_RSI -K settings for long", minval=1)
smoothD = input.int(3, "ST_RSI-D settings for long", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(9, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
////////buy cond- ST_RSI
bk = ta.crossover(k,5)
r = ta.rising(Short_Moving_Average_Line,5)
buy = bk and r
//Stradegy mod
if Base_order_Condition or buy
if (Base_order_Condition or buy ) and strategy.opentrades == 0
strategy.entry('Base order', strategy.long, qty = Base_order_size )
for i = 1 to Max_safety_trades_count by 1
i_s = str.tostring(i)
if strategy.opentrades <= i and strategy.position_size > 0 and not(strategy.position_size == 0)
strategy.entry('Safety order' + i_s, strategy.long, qty = safety_order_size(i) , limit = Safe_order_line(i))
for i = 1 to Max_safety_trades_count by 1
i_s = str.tostring(i)
if status_none
strategy.cancel('Safety order' + i_s)
strategy.exit('TP/SL', 'Base order', limit = TP_line)
strategy.exit('TP/SL', 'Safety order' + i_s, limit = TP_line)
//