La estrategia de paseo aleatorio es una estrategia de trading automatizada basada en la generación de números aleatorios. Utiliza un generador de congruencia lineal para generar números aleatoriamente basados en un conjunto de semillas.
Las partes principales que implementan el comercio aleatorio son:
Establezca los parámetros a, c y módulo m para la generación de números aleatorios, así como la semilla inicial.
Define la función de generación de números aleatorios GetRandom utilizando el algoritmo congruente lineal para generar números aleatorios entre 0-m.
En cada candelabro, si no hay posición, compare el tamaño del número aleatorio generado, vaya largo cuando sea mayor a m/2, de lo contrario vaya corto.
Establezca las condiciones de stop loss y take profit en porcentaje.
Establecer el período de prueba posterior por período de tiempo.
A través de los pasos anteriores, la estrategia realiza operaciones largas / cortas completamente aleatorias. Cuando el número aleatorio es mayor que m / 2, abre una posición larga, de lo contrario abre corta, luego establece stop loss y take profit para salir de las posiciones.
Una lógica estratégica simple y clara, fácil de entender e implementar.
El comercio aleatorio evita efectivamente los impactos emocionales y reduce los errores subjetivos.
Parámetros de generación de números aleatorios personalizables para ajustar la aleatoriedad
Los valores de las pérdidas y pérdidas de las operaciones de inversión se calcularán en función de los resultados obtenidos.
Apoya la optimización de parámetros a través de pruebas de retroceso de diferentes parámetros
El comercio aleatorio puede dar lugar a una tendencia a largo plazo no definida y a una rentabilidad incierta.
No poder ajustar las posiciones en función de las condiciones del mercado, podría perder oportunidades de tendencia.
Limitación de las ganancias individuales, alto riesgo de extracción.
Necesita una relación stop loss/take profit razonable para evitar pérdidas significativas.
Las posiciones abiertas y cerradas frecuentes debido a la aleatoriedad aumentan los costos de negociación.
Se requiere una prueba posterior suficiente para verificar la configuración razonable de los parámetros, no se utilice a ciegas.
Los riesgos podrían reducirse añadiendo un juicio de tendencia, optimizando el mecanismo de stop loss, controlando estrictamente las ganancias/pérdidas individuales, etc.
Añadir juicio de tendencia para evitar el comercio contra la tendencia.
Añadir el tamaño de las posiciones basado en el cambio de capital.
Optimice el algoritmo de generación de números aleatorios para una mejor aleatoriedad.
Porcentaje dinámico de pérdidas/ganancias.
Limita la frecuencia de las órdenes.
Optimización de pruebas de retroceso de múltiples parámetros.
La estrategia de paseo aleatorio realiza el comercio mecánico a través de números aleatorios controlados largo / corto. Tiene una fuerte aleatoriedad y evita los impactos emocionales y las operaciones erróneas subjetivas. Pero las entradas aleatorias también pueden perder oportunidades de tendencia, ganancias únicas limitadas, necesitan mecanismos optimizados de control de riesgos. En general, la estrategia es adecuada para verificar las ideas comerciales, evaluar los impactos de los parámetros, pero se necesita una evaluación cuidadosa para su uso práctico.
/*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()