В процессе загрузки ресурсов... загрузка...

Стратегия случайной ходьбы

Автор:Чао Чжан, Дата: 2023-10-09 16:10:24
Тэги:

Обзор

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

Логика стратегии

Основными частями, реализующими случайную торговлю, являются:

  1. Установите параметры a, c и модуль m для генерации случайных чисел, а также начальное семя.

  2. Определите функцию генерации случайных чисел GetRandom с использованием линейного конгруенциального алгоритма для генерации случайных чисел между 0-m.

  3. На каждом свечнике, если нет позиции, сравнить сгенерированный размер случайного числа, идти длинный, когда больше, чем м/2, иначе идти короткий.

  4. Установите условия стоп-лосса и прибыли в процентах.

  5. Установите период обратного теста по временным рамкам.

С помощью вышеперечисленных шагов стратегия реализует полностью случайные длинные/короткие операции. Когда случайное число больше 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()

Больше