Стратегия случайного брожения - это автоматическая торговая стратегия, основанная на генерировании случайных чисел. Стратегия использует линейный генератор излишеств, произвольно генерирующий числа в зависимости от настроенного семени, число больше, чем при понижении, и меньше, чем при понижении, чтобы получить свободную позицию.
В основном эта стратегия реализуется через следующие части:
Установка параметров a, c и модуля m, генерируемых случайными числами, и первоначального семени.
Определяет функцию генерации случайных чисел GetRandom, использующую линейный ароматный алгоритм для генерации случайных чисел от 0 до m.
В каждой K-линии, если в данный момент нет позиций, то сравнивается генерируемое случайное число, большее, чем 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()