Esta é uma estratégia de negociação multi-cabeça personalizada para o Bitcoin. Ela permite que você faça mais ou menos com base em diferentes dias de negociação da semana. Os preços podem ter tendência a se mover em uma direção ou outra em diferentes dias de negociação da semana. Esta estratégia permite que você teste diferentes dias de negociação em uma série de datas para aproveitar isso.
Certifique-se de que você usa um diagrama de linha quando visualiza o desempenho e o histórico de negociação para garantir que o script funcione como esperado e que você obtenha o máximo de dados históricos do Trading View.
A lógica central da estratégia é permitir que os usuários escolham entre fazer uma transação multihead todos os dias da semana, uma transação em branco ou não fazer nenhuma transação.
Em primeiro lugar, ele permite que o usuário configure o intervalo de data do teste, incluindo o mês, a data e o ano de início e o mês, a data e o ano de fim.
Em seguida, usa um conjunto de timeframes para armazenar representações numéricas de cada dia da semana, de 0 para o domingo a 6 para o sábado.
Outro conjunto de timeframes_options é usado para armazenar a opção de negociar todos os dias, com ou sem ações. Isso é configurado por uma opção de entrada.
No ciclo for, a estratégia verifica se o dia de negociação atual corresponde a um dia no conjunto de prazos. Se corresponde e a opção é diferente do dia anterior, primeiro feche todas as posições não liquidadas.
Se a opção não for sem casca, abra a posição na direção correspondente, de acordo com a opção de casca ou casca vazia.
Dessa forma, a estratégia pode executar a operação multihead em um determinado período de tempo, de acordo com a configuração de cada dia da semana.
A principal vantagem da estratégia é que ela oferece uma negociação multi-direção altamente personalizada. Os usuários podem escolher livremente qual direção de negociação para cada dia da semana.
Ao contrário de uma estratégia de negociação semanal fixa, a estratégia pode ser ajustada com flexibilidade. Se alguns dias não derem certo, pode ser facilmente modificado para negociar apenas outros dias.
O alcance das datas de detecção também é muito flexível, podendo ser testado em qualquer período de tempo especificado pelo usuário para ver quais combinações de datas funcionam melhor.
A lógica de transação é muito clara e simples, fácil de entender e modificar. O usuário pode ajustar os parâmetros sem precisar programar.
A estratégia também elimina automaticamente posições não liquidadas quando a direção do mercado muda diariamente, evitando riscos desnecessários.
O principal risco desta estratégia é que as opções de negociação diárias definidas pelo usuário não são necessariamente adequadas para todos os intervalos de datas.
Por exemplo, o trabalho de folga em dias úteis e no fim de semana pode ser eficaz em certos períodos de tempo, mas pode falhar em outros períodos.
Portanto, é preciso ser cauteloso ao testar diferentes intervalos de datas e não se basear em um único resultado de retrospectiva. O ajuste de parâmetros deve ser feito de acordo com a situação específica do mercado.
Outro risco é não conseguir parar a liquidação em tempo hábil com as mudanças diárias de direção. Isso pode levar à expansão dos prejuízos. Mas a estratégia tenta mitigar esse problema com a liquidação automática.
Em geral, a estratégia é mais dependente de otimização de parâmetros, e requer testes suficientes para encontrar um conjunto de parâmetros adequado para diferentes condições de mercado.
A estratégia pode ser otimizada através dos seguintes aspectos:
Aumentar a lógica de stop loss quando a direção do dia muda, definir stop loss móvel quando a posição está lucrativa, reduzir a retração.
A adição de um filtro para sinalizar quando o preço ultrapassa o máximo ou o mínimo de um determinado dia, evitando a repetição de negociações quando não há tendência.
Reduzir o tamanho da posição em períodos de alta volatilidade e aumentar a posição em períodos de baixa volatilidade para controlar o risco.
A opção de adicionar aprendizado de máquina ao dia de negociação determina a probabilidade de negociação diária com base nos dados históricos e gera a direção diária da dinâmica.
Aumentar a lógica de tratamento de eventos inesperados, como a suspensão de transações em caso de eventos financeiros significativos, para evitar a captura.
Esta estratégia oferece uma capacidade de negociação multi-cabeça altamente flexível através da seleção de direção diária. O usuário pode combinar testes de livre e encontrar o melhor parâmetro. Mas a estratégia tem um alto requisito de otimização, que requer uma grande quantidade de testes para encontrar configurações adequadas para diferentes mercados.
/*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)))