
A estratégia é conhecida como MADEFlex, uma estratégia de negociação de quantificação flexível baseada em um vale-médio móvel e um limite de perda real médio. A estratégia combina um indicador de vale-médio móvel e um limite de perda real médio, permitindo uma solução de negociação de quantificação flexível e controlável.
O núcleo desta estratégia é o indicador MADE. O indicador MADE forma uma média móvel por meio da multiplicação de um índice de deslocamento por um fator percentual. Quando o preço se eleva, gera um sinal de venda. Quando o preço cai, gera um sinal de compra.
Em particular, o indicador MADE contém 3 parâmetros: período de ciclo, percentual de rotação para cima por Ab e percentual de rotação para baixo por Bl. O período de ciclo determina o comprimento do ciclo do EMA. A amplitude da distância de rotação para cima e para baixo do EMA é controlada pelo fator percentual. A paralisação do ATR é definida principalmente pelo período de ATR nATRPeriod e o múltiplo de ATR nATRMultip.
Eventualmente, através da combinação de sinais de indicador MADE e ATR seguido de um filtro de condições de parada, gerando um sinal de compra e venda. A operação reversa pode ser realizada através do reverse trade input switch reverse.
A estratégia MADEFlex tem as seguintes vantagens:
A combinação do indicador de sinal e do mecanismo de parada é mais confiável. Os indicadores MADE são propensos a produzir sinais errados. A combinação do atr de parada de sequência pode filtrar eficazmente parte do ruído.
Parâmetros ajustáveis, controle flexível. Os parâmetros do indicador MADE e os parâmetros do ATR podem ser ajustados, controlando a quantidade e a qualidade do sinal.
Suporte para operações reversíveis. Pode ser usado para negociações reversíveis através de um interruptor reverso, enriquecendo as estratégias de uso.
Visualizar o stopper Intuitivo. Desenhar a linha de stopper e intuitivamente julgar o efeito de stopper
A estratégia MADEFlex também apresenta os seguintes riscos:
Parâmetros indevidos do indicador MADE podem gerar uma grande quantidade de sinais de erro. Testes cuidadosos são necessários para determinar os parâmetros adequados.
ATR parar de perda muito relaxado pode perder a oportunidade de parar de perda. Recomenda-se testes para determinar o múltiplo de ATR apropriado.
O risco de reversão é alto. Especialmente em situações de alta volatilidade, a reversão pode aumentar o risco de perda.
A ausência de stop loss pode causar um prejuízo maior. Em casos extremos, a ausência de proteção de stop loss pode causar um prejuízo maior.
A estratégia MADEFlex pode ser otimizada nas seguintes formas:
Otimizar os parâmetros MADE para melhorar a qualidade do sinal. Pode testar diferentes períodos e parâmetros percentuais para encontrar combinações de parâmetros mais confiáveis.
Optimizar os parâmetros de parada de ATR para obter melhores efeitos de parada. Pode testar o ciclo de ATR e o múltiplo de ATR para determinar a combinação mais apropriada.
Adicionar outras condições de filtragem para reduzir ainda mais os sinais errôneos. Por exemplo, combinando o indicador de taxa de flutuação para filtragem adicional.
Aumentar a estratégia de stop-loss, quando o lucro atinge um determinado nível, o stop-loss é retirado. Pode-se bloquear o lucro e controlar o risco.
Parâmetros de otimização dinâmica em combinação com métodos de aprendizagem de máquina. Parâmetros de otimização em tempo real usando métodos como aprendizagem de reforço, tornando as estratégias mais flexíveis.
A estratégia MADEFlex combina com sucesso os sinais de negociação do indicador de envelopes de média móvel e a metodologia de stop loss de seguimento do alcance real médio. Através de parâmetros ajustáveis, uma solução de negociação quantitativa flexível e controlada é realizada. A estratégia é de alta confiabilidade, forte capacidade de controle e adequada para uso e otimização por usuários com uma base quantitativa.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 27/09/2022
// Moving Average Displaced Envelope. These envelopes are calculated
// by multiplying percentage factors with their displaced expotential
// moving average (EMA) core.
// How To Trade Using:
// Adjust the envelopes percentage factors to control the quantity and
// quality of the signals. If a previous high goes above the envelope
// a sell signal is generated. Conversely, if the previous low goes below
// the envelope a buy signal is given.
//
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort
// The related article is copyrighted material from Stocks & Commodities Jun 2009
//
// ATR TS used by filter for MADE signals.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title='Moving Average Displaced Envelope & ATRTS', shorttitle='MADE+ATR', overlay=true)
tradeDirection = input.string('Both', title='Trade Direction', options=['Both', 'Long', 'Short'])
Price = input(title='Source', defval=close)
Period = input.int(defval=9, minval=1)
perAb = input.float(title='Percent above', defval=.5, minval=0.01, step=0.1)
perBl = input.float(title='Percent below', defval=.5, minval=0.01, step=0.1)
disp = input.int(title='Displacement', defval=13, minval=1)
nATRPeriod = input(15)
nATRMultip = input(2)
useATR = input(false, title='ATR Filter')
reverse = input(false, title='Trade reverse')
longAllowed = tradeDirection == 'Long' or tradeDirection == 'Both'
shortAllowed = tradeDirection == 'Short' or tradeDirection == 'Both'
pos = 0
sEMA = ta.ema(Price, Period)
top = sEMA[disp] * ((100 + perAb) / 100)
bott = sEMA[disp] * ((100 - perBl) / 100)
xATR = ta.atr(nATRPeriod)
xHHs =ta.sma(ta.highest(nATRPeriod), nATRPeriod)
xLLs =ta.sma(ta.lowest(nATRPeriod),nATRPeriod)
nSpread = (xHHs - xLLs) / 2
nLoss = nATRMultip * xATR
var xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) :
close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) :
close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss
ATRLong = close > xATRTrailingStop ? true : false
ATRShort = close < xATRTrailingStop ? true : false
iff_1 = close > top ? 1 : pos[1]
pos := close < bott ? -1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
clr = strategy.position_size
if possig == 1
if longAllowed and ATRLong
strategy.entry('Long', strategy.long)
else
if ATRLong or strategy.position_size > 0
strategy.close_all()
if possig == -1
if shortAllowed and ATRShort
strategy.entry('Short', strategy.short)
else
if ATRShort or strategy.position_size < 0
strategy.close_all()
if possig == 0
strategy.close_all()
plot(xATRTrailingStop[1], color=color.blue, title='ATR Trailing Stop')
barcolor(clr < 0 ? #b50404 : clr > 0 ? #079605 : #0536b3)