O recurso está a ser carregado... Carregamento...

Estratégia de indicador integral de impulso

Autora:ChaoZhang, Data: 2023-11-06 14:40:26
Tags:

img

Resumo

Esta estratégia gera sinais de negociação através do cálculo da soma das diferenças entre ROC e SMA.

Estratégia lógica

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:

  1. Calcular SMA com comprimento l, obter um.

  2. Calcular ROC com comprimento l, obter r.

  3. Calcular a diferença entre o preço de fechamento e o SMA: k = fechamento - a.

  4. Somar k para s dias, obter soma.

  5. Se a soma for > 0, posição longa; se a soma for < 0, posição curta.

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

Análise das vantagens

Esta simples estratégia de negociação a curto prazo tem as seguintes vantagens:

  1. Os indicadores utilizados são simples e fáceis de compreender.

  2. A filtragem pela diferença de indicadores pode encontrar oportunidades de negociação mais precisas.

  3. Resumindo a diferença, é possível captar melhor as tendências a curto prazo.

  4. Os parâmetros l e s podem ser ajustados para diferentes ciclos.

  5. A lógica é clara e fácil de modificar e otimizar.

  6. Alta eficiência de utilização do capital para negociações frequentes de curto prazo.

Análise de riscos

Há também alguns riscos:

  1. Riscos mais elevados na negociação a curto prazo, perdas são possíveis.

  2. Os parâmetros inadequados podem conduzir a uma troca excessiva ou a oportunidades perdidas.

  3. Difícil de se adaptar a uma inversão de tendência, não haver stop loss pode levar a grandes perdas.

  4. O ajustamento frequente dos parâmetros depende em grande medida da experiência do comerciante.

  5. A alta frequência de negociação pode aumentar os custos de transação e o deslizamento.

Soluções:

  1. Ajuste os parâmetros adequadamente para reduzir a frequência de negociação.

  2. Adicionar indicadores de tendência para identificar reversões.

  3. Otimizar o stop loss para controlar a perda de uma única transação.

  4. Adicione otimização automática de parâmetros para reduzir a dependência da experiência.

  5. Otimizar o modelo de execução de ordens para reduzir os custos de transação.

Orientações de otimização

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Otimizar métodos de cálculo de parâmetros, como algoritmos genéticos, para tornar os parâmetros adaptáveis.

  2. Adicionar mais indicadores e filtros para melhorar a qualidade do sinal.

  3. Melhorar a estratégia de stop loss, como trailing stop loss.

  4. Otimizar estratégias de gestão de dinheiro como o controlo de pontos de risco.

  5. Otimizar o modelo de execução de ordens com seguimento da tendência, controle de deslizamento, etc.

  6. Adicione módulos de backtesting e otimização automática.

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

Resumo

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)

Mais.