Estratégia de negociação do oscilador de números primos

Autora:ChaoZhang, Data: 2023-11-02 14:42
Tags:

img

Resumo

Esta estratégia usa o indicador Oscilador de Números Primeiros para determinar as tendências do mercado e construir posições longas / curtas em conformidade. O PNO calcula a diferença entre o número primo mais próximo do preço e o preço em si, com valores positivos indicando tendências de alta e valores negativos indicando tendências de baixa. A estratégia pode capturar informações de tendência ocultas durante oscilações de preços e fornecer orientação para a negociação de ruptura.

Estratégia lógica

A estratégia primeiro define uma função PrimeNumberOscillator que toma o preço e allowedPercent como parâmetros. A função procura o número primo mais próximo do preço dentro da faixa allowedPercent e retorna sua diferença. Uma diferença positiva indica alta e uma diferença negativa indica baixa.

Na estratégia, a função PrimeNumberOscillator é chamada para calcular o valor xPNO. A direção da posição é determinada pelo sinal de xPNO e multiplicada pelo reverseFactor para obter a direção final do comércio. As posições longas / curtas são abertas com base na direção.

A estratégia baseia-se principalmente no indicador PNO para a direção da tendência. O indicador em si é bastante bruto e precisa ser combinado com outros fatores para verificação de sinal. Mas baseia-se em princípios matemáticos e pode fornecer alguma orientação objetiva.

Análise das vantagens

  • Baseado em princípios matemáticos, relativamente objetivo
  • Pode identificar tendências ocultas nas oscilações
  • Ajuste flexível dos parâmetros para o ajuste da sensibilidade
  • Simples de implementar, fácil de compreender e de otimizar

Análise de riscos

  • O PNO em si é bruto, propenso a múltiplos falsos sinais.
  • Precisa de verificação a partir de outros indicadores técnicos, não pode ser utilizado isoladamente
  • É necessária uma seleção cuidadosa dos parâmetros, grande demais ou pequeno demais falhará
  • Alta frequência de negociação, controlo das necessidades de dimensionamento das posições

Orientações de otimização

  • Adicionar filtros como média móvel, RSI para verificação de sinal
  • Implementar o stop loss para limitar o risco de queda
  • Ajuste dinâmico permitidoPercentual com base nas condições de mercado
  • Otimizar o dimensionamento das posições através da volatilidade e de outras métricas

Conclusão

A estratégia determina a direção da tendência com base nos princípios de oscilação de números primos, com lógica e implementação simples.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 29/03/2018
// 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.
//
// You can change long to short in the Input Settings
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
PrimeNumberOscillator(price, percent) =>
    res = 0
    res1 = 0
    res2 = 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
    
strategy(title="Prime Number Oscillator Backtest")
percent = input(5, minval=0.01, step = 0.01, title="Tolerance Percentage")
reverse = input(false, title="Trade reverse")
xPNO = PrimeNumberOscillator(close, percent)
pos = iff(xPNO > 0, 1,
       iff(xPNO < 0, -1, nz(pos[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)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 
clr = iff(xPNO > 0, green, red)
p1 = plot(xPNO, color=blue, title="KPO")
p2 = plot(0, color=black, title="0")
fill(p1,p2,color=clr)

Mais.