
Esta estratégia permite a geração de sinais de negociação através da seleção dinâmica de diferentes tipos de médias móveis, combinadas com vários períodos de tempo.
A estratégia permite escolher os cinco indicadores de média móvel SMA, EMA, TEMA, WMA e HMA e definir a duração do período de equilíbrio. A estratégia traça diferentes tipos de equilíbrio de acordo com a dinâmica selecionada.
Em particular, a estratégia define primeiro o período de retrospecção com base nos parâmetros de entrada. Em seguida, calcula-se cinco indicadores de linha média:
Dependendo da escolha, trace a correspondente linha média. Quando o preço de fechamento for superior à linha média, faça mais; Quando o preço de fechamento for inferior à linha média, faça um vazio.
A estratégia usa diferentes tipos de linhas médias em combinação para suavizar os dados de preços, filtrar o ruído do mercado e produzir um sinal de negociação mais confiável. Permite a personalização do comprimento do ciclo de linhas médias, permitindo a negociação de tendências em diferentes períodos.
O risco pode ser reduzido através da optimização dos seguintes aspectos:
A estratégia pode ser otimizada em várias direções:
Por exemplo, pode ser adicionado um indicador de capacidade quantitativa, que só gera sinais de negociação em caso de aumento do volume de transação, filtrando algumas brechas falsas.
Pode-se definir um canal que só entra quando o preço quebra o canal; definir uma linha de stop loss, a posição de liquidação após o preço tocar a linha de stop loss. Isso pode reduzir os prejuízos desnecessários.
Pode-se ajustar o ciclo de média de acordo com a dinâmica da situação do mercado, usando a média de longo período quando a tendência é mais evidente, usando a média de curto período para a consolidação.
Pode-se ajustar o tamanho da posição de acordo com a situação de retirada, diminuir a posição na retirada e aumentar moderadamente a posição quando for lucrativo.
A estratégia de aplicação combinada de vários indicadores de linha média, em combinação com vários períodos de tempo, para formar um efeito de acompanhamento de tendência mais estável. A estratégia de otimização de espaço é grande, pode ser melhorado em termos de entrada de filtragem, saída de forma, otimização de parâmetros, etc., para que a estratégia de obter um melhor efeito no disco real.
/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("MA_strategy ", shorttitle="MA_strategy", overlay=true, initial_capital=100000)
qty = input(100000000, "Buy quantity")
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,testStartMin)
testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
ma1 = input( "SMA",title="Select MA", options=["SMA", "EMA","TEMA", "WMA","HMA"])
len1 = input(7, minval=1, title="Period")
s=sma(close,len1)
e=ema(close,len1)
xEMA1 = ema(close, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
t = 3 * xEMA1 - 3 * xEMA2 + xEMA3
f_hma(_src, _length)=>
_return = wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
h = f_hma(close, len1)
w = wma(close, len1)
ma = ma1 == "SMA"?s:ma1=="EMA"?e:ma1=="WMA"?w:ma1=="HMA"?h:ma1=="TEMA"?t:na
buy= close>ma
sell= close<ma
alertcondition(buy, title='buy', message='buy')
alertcondition(sell, title='sell', message='sell')
ordersize=floor(strategy.equity/close)
if testPeriod()
strategy.entry("long",strategy.long,ordersize,when=buy)
strategy.close("long", when = sell )