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

Estratégia transversal da MA

Autora:ChaoZhang, Data: 2024-06-03 11:25:43
Tags:SMAMA

img

Resumo

Este artigo apresenta uma estratégia quantitativa de negociação baseada no princípio do cruzamento da média móvel. A estratégia determina a direção longa / curta comparando o preço com a média móvel e define os níveis de lucro e stop loss para controlar o risco. O código da estratégia é escrito em Pine Script e integra-se com a API da plataforma de negociação Dhan, permitindo a negociação automatizada de sinais de estratégia.

Princípio da estratégia

O núcleo desta estratégia é a média móvel. Ela calcula a média móvel simples do preço de fechamento durante um determinado período como base para julgar a tendência. Quando o preço cruza acima da média móvel, gera um sinal longo, e quando cruza abaixo, gera um sinal curto. A função exrem é usada para filtrar sinais duplicados contínuos e melhorar a qualidade do sinal.

Vantagens da estratégia

O crossover de média móvel é um método simples e fácil de usar de seguir tendências que pode capturar efetivamente tendências de mercado de médio a longo prazo. Com configurações razoáveis de parâmetros, a estratégia pode obter retornos estáveis em mercados de tendência. A configuração de take profit e stop loss ajuda a controlar os drawdowns e melhorar a relação risco-recompensa. A lógica do código da estratégia é clara, usando modularização de funções, com forte legibilidade e escalabilidade. Além disso, a estratégia integra a API da plataforma Dhan para realizar a execução automatizada de ordens, melhorando a eficiência da execução.

Riscos estratégicos

As médias móveis são indicadores inerentemente atrasados. Durante os pontos de virada do mercado, os sinais podem ser atrasados, levando a oportunidades ótimas de negociação perdidas ou sinais falsos. Configurações incorretas de parâmetros afetarão o desempenho da estratégia e precisam ser otimizadas de acordo com diferentes características e prazos do mercado.

Orientações para a otimização da estratégia

  1. Múltiplas médias móveis de diferentes prazos podem ser combinadas para melhorar a confiabilidade do sinal, como cruzamento de médias móveis duplas ou triplas.
  2. A definição de take profit e stop loss pode ser ainda mais otimizada, por exemplo, ajustando-se dinamicamente com base em indicadores de volatilidade como o ATR, ou adotando estratégias de trailing stop.
  3. As condições de filtragem podem ser adicionadas, tais como avanços de preços de níveis de suporte/resistência importantes, alterações no volume de negociação, etc., para melhorar a qualidade do sinal.
  4. Na aplicação real, é necessário realizar um teste retrospectivo e uma validação adequados da estratégia e gerir os fundos para controlar o risco comercial único e a utilização global.

Resumo

A estratégia de cruzamento de média móvel é uma estratégia quantitativa simples e prática que pode lucrar nos mercados de tendência através do rastreamento de tendências e controle de stop loss. No entanto, a própria estratégia tem certas limitações e precisa ser otimizada e melhorada de acordo com as características do mercado e as preferências de risco. Na aplicação prática, também é necessário prestar atenção à execução de disciplina rigorosa e controle de risco adequado.


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-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/
// © syam-mohan-vs @ T7 - wwww.t7wealth.com www.t7trade.com
//This is an educational code done to describe the fundemantals of pine scritpting language and integration with Indian discount broker Dhan. This strategy is not tested or recommended for live trading. 

//@version=5
strategy("Pine & Dhan - Moving Average Crossover Strategy", overlay=true)

//Remove excess signals
exrem(condition1, condition2) =>
    temp = false
    temp := na(temp[1]) ? false : not temp[1] and condition1 ? true : temp[1] and condition2 ? false : temp[1]
    ta.change(temp) == true ? true : false

// Define MA period
ma_period = input(20, title = "MA Length")

// Define target and stop loss levels
target_percentage = input.float(title="Target Profit (%)", defval=2.0)
stop_loss_percentage = input.float(title="Stop Loss (%)", defval=1.0)

// Calculate the MA
ma = ta.sma(close, ma_period)

// Entry conditions
long_entry = close >= ma
short_entry = close < ma

// Calculate target and stop loss prices
target_price = long_entry ? strategy.position_avg_price + (close * (target_percentage / 100)) : strategy.position_avg_price - (close * (target_percentage / 100)) 
stop_loss_price = short_entry ? strategy.position_avg_price + (close * (stop_loss_percentage/ 100)) : strategy.position_avg_price - (close * (stop_loss_percentage / 100)) 

long_entry := exrem(long_entry,short_entry)
short_entry := exrem(short_entry,long_entry)

// Plot the MA
plot(ma, color=color.blue, linewidth=2, title="MA")

// Plot the entry and exit signals
plotshape(long_entry, style=shape.arrowup, color=color.green, size=size.small,location = location.belowbar)
plotshape(short_entry, style=shape.arrowdown, color=color.red, size=size.small,location = location.abovebar)

//Find absolute value of positon size to exit position properly
size = math.abs(strategy.position_size)

//Replace these four JSON strings with those generated from user Dhan account
long_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"I","sort_order":"1","price":"0"}]}'
long_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'

// Submit orders based on signals
if(strategy.position_size == 0)
    if long_entry 
        strategy.order("Long", strategy.long,alert_message=long_msg)          

    if short_entry
        strategy.order("Short", strategy.short,alert_message=short_msg)        
    
if(strategy.position_size > 0)
    
    if(short_entry)
        strategy.order("Short", strategy.short, qty = size, alert_message=short_msg)     
    else
        strategy.exit("Long Exit", from_entry="Long", qty = size, stop=stop_loss_price, limit= target_price, alert_message=long_exit_msg)

if(strategy.position_size < 0)
    
    if(long_entry)
        strategy.order("Long", strategy.long, qty = size, alert_message=long_msg)    
    else           
        strategy.exit("Short Exit", from_entry="Short", qty = size, stop=stop_loss_price, limit= target_price, alert_message=short_exit_msg) 



Relacionados

Mais.