O valor da ordem de limite cruzado é o valor da ordem de limite cruzado

Autora:ChaoZhang, Data: 2023-11-03 17:11:34
Tags:

img

Resumo

Esta estratégia é uma estratégia de negociação que usa uma média móvel simples para determinar a direção da tendência do mercado e colocar ordens de limite ao longo da linha da média móvel para seguir a tendência.

Estratégia lógica

  1. Calcular a média móvel simples (SMA) e a tendência da direção da tendência.

  2. Se o filtro Anti-Saw estiver ativado, a tendência de alta é identificada quando os mínimos estão acima da SMA, a tendência de baixa é identificada quando os máximos estão abaixo da SMA.

  3. Colocar ordens de limite no preço SMA de acordo com a tendência da direção da tendência e as direções de negociação habilitadas needlong e needshort:

    • Se for necessária uma negociação longa (needlong é verdade) e em tendência de alta, coloque uma ordem de limite longa no preço SMA

    • Se for necessário negociar a curto prazo (needshort é verdade) e em tendência de baixa, colocar uma ordem de limite curto no preço SMA

  4. Definir a lógica de stop loss para as posições de saída se a direção da posição não corresponder à direção da tendência.

  5. O valor da posição em risco deve ser calculado de acordo com o método de cálculo da posição em risco.

Análise das vantagens

  1. Usar a SMA para determinar a tendência pode filtrar efetivamente o ruído do mercado e bloquear a tendência a longo prazo.

  2. Colocar ordens de limite no preço SMA pode obter bons pontos de entrada quando a tendência começa.

  3. Flexibilidade para negociar apenas longo ou curto de acordo com o estilo de negociação pessoal.

  4. Capacidade de absorção de perdas

  5. O intervalo de tempo de negociação é definido para evitar a volatilidade em torno de grandes eventos.

Análise de riscos

  1. A SMA como indicador de tendência tem um efeito de atraso, pode perder pontos de virada da tendência e causar perdas.

  2. As ordens de limite não têm flexibilidade, podem não entrar em posições devido a ajustes de tendência de curto prazo.

  3. O parâmetro do período SMA precisa de uma configuração adequada, configurações inadequadas levam à determinação de tendência incorreta.

  4. Os parâmetros das sessões de negociação devem ser razoáveis para evitar oportunidades perdidas ou negociações em períodos de risco.

Orientações de otimização

  1. Considerar a adição de outros indicadores para confirmação de múltiplos indicadores, evitando problemas de atraso da SMA.

  2. Mudar para o seguimento de ordens de mercado quando o preço quebra a SMA, melhorando a flexibilidade de rastreamento.

  3. Otimizar dinamicamente o período SMA para se adaptar aos diferentes ciclos de mercado.

  4. Configure o stop loss para oscilar baixo/alto em vez de estritamente no preço SMA para paradas mais flexíveis.

  5. Aumentar os elementos algorítmicos para sessões de negociação dinâmicas mais inteligentes, evitando eventos de grande risco.

Resumo

Em geral, esta é uma estratégia relativamente simples de seguir tendências, com a ideia central de determinar a direção da tendência com SMA e colocar ordens de limite no preço SMA para seguir a tendência. Com certas otimizações, pode melhorar a flexibilidade, adaptabilidade e inteligência. A estratégia é fácil de entender e implementar, adequada para iniciantes em negociação algorítmica, mas requer consciência de risco, avaliação cuidadosa de backtest, monitoramento rigoroso e otimização para negociação ao vivo.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-03-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy(title = "Noro's CrossLimit", shorttitle = "CrossLimit", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.0)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
src = input(close, defval = close, title = "MA Source")
len = input(5, defval = 5, minval = 1, title = "SMA length")
off = input(0, defval = 0, minval = 0, title = "SMA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
rev = input(false, defval = false, title = "Reverse")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MA
ma = sma(src, len)[off]
macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = (trend == 1 and rev == false) or (trend == -1 and rev == true)
dn = (trend == -1 and rev == false) or (trend == 1 and rev == true)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend != 0
    strategy.entry("Long", strategy.long, lot, limit = ma, when = needlong and truetime and up)
    strategy.entry("Short", strategy.short, lot, limit = ma, when = needshort and truetime and dn)
if size > 0 and needshort == false and trend == -1
    strategy.exit("Stop Long", "Long", limit = ma)
if size < 0 and needlong == false and trend == 1
    strategy.exit("Stop Short", "Short", limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Mais.