Estratégia de caminhada aleatória


Data de criação: 2023-10-09 16:10:24 última modificação: 2023-10-09 16:10:24
cópia: 0 Cliques: 707
1
focar em
1617
Seguidores

Visão geral

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.

Princípio da estratégia

A estratégia é executada de forma aleatória através das seguintes partes:

  1. Configure os parâmetros a, c e m gerados por números aleatórios, bem como a seed inicial.

  2. 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.

  3. 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.

  4. Configure as condições de stop loss e a amplitude de stop loss e stop loss em termos percentuais.

  5. 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.

Análise de vantagens

  • 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.

Análise de Riscos

  • 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.

Direção de otimização

  • 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.

Resumir

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.

Código-fonte da estratégia
/*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()