素数帯のバックテスト戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-08 11:54:52
タグ:

img

概要

プライムナンバー・バンドのバックテスト戦略は,価格の周りに最も高い,最も低いプライムナンバーを特定し,これらの2つのプライムナンバーシリーズをバンドとしてプロットすることによって市場動向を判断する.この戦略はモジュールズ・ファイナンシャル・エンジニアリング (Modulus Financial Engineering Inc.) によって開発された.

戦略の論理

  1. 入力許容率パーセントに基づいて 指定された価格変動範囲を横切って 最大と最小の素数を見つけます
  2. 最新のNバーの素数帯の最高点と最低点を得るために最高値と最低値の関数を使用します
  3. 閉じる価格が素数帯の最高点と最低点を突破するかどうかによって,長または短方向を決定します.
  4. 取引信号を逆転させることもできます

利点分析

  1. 素数のランダムな分布と不規則な分布の特徴を用いて 市場のランダム性を捉える
  2. 素数帯には一定の遅延があり 騒音をフィルタリングできます
  3. 素数帯の上限と下限は柔軟で,異なるサイクルと異なる取引種に適応するために,許容率で調整することができます.

リスク分析

  1. 素数帯は価格動向に完全に適合できず,一定の遅れがある.
  2. 極端な価格変動は 間違った信号をもたらす可能性があります
  3. 過剰な許容率の設定は 有効なシグナルをフィルタリングします

パラメータを適切に調整し,他の指標と組み合わせることでリスクを回避できます.

オプティマイゼーションの方向性

  1. 単純な移動平均値と他の指標を組み合わせて信号を誘発するための二重条件を設定する.
  2. フィボナッチ数などの他のランダム数の使用を研究します
  3. 自動パラメータ最適化を実現するための機械学習アルゴリズムを導入する.

概要

素数帯のバックテスト戦略は,全体として,実用的な価値を持つ非常に革新的な戦略である.市場ランダム性を捕捉するために素数の特徴を使用し,傾向を特定する際に価格遅延も考慮し,研究に非常に価値があります.次のステップは,信号品質を改善する側面から最適化すること,ランダム数型を拡大すること,自動最適化などで,戦略効果をより顕著にします.


/*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")

もっと