La estrategia de desplazamiento aleatorio es una estrategia de negociación automática basada en la generación de números aleatorios. La estrategia utiliza un generador de isótopos lineal para generar números aleatorios de semillas según la configuración, los números son más grandes que los que se hacen en el extremo superior y más pequeños que los que se hacen en el extremo inferior.
La estrategia se ejecuta principalmente a través de las siguientes partes:
Establece los parámetros a, c y m generados por números aleatorios, así como la semilla inicial.
Define la función de generación de números aleatorios GetRandom, que genera números aleatorios entre 0 y m utilizando un algoritmo lineal isomorfo.
En cada línea K, si no hay posición en ese momento, el número aleatorio generado es mayor que m/2, o si no hay posición en ese momento.
Establezca las condiciones de parada de pérdidas y la amplitud de parada de pérdidas y pérdidas en porcentaje.
Establezca el ciclo de retraso a través de un período de tiempo.
A través de los pasos mencionados anteriormente, la estrategia logra una operación de toma de más y de menos completamente aleatoria. Si el número aleatorio es mayor que m/2, abre más órdenes, de lo contrario abre una carta en blanco, y luego establece el stop loss para salir de la posición. El ciclo de retracción puede configurarse de forma personalizada.
La lógica de la estrategia es simple, clara y fácil de entender.
Las operaciones aleatorias son efectivas para evitar la influencia emocional y reducir la manipulación subjetiva.
Se pueden personalizar los parámetros de los algoritmos de generación de números aleatorios para ajustar la aleatoriedad.
Se puede configurar con flexibilidad las condiciones de parada de pérdidas para controlar las pérdidas individuales.
Apoya la optimización de los parámetros de retroalimentación para probar el impacto de los diferentes parámetros en el rendimiento general.
Las operaciones aleatorias pueden no tener una tendencia clara a largo plazo, y los beneficios son inciertos.
No puede ajustar su posición a la situación del mercado y puede perder oportunidades de tendencia.
El beneficio individual es limitado y el riesgo de retiro es alto.
Se debe establecer una proporción razonable de stop loss para evitar pérdidas excesivas.
La aleatoriedad puede conducir a la apertura frecuente de posiciones cerradas, lo que aumenta los costos de las transacciones.
Se requiere un análisis exhaustivo de la racionalidad de la configuración de los parámetros de verificación, no se puede usar a ciegas.
Se puede reducir el riesgo mediante la adición de funciones como el juicio de tendencias, la reducción del número de posiciones abiertas al azar, la optimización del mecanismo de stop loss y el control estricto de las pérdidas individuales.
En este sentido, el informe de la Comisión de Valores de las Naciones Unidas (CNUV) sobre el cambio climático, publicado en el Diario Oficial de las Naciones Unidas, hace referencia a:
Adjuntar a la administración de posiciones y ajustar el tamaño de las posiciones según los cambios en los fondos.
Optimización de los algoritmos de generación de números aleatorios para mejorar la aleatoriedad.
El cambio de la velocidad de los paros de pérdidas se produce cuando el parón de pérdidas es dinámicamente ajustado.
Se añade una restricción de la frecuencia de apertura de posiciones.
La respuesta de combinación de múltiples parámetros busca el parámetro óptimo.
La estrategia de movimiento aleatorio permite la realización de operaciones mecánicas mediante el control aleatorio de los números. La estrategia es aleatoria, no está influenciada por las emociones personales y evita el riesgo de manipulación errónea subjetiva. Sin embargo, la apertura aleatoria de posiciones también puede perder oportunidades de tendencia, los beneficios individuales son limitados y se necesita un mecanismo de control de riesgo optimizado. En general, la estrategia es adecuada para verificar la idea de negociación y comprender el impacto de la configuración de los parámetros en los beneficios, pero la aplicación real requiere una evaluación cuidadosa.
/*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()