Стратегия случайного ходьбы - это автоматизированная стратегия торговли, основанная на генерации случайных чисел. Она использует линейный конгруенциальный генератор для случайного генерации чисел на основе семена набора.
Основными частями, реализующими случайную торговлю, являются:
Установите параметры a, c и модуль m для генерации случайных чисел, а также начальное семя.
Определите функцию генерации случайных чисел GetRandom с использованием линейного конгруенциального алгоритма для генерации случайных чисел между 0-m.
На каждом свечнике, если нет позиции, сравнить сгенерированный размер случайного числа, идти длинный, когда больше, чем м/2, иначе идти короткий.
Установите условия стоп-лосса и прибыли в процентах.
Установите период обратного теста по временным рамкам.
С помощью вышеперечисленных шагов стратегия реализует полностью случайные длинные/короткие операции. Когда случайное число больше m/2, она открывает длинную позицию, в противном случае она открывает короткую, затем устанавливает стоп-лосс и прибыль для выхода из позиций. Период обратного теста настраивается.
Простая и понятная логика стратегии, легко понятная и реализуемая.
Случайная торговля эффективно избегает эмоциональных воздействий и уменьшает субъективные ошибки.
Настраиваемые параметры генерации случайных чисел для корректировки случайности.
Гибкие параметры стоп-лосса и прибыли для контроля единой прибыли/убытка.
Поддерживает оптимизацию параметров путем обратного тестирования влияния различных параметров на общую прибыль.
Случайная торговля может привести к неопределенной долгосрочной тенденции и неопределенной прибыльности.
Невозможность корректировать позиции на основе рыночных условий, может упустить трендовые возможности.
Ограниченная единая прибыль, высокий риск использования.
Необходимо разумное соотношение стоп-лосс/стоп-прибыль, чтобы избежать значительных потерь.
Частые открытые/закрытые позиции из-за случайности увеличивают затраты на торговлю.
Достаточное обратное тестирование требуется для проверки разумных параметров, не используйте слепо.
Риски могут быть уменьшены путем добавления суждения о тренде, оптимизации механизма остановки убытков, строгого контроля единой прибыли/убытка и т.д.
Добавьте суждение о тренде, чтобы избежать торговли против тренда.
Добавить размеры позиций на основе изменения капитала.
Оптимизировать алгоритм генерации случайных чисел для лучшей случайности.
Динамический процент стоп-лосса/прибыли.
Ограничьте частоту приказов.
Оптимизация многопараметрового бэкстеста.
Стратегия случайного ходьбы реализует механическую торговлю через случайные числа, контролируемые длинным / коротким. Она имеет сильную случайность и избегает эмоциональных воздействий и субъективных ошибок. Но случайные записи также могут упустить возможности тренда, ограниченную единую прибыль, нуждается в оптимизированных механизмах контроля риска. В целом стратегия подходит для проверки торговых идей, оценки влияния параметров, но для практического использования необходима тщательная оценка.
/*backtest start: 2022-10-02 00:00:00 end: 2023-10-08 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //@author=Tr0sT strategy(title = "Random strategy", shorttitle = "Random", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100) a = 16 c = 10 m = 1000 GetRandom(prev) => GetRandom = (a * prev + c) % m seed = input(200, minval = 2, maxval = m) stopLoss = input(30, title = "Stop loss percentage(0.1%)") takeProfit = input(30, title = "Take profit percentage(0.1%)") curRandom = na curRandom := nz(curRandom[1]) == 0 ? seed : GetRandom(curRandom[1]) if (strategy.position_size == 0) if (curRandom >= m / 2) strategy.entry("Enter", strategy.long) else strategy.entry("Enter", strategy.short) strategy.exit("Exit", "Enter", loss = close * stopLoss / 1000 / syminfo.mintick, profit = close * takeProfit / 1000 / syminfo.mintick) // === Backtesting Dates === testPeriodSwitch = input(false, "Custom Backtesting Dates") testStartYear = input(2018, "Backtest Start Year") testStartMonth = input(3, "Backtest Start Month") testStartDay = input(6, "Backtest Start Day") testStartHour = input(08, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0) testStopYear = input(2018, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(14, "Backtest Stop Day") testStopHour = input(14, "Backtest Stop Hour") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false isPeriod = testPeriodSwitch == true ? testPeriod() : true // === /END if not isPeriod strategy.cancel_all() strategy.close_all()