Estratégia de backtest de bandas de números primos

Autora:ChaoZhang, Data: 2024-01-08 11:54:52
Tags:

img

Resumo

A estratégia de backtest de bandas de números primos julga as tendências do mercado identificando os números primos mais altos e mais baixos em torno de um preço e traçando essas duas séries de números primos como uma faixa.

Estratégia lógica

  1. Atravesse uma faixa de flutuação de preços especificada com base na percentagem de tolerância de entrada para encontrar os maiores e menores números primos.
  2. Use as funções mais altas e mais baixas para obter os pontos mais altos e mais baixos das faixas de números primos nas barras N mais recentes.
  3. Determine a direção longa ou curta com base em se o preço de fechamento atravessa os pontos mais altos e mais baixos das faixas de números primos.
  4. Pode optar por reverter os sinais comerciais.

Análise das vantagens

  1. Capturar a aleatoriedade do mercado utilizando as características de distribuição aleatória e irregular dos números primos.
  2. As faixas de números primos têm um certo atraso, o que pode filtrar algum ruído.
  3. Os limites superior e inferior das faixas de números primos são flexíveis e podem ser ajustados através da percentagem de tolerância para se adaptarem a diferentes ciclos e variedades de negociação.

Análise de riscos

  1. As faixas de números primos não podem caber completamente no movimento dos preços e têm um certo grau de atraso.
  2. As inversões de preços devido a extremos podem levar a sinais errados.
  3. Percentagem de tolerância excessiva filtra alguns sinais válidos.

Os riscos podem ser evitados ajustando adequadamente os parâmetros, combinando-os com outros indicadores, etc.

Orientações de otimização

  1. Estabelecer condições duplas para desencadear sinais combinando médias móveis simples e outros indicadores.
  2. Pesquise o uso de outros números aleatórios, como os números de Fibonacci.
  3. Introduzir algoritmos de aprendizagem de máquina para obter otimização automática de parâmetros.

Resumo

A estratégia de backtest de bandas de números primos em geral é uma estratégia muito inovadora com valor prático. Ele usa as características dos números primos para capturar a aleatoriedade do mercado, considerando também o atraso de preço na identificação de tendências, muito valioso para pesquisa.


/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/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.
// The Prime Number Bands indicator was developed by Modulus Financial Engineering 
// Inc. This indicator is charted by indentifying the highest and lowest prime number 
// in the neighborhood and plotting the two series as a band.
//
// You can change long to short in the Input Settings
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
PrimeNumberUpBand(price, percent) =>
    res = 0
    res1 = 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
    res := iff(res1 == 0, res[1], res1)
    res

PrimeNumberDnBand(price, percent) =>
    res = 0
    res2 = 0
    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(res2 == 0, res[1], res2)
    res

strategy(title="Prime Number Bands Backtest", overlay = true)
percent = input(5, minval=0.01, step = 0.01, title="Tolerance Percentage")
Length = input(5, minval=1)
srcUp = input(title="Source Up Band",  defval=high)
srcDn = input(title="Source Down Band",  defval=low)
reverse = input(false, title="Trade reverse")
xPNUB = PrimeNumberUpBand(srcUp, percent)
xPNDB = PrimeNumberDnBand(srcDn, percent)
xHighestPNUB = highest(xPNUB, Length)
xLowestPNUB = lowest(xPNDB, Length)
pos = iff(close > xHighestPNUB[1], 1,
       iff(close < xLowestPNUB[1], -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 ) 
plot(xHighestPNUB, color=red, title="PNUp")
plot(xLowestPNUB, color=green, title="PNDn")

Mais.