Esta estratégia gera sinais de negociação através do cálculo da soma das diferenças entre ROC e SMA.
A estratégia primeiro calcula a SMA com comprimento l e ROC. Em seguida, calcula a diferença k entre o preço de fechamento e a SMA. Em seguida, soma k por s dias e obtém soma. Quando a soma> 0, ele vai longo. Quando a soma<0, ele vai curto.
Em especial, no código:
Calcular SMA com comprimento l, obter um.
Calcular ROC com comprimento l, obter r.
Calcular a diferença entre o preço de fechamento e o SMA: k = fechamento - a.
Somar k para s dias, obter soma.
Se a soma for > 0, posição longa; se a soma for < 0, posição curta.
Sair quando a soma for < 0 para longa e a soma > 0 para curta.
A chave é somar a diferença k e usar o sinal de soma para os sinais de negociação. Quando k> 0 nos últimos dias, o preço está aumentando, então vá longo. Quando k < 0, o preço está diminuindo, então vá curto.
Esta simples estratégia de negociação a curto prazo tem as seguintes vantagens:
Os indicadores utilizados são simples e fáceis de compreender.
A filtragem pela diferença de indicadores pode encontrar oportunidades de negociação mais precisas.
Resumindo a diferença, é possível captar melhor as tendências a curto prazo.
Os parâmetros l e s podem ser ajustados para diferentes ciclos.
A lógica é clara e fácil de modificar e otimizar.
Alta eficiência de utilização do capital para negociações frequentes de curto prazo.
Há também alguns riscos:
Riscos mais elevados na negociação a curto prazo, perdas são possíveis.
Os parâmetros inadequados podem conduzir a uma troca excessiva ou a oportunidades perdidas.
Difícil de se adaptar a uma inversão de tendência, não haver stop loss pode levar a grandes perdas.
O ajustamento frequente dos parâmetros depende em grande medida da experiência do comerciante.
A alta frequência de negociação pode aumentar os custos de transação e o deslizamento.
Soluções:
Ajuste os parâmetros adequadamente para reduzir a frequência de negociação.
Adicionar indicadores de tendência para identificar reversões.
Otimizar o stop loss para controlar a perda de uma única transação.
Adicione otimização automática de parâmetros para reduzir a dependência da experiência.
Otimizar o modelo de execução de ordens para reduzir os custos de transação.
A estratégia pode ser ainda melhorada nos seguintes aspectos:
Otimizar métodos de cálculo de parâmetros, como algoritmos genéticos, para tornar os parâmetros adaptáveis.
Adicionar mais indicadores e filtros para melhorar a qualidade do sinal.
Melhorar a estratégia de stop loss, como trailing stop loss.
Otimizar estratégias de gestão de dinheiro como o controlo de pontos de risco.
Otimizar o modelo de execução de ordens com seguimento da tendência, controle de deslizamento, etc.
Adicione módulos de backtesting e otimização automática.
Adicionar avaliação quantitativa da qualidade do sinal.
Com estas otimizações, esta estratégia pode tornar-se um sistema de negociação de curto prazo mais abrangente, inteligente, estável e controlado.
Em resumo, esta estratégia gera sinais simples a partir de indicadores, com lógica clara e implementação fácil. Com melhorias adicionais em parâmetros, stop loss, gerenciamento de dinheiro, etc., pode se tornar uma estratégia comercial quantitativa valiosa. Mas nenhuma estratégia é perfeita. Os comerciantes ainda precisam aplicá-la racionalmente com base na preferência pessoal de risco.
/*backtest start: 2023-10-06 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Indicator Integrator Strat",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,currency="USD",initial_capital=662, overlay=false) l = input(defval=170,title="Length for indicator") s = input(title="Length of summation",defval=18) a= sma(close,l) r=roc(close,l) k=close-a sum = 0 for i = 0 to s sum := sum + k[i] //plot(a,color=yellow,linewidth=2,transp=0) //bc = iff( sum > 0, white, teal) //plot(sum,color=bc, transp=20, linewidth=3,style=columns) //plot(sma(sum,3),color=white) //hline(0) inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0) inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na ////buyEntry = crossover(source, lower) ////sellEntry = crossunder(source, upper) if sum>0 strategy.entry("Long", strategy.long, oca_name="Long", comment="Long") else strategy.cancel(id="Long") if sum<0 strategy.entry("Short", strategy.short, oca_name="Short", comment="Short") else strategy.cancel(id="Short") strategy.initial_capital = 50000 plot(strategy.equity-strategy.initial_capital-strategy.closedtrades*.25/2, title="equity", color=red, linewidth=2) hline(0) //longCondition = sum>0 //exitlong = sum<0 //shortCondition = sum<0 //exitshort = sum>0 //strategy.entry(id = "Long", long=true, when = longCondition) //strategy.close(id = "Long", when = exitlong) //strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitlong) //strategy.entry(id = "Short", long=false, when = shortCondition) //strategy.close(id = "Short", when = exitshort) //strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitshort)