Estratégia de negociação quantitativa de dois fatores

Autora:ChaoZhang, Data: 2023-12-07 15:11:37
Tags:

img

Resumo

Esta estratégia combina os fatores de inversão 123 e os osciladores de números primos para implementar a negociação quantitativa impulsionada por fatores duais.

Princípios

A primeira parte é a estratégia de reversão 123. Ele usa a característica de reversão de preços ao longo de 2 dias para determinar os pontos de entrada e saída. Quando os preços aumentam continuamente ao longo de 2 dias e o estocástico lento está abaixo de 50, é considerado sobrevendido, produzindo um sinal de compra. Quando os preços caem continuamente ao longo de 2 dias e o estocástico rápido está acima de 50, é considerado um rebote sobrecomprado, produzindo um sinal de venda.

A segunda parte é a estratégia do oscilador de números primos. Este indicador calcula o número primo mais próximo acima e abaixo do preço atual em uma faixa especificada e produz a diferença do preço atual. Um valor positivo significa que o preço atual está perto do teto de números primos, enquanto um valor negativo significa que está perto do piso de números primos. A direção da tendência é julgada pelo valor da diferença, que é combinado com 123 sinais de reversão para gerar o sinal de negociação final.

A regra de fusão de sinais é: os sinais de negociação reais são gerados apenas quando as duas sub-estratégias dão sinais na mesma direção, caso contrário, nenhuma nova posição é aberta quando os sinais entram em conflito.

Vantagens

Ao combinar dois fatores, esta estratégia considera tanto os efeitos de reversão a curto prazo como as características de tendência a longo prazo para fazer julgamentos de mercado de vários ângulos, melhorando a resistência ao risco da estratégia.

Em comparação com uma estratégia de impulso único, esta estratégia pode impedir perdas ou reverter posições em tempo útil durante quedas repentinas de preços, controlando efetivamente os riscos intradiários através do recurso ao fator de reversão.

Em comparação com uma única estratégia de reversão, a introdução do oscilador de números primos para a direção da tendência evita o excesso de negociação de negociações de reversão frequentes.

Riscos

O maior risco são os conflitos de sinais entre os dois fatores. Se a reversão 123 mostrar sinais de sobrecompra/supervenda e produz sinais de reversão, enquanto o oscilador de números primos mostra que ainda está em tendência, a tomada direta de negociações de reversão pode levar a perdas.

Para controlar esse risco, é adicionada uma lógica adicional - as negociações reais são geradas apenas quando os dois sinais se alinham em direção.

Melhorias

  1. Otimizar parâmetros estocásticos para encontrar melhores conjuntos de parâmetros de reversão para produtos específicos

  2. Otimizar a percentagem de tolerância do oscilador de números primos para reduzir o ruído

  3. Adicionar estratégias de stop loss para limitar a expansão de perdas unidirecionais

  4. Adicionar módulo de dimensionamento de posições para ajustar posições para diferentes ambientes de mercado

  5. Adicionar modelos de aprendizado de máquina para julgar a credibilidade do sinal entre os dois fatores, reduzindo conflitos

Conclusão

Esta estratégia combina com sucesso fatores de reversão de curto prazo e fatores de tendência de longo prazo para alcançar uma negociação quantitativa de baixo risco. Ao usar efetivamente fatores duplos para filtrar o ruído e definir uma lógica adicional para controlar os riscos, é uma estratégia prática de lucro constante. Parâmetros e funções serão continuamente otimizados para atender às características reais do mercado.


/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 28/04/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// Determining market trends has become a science even though a high number or people 
// still believe it’s a gambling game. Mathematicians, technicians, brokers and investors 
// have worked together in developing quite several indicators to help them better understand 
// and forecast market movements.
//
// Developed by Modulus Financial Engineering Inc., the prime number oscillator indicates the 
// nearest prime number, be it at the top or the bottom of the series, and outlines the 
// difference between that prime number and the respective series.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

PrimeNumberOscillator(price, percent) =>
    res = 0.0
    res1 = 0.0
    res2 = 0.0
    for j = price to price + (price * percent / 100)
        res1 := j
	    for i = 2 to sqrt(price)
        	res1 := iff(j % i == 0 , 0, j)
            if res1 == 0 
                break
		if res1 > 0 
		    break
    for j = price to price - (price * percent / 100)
        res2 := j
	    for i = 2 to sqrt(price)
        	res2 := iff(j % i == 0 , 0, j)
            if res2 == 0 
                break
		if res2 > 0 
		    break
    res := iff(res1 - price < price - res2,  res1 - price, res2 - price)
    res := iff(res == 0, res[1], res)
    res
    
PNO(percent) =>
    pos = 0.0
    xPNO = PrimeNumberOscillator(close, percent)
    pos:= iff(xPNO > 0, 1,
           iff(xPNO < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Prime Number Oscillator", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Prime Number Oscillator ----")
percent = input(5, minval=0.01, step = 0.01, title="Tolerance Percentage")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posPNO = PNO(percent)
pos = iff(posReversal123 == 1 and posPNO == 1 , 1,
	   iff(posReversal123 == -1 and posPNO == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1 ) 
    strategy.entry("Long", strategy.long)
if (possig == -1 )
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Mais.