A estratégia de deslocamento aleatório é uma estratégia de negociação automática baseada na geração de números aleatórios. A estratégia usa um gerador de isótopos lineares para gerar números aleatórios de sementes de acordo com a configuração. Os números são maiores do que o valor mínimo e menores do que o valor mínimo, para permitir a entrada aleatória em posições de longo prazo.
A estratégia é executada de forma aleatória através das seguintes partes:
Configure os parâmetros a, c e m gerados por números aleatórios, bem como a seed inicial.
Define a função de geração de números aleatórios GetRandom, que usa um algoritmo linear isomorfo para gerar números aleatórios entre 0 e m.
Em cada linha K, se não houver posição atual, o número aleatório gerado será maior do que m/2, caso contrário, será vazio.
Configure as condições de stop loss e a amplitude de stop loss e stop loss em termos percentuais.
Configure o ciclo de retrospecção por intervalo de tempo.
Através dos passos acima, a estratégia permite a realização de uma operação de tomada de vazio totalmente aleatória. Quando o número aleatório é maior que m/2, é aberto um pedido de tomada de vazio, caso contrário, é aberto um pedido de vazio e, em seguida, é configurado um stop loss para sair da posição. O período de retomada pode ser configurado de forma personalizada.
A lógica da estratégia é simples, clara e fácil de entender.
A negociação aleatória pode ser eficaz para evitar a manipulação emocional e reduzir a manipulação subjetiva.
Parâmetros de algoritmo de geração de números aleatórios personalizáveis, ajustando a aleatoriedade.
Pode definir com flexibilidade as condições de suspensão de perda para controlar o lucro individual.
Suporte para a otimização de parâmetros de retorno, facilitando o teste do impacto de diferentes parâmetros no rendimento geral.
A negociação aleatória pode não ter um rumo claro a longo prazo, e os lucros são incertos.
Não é possível ajustar as posições de acordo com a situação do mercado, podendo perder oportunidades de tendência.
A taxa de juros é muito baixa, mas o risco de rescisão é alto.
É necessário definir uma proporção razoável de stop loss para evitar perdas excessivas.
A aleatoriedade pode levar a posições baixas frequentes, aumentando as taxas de transação.
A racionalidade da configuração dos parâmetros de validação precisa ser totalmente testada e não pode ser usada sem escrúpulos.
Pode reduzir o risco através da adição de funções de julgamento de tendências, reduzir o número de posições abertas aleatoriamente, otimizar o mecanismo de parada de perdas e controlar rigorosamente os perdas individuais.
Aumentar o discernimento de tendências e evitar posições em contra-balanço.
Adjuntar-se à administração de posições, ajustando o tamanho das posições de acordo com a mudança de capital.
Otimizar algoritmos de geração de números aleatórios para aumentar a aleatoriedade.
A correção dinâmica do valor de suspensão de prejuízo.
Adição de restrição de frequência de abertura de posição.
A retrospectiva de combinação de múltiplos parâmetros para encontrar o parâmetro otimizado.
A estratégia de corrida aleatória permite a realização de negociações mecânicas por meio de controle aleatório de números. A estratégia é aleatória, não é influenciada por emoções pessoais e evita o risco de manipulação subjetiva. Mas a abertura aleatória de posições também pode perder oportunidades de tendência, receita individual limitada e necessidade de otimizar o mecanismo de controle de risco.
/*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()