Estratégia de negociação personalizada do dia da semana

Autora:ChaoZhang, Data: 2023-09-26 20:49:44
Tags:

Resumo

Esta é uma estratégia de negociação customizada longa / curta para bitcoin que permite testar o desejo ou curto em diferentes dias da semana.

Certifique-se de estar no prazo diário ao visualizar o desempenho e o histórico de negociações para garantir que o script funcione como pretendido e que tenha o máximo de dados históricos do TradingView.

Estratégia lógica

A lógica central da estratégia é permitir que o utilizador escolha long, short ou nenhuma negociação para cada dia da semana.

Primeiro, permite ao usuário definir o intervalo de datas para backtesting, incluindo mês de início, dia, ano e final mês, dia, ano.

Em seguida, usa um conjunto de intervalos de tempo para armazenar a representação numérica de cada dia da semana, de domingo 0 a sábado 6.

Outra matriz timeframes_options é usada para armazenar a escolha de longa, curta ou nenhuma negociação para cada dia.

Em um loop for, a estratégia verifica se o dia de negociação atual corresponde a um dia na matriz de intervalos de tempo.

Se a opção não for None, abre uma posição na direção adequada com base no longo ou curto escolhido.

Assim, a estratégia pode negociar long/short no intervalo de datas definido com base nas configurações para cada dia da semana.

Análise das vantagens

A principal vantagem desta estratégia é fornecer negociação longa / curta altamente personalizável. O usuário tem total liberdade na escolha da direção de negociação para cada dia da semana.

Ao contrário das estratégias de negociação semanais fixas, esta pode ser ajustada de forma flexível.

O intervalo de datas de backtest também é altamente flexível, permitindo testar qualquer período especificado pelo usuário para ver quais combinações de datas apresentam melhor desempenho.

A lógica de negociação é muito clara e simples, fácil de entender e modificar.

A estratégia também fecha automaticamente posições em mudança de direção todos os dias, evitando riscos desnecessários.

Análise de riscos

O principal risco é que as selecções de negociação diária escolhidas pelo utilizador possam não corresponder a todas as faixas de datas.

Por exemplo, longos dias da semana e finais de semana curtos podem ser eficazes em alguns períodos, mas falhar em outros.

Assim, os intervalos de datas devem ser cuidadosamente testados e não depender de um resultado de backtest.

Outro risco é a incapacidade de cortar perdas a tempo quando a direção muda diariamente.

Em geral, a estratégia depende fortemente da otimização e requer testes suficientes para encontrar conjuntos de parâmetros adequados a diferentes condições de mercado.

Orientações de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Adicione a lógica de stop loss na mudança diária de direção, definindo trailing stops quando as posições são lucrativas para limitar os drawdowns.

  2. Adicione um filtro, tomando apenas sinais sobre a quebra de um determinado dia alto / baixo, evitando negociação sem tendência.

  3. Reduzir o dimensionamento das posições em períodos de alta volatilidade e aumentar quando a volatilidade for baixa para controlar o risco.

  4. Adicione aprendizado de máquina às seleções de dias de negociação, julgando a probabilidade de cada dia com base em dados históricos, gerando direções diárias dinâmicas.

  5. Adicione lógica para lidar com eventos repentinos como notícias importantes, interrompendo a negociação para evitar ser pego fora de campo.

Conclusão

Esta estratégia fornece capacidade de negociação longa / curta altamente flexível através de seleções diárias de direção. Os usuários podem combinar livremente testes para parâmetros ideais. Mas tem altos requisitos de otimização, necessitando de testes extensos para encontrar configurações adequadas a diferentes mercados. Adicionar aprimoramentos como paradas, filtros, ajustes dinâmicos pode reduzir o risco e melhorar a robustez. Com otimização prudente de parâmetros, a estratégia pode se tornar uma ferramenta de negociação direcional diária eficaz.


/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

//@version=4
// strategy("Day of Week Custom Buy/Sell Strategy", overlay=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 6, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 14, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

timeframes = array.new_int(7, 1)
timeframes_options = array.new_string(7, 'None')

array.set(timeframes,0,7)
array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='sunday'))
array.set(timeframes,1,1)
array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='monday'))
array.set(timeframes,2,2)
array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='tuesday'))
array.set(timeframes,3,3)
array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='wednesday'))
array.set(timeframes,4,4)
array.set(timeframes_options,4, input(defval='None', options=['Long','Short','None'], title='thursday'))
array.set(timeframes,5,5)
array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='friday'))
array.set(timeframes,6,6)
array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='saturday'))



for i = 0 to array.size(timeframes) - 1
    
    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        strategy.close_all()

    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        if array.get(timeframes_options, i) == 'Long'
            strategy.entry("Long", strategy.long, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
        else if array.get(timeframes_options, i) == 'Short'
            strategy.entry("Short", strategy.short, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))


Mais.