Este artigo apresenta principalmente uma estratégia de negociação quantitativa chamada
A lógica de negociação desta estratégia é muito simples e clara.
Use o cruzamento de SMA de 14 períodos e SMA de 28 períodos como o sinal para longo e curto. Quando a SMA de 14 períodos ultrapassa a SMA de 28 períodos, vá longo. Quando a SMA de 14 períodos ultrapassa a SMA de 28 períodos, vá curto.
Calcule o indicador ATR e multiplique por um fator para obter a posição de take profit dinâmica.
Quando a direção da posição é longa, adicione o preço alto e a largura do canal de lucro dinâmico para obter a linha de lucro longo.
Uma vez que o preço excede esta linha dinâmica de take profit, take profit para sair imediatamente.
Através das etapas acima, esta estratégia atinge um efeito simples, mas eficiente de rastreamento de lucro e captação rápida de lucro. O canal ATR fornece a capacidade de ajuste dinâmico para a linha de captação de lucro, enquanto a condição de 1 barra recém-adicionada garante que a linha de captação de lucro seja ativada apenas sob condições favoráveis de mercado súbitas. Isso pode reduzir efetivamente a saída prematura devido à captação de lucro.
A
A ideia é simples e clara, fácil de compreender e implementar, adequada para os iniciantes aprenderem.
O ATR dinâmico pode automaticamente acompanhar os lucros e evitar deixar os lucros na mesa.
Adicionar 1 bar condição alta/baixa impede que o take profit seja acionado em movimentos menores.
O comprimento do ATR e o multiplicador podem ser ajustados para ajustar o grau de obtenção de lucro.
Pode sair rapidamente para capturar movimentos de preço favoráveis.
O valor da posição em risco deve ser calculado em função do valor da posição em risco.
Há também alguns riscos com esta estratégia:
A expansão súbita do ATR pode causar uma saída prematura do lucro.
Não consegue filtrar eficazmente o ruído do mercado, propenso a sinais falsos.
Confiar exclusivamente no crossover da SMA para a tomada de decisões, ineficaz para situações de mercado complexas.
Não existe um mecanismo de stop loss para limitar efetivamente as perdas.
O parâmetro padrão pode não corresponder a todos os produtos, sendo necessária uma otimização.
Para reduzir os riscos acima, podemos otimizar a partir dos seguintes aspectos:
Adicionar regras de filtragem baseadas em outros indicadores para eliminar falsos sinais.
Adicionar estratégias de stop loss para controlar estritamente a perda por negociação.
Otimize os parâmetros usando a Análise Walk Forward.
Otimizar separadamente os parâmetros para diferentes produtos.
Aumentar os modelos de aprendizagem de máquina para decisões mais inteligentes.
Com base na análise de risco, as direcções de otimização incluem principalmente:
Adicionar filtro de sinal: Adicionar regras de filtragem baseadas em indicadores como MACD, Bollinger Band etc. após o sinal para evitar ruído.
Adicionar linha de stop lossO valor da linha de stop loss baseada no ATR ou na trailing stop deve ser calculado em função da perda de transação.
Optimização de parâmetrosOptimize parâmetros como comprimento ATR, ATR Multiplier usando aprendizado de máquina.
Ajuste de risco: dimensionamento das posições, parâmetros de risco baseados em diferentes produtos.
Modelo de fusãoCombine esta estratégia com aprendizagem de máquina, redes neurais para melhorar a precisão.
Intervenção manual: Permitir a substituição manual dos níveis de take profit/stop loss em momentos críticos.
Com a otimização nas direcções acima, a rentabilidade e a estabilidade da estratégia podem ser muito melhoradas.
Em resumo, a
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Peter_O //@version=5 strategy("TrailingTakeProfit example", overlay=true, margin_long=100, margin_short=100, default_qty_value = 1, initial_capital = 100) longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28)) shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28)) if longCondition strategy.entry("Long", strategy.long, comment="long", alert_message="long") if shortCondition strategy.entry("Short", strategy.short, comment="short", alert_message="short") atr_length=input.int(7, title="ATR Length") atr_multiplier = input.float(1.5, title="ATR Multiplier") atr_multiplied = atr_multiplier * ta.atr(atr_length) ttp_top_bracket = strategy.position_size>0 ? high[1]+atr_multiplied : na ttp_bottom_bracket = strategy.position_size<0 ? low[1]-atr_multiplied : na plot(ttp_top_bracket, title="ttp_top_bracket", color=color.lime, style=plot.style_linebr, offset=1) plot(ttp_bottom_bracket, title="ttp_bottom_bracket", color=color.red, style=plot.style_linebr, offset=1) strategy.exit("closelong", from_entry="Long", limit=ttp_top_bracket, alert_message = "closelong") strategy.exit("closeshort", from_entry="Short", limit=ttp_bottom_bracket, alert_message = "closeshort") // var table alertsDisplayTable = table.new(position.top_right, 1, 5, color.black) // if barstate.islastconfirmedhistory // table.cell(alertsDisplayTable, 0, 0, "TradingConnector-compatible alerts sent", text_color=color.white) // table.cell(alertsDisplayTable, 0, 1, "at Long Entry: long", text_color=color.white) // table.cell(alertsDisplayTable, 0, 2, "at Short Entry: short", text_color=color.white) // table.cell(alertsDisplayTable, 0, 3, "at Long Exit: closelong", text_color=color.white) // table.cell(alertsDisplayTable, 0, 4, "at Short Exit: closeshort", text_color=color.white)