Estratégia de alta/baixa criptomoeda baseada em múltiplos indicadores

Autora:ChaoZhang, Data: 2023-12-29 14:16:16
Tags:

img

Resumo

Esta estratégia é uma estratégia de alto / baixo nível adequada para os mercados de criptomoedas. Integra MACD, PSAR, ATR, Elliott Wave e outros múltiplos indicadores para negociação em prazos mais longos, como 1 hora, 4 horas ou 1 dia. A vantagem desta estratégia reside na alta relação de recompensa de risco com fator de lucro médio que varia de 1,5 a 2,5.

Estratégia lógica

Os sinais de negociação desta estratégia vêm dos níveis de preço alto/baixo e julgamentos compostos de múltiplos indicadores.

  1. Julgar se existe um intervalo de níveis alto/baixo formado por sucessivos máximos ou mínimos mais altos ou mais baixos no gráfico de preços.

  2. Verifique o nível do histograma do MACD.

  3. Verificar o indicador PSAR para determinar a direcção da tendência.

  4. Verifique a direcção da tendência com base no ATR e no MA.

  5. Confirme a direcção da tendência com o indicador Elliott Wave.

Se todas as 5 condições apontarem para a mesma direcção, são gerados sinais longos ou curtos.

Vantagens

  1. Alta relação de risco e recompensa até 1:30.

  2. Fator de lucro médio elevado, geralmente entre 1,5 e 2,5.

  3. A combinação de múltiplos indicadores ajuda a filtrar as falhas de fuga de forma eficaz.

Riscos

  1. Relativamente baixa taxa de vitória em torno de 10%-20%.

  2. Existem riscos potenciais de retirada e de fenda.

  3. O desempenho dos indicadores pode ser afectado pelos regimes de mercado.

  4. Preciso de uma boa resistência psicológica.

Medidas correspondentes:

  1. Aumentar o capital para equilibrar a taxa de ganhos.

  2. Defina um stop loss rigoroso para cada negociação.

  3. Ajustar os parâmetros com base em diferentes mercados.

  4. Fortalecer a psicologia e controlar o dimensionamento da posição.

Orientações de otimização

  1. Parâmetros de teste baseados em diferentes criptomoedas e mercados.

  2. Adicione stop loss e take profit para otimizar a gestão de dinheiro.

  3. Aumentar a taxa de vitórias com métodos de aprendizagem de máquina.

  4. Adicionar filtro de sentimento social para sinais de negociação.

  5. Considere a confirmação em vários prazos.

Conclusão

Em conclusão, esta é uma estratégia agressiva de negociação de criptomoedas de alto risco e alto retorno. Sua vantagem reside na alta taxa de recompensa de risco e no fator de lucro. Os principais riscos vêm da taxa de ganho relativamente baixa, que requer uma forte psicologia. As direções de otimização futuras podem ser ajuste de parâmetros, gerenciamento de dinheiro, aumento da taxa de ganho e assim por diante.


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21

//@version=4
strategy("Crypto strategy high/low", overlay=true)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=true)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)
//sar
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)


// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

CCI = input(20)
ATR = input(5)
Multiplier=input(1,title='ATR Multiplier')
original=input(true,title='original coloring')
thisCCI = cci(close, CCI)
lastCCI = nz(thisCCI[1])
bufferDn= high + Multiplier * sma(tr,ATR)
bufferUp= low - Multiplier * sma(tr,ATR)
if (thisCCI >= 0 and lastCCI < 0) 
    bufferUp := bufferDn[1]
if (thisCCI <= 0 and lastCCI > 0) 
    bufferDn := bufferUp[1]

if (thisCCI >= 0)
    if (bufferUp < bufferUp[1])
        bufferUp := bufferUp[1]
else
    if (thisCCI <= 0)
        if (bufferDn > bufferDn[1])
            bufferDn := bufferDn[1]
x=0.0
x:=thisCCI >= 0 ?bufferUp:thisCCI <= 0 ?bufferDn:x[1]
swap=0.0

swap:=x>x[1]?1:x<x[1]?-1:swap[1]

swap2=swap==1?color.lime:color.red
swap3=thisCCI >=0 ?color.lime:color.red
swap4=original?swap3:swap2

//elliot wave
srce = input(close, title="source")
sma1length = input(5)
sma2length = input(35)
UsePercent = input(title="Show Dif as percent of current Candle", type=input.bool, defval=true)
smadif=iff(UsePercent,(sma(srce, sma1length) - sma(srce, sma2length)) / srce * 100, sma(srce, sma1length) - sma(srce, sma2length))
col=smadif <= 0 ? color.red : color.green

longC = high > high[1] and high[1] > high[2] and close[2] > high[3] and hist > 0 and uptrend and smadif < 0 and swap4==color.lime 
//longC = high > high[1] and high[1] > high[2] and high[2] > high[3] and high[3] > high[4] and close[4] > high[5]
shortC = low < low[1] and low[1] < low[2] and close[2] < low[3] and hist < 0 and not uptrend and  smadif > 0 and swap4==color.red 
//shortC = low < low[1] and low[1] < low[2] and low[2] < low[3] and low[3] < low[4] and close[4] < low[5]

tp=input(0.15, title="tp")
sl=input(0.005, title="sl")


strategy.entry("long",1,when=longC)
strategy.entry("short",0,when=shortC)

strategy.exit("x_long", "long" ,loss = close * sl / syminfo.mintick, profit = close * tp / syminfo.mintick , alert_message = "closelong")
//strategy.entry("short",0, when= loss = close * sl / syminfo.mintick)

strategy.exit("x_short", "short" , loss = close * sl / syminfo.mintick, profit  = close * tp / syminfo.mintick,alert_message = "closeshort")
//strategy.entry("long",1, when = loss = close * sl / syminfo.mintick)

//strategy.close("long",when= hist < 0)
//strategy.close("short", when= hist > 0)

Mais.