Oracle使用排列組合計算最大回撤幅度

2021-08-21 23:39:14 字數 1837 閱讀 1882

最大回撤率:在選定週期內任一歷史時點往後推,產品淨值走到最低點時的收益率回撤幅度的最大值。

最大回撤率計算公式:

最大回撤率=max[(di−dj)/ di]

d為某一天的淨值,i為某一天,j為i後的某一天,di為第i天的產品淨值,dj則是di後面某一天的淨值

假設有4條資料(1號-4號),如圖:

我把資料繪製成座標圖(微軟自帶的畫圖工具畫的,勿噴)

①使用sys_connect_by_path對這4條資料進行排列組合

select sys_connect_by_path(value, '#') combo

from (select *

from tmp

where bizdate <= 20110104

order by bizdate asc) t

where level = 2

connect by prior bizdate < t.bizdate

and level <= 2

得到以下結果:

②擷取字串:

select substr(s.combo, 2, instr(s.combo, '#', -1) - 2) as num1,

substr(s.combo, instr(s.combo, '#', -1) + 1) as num2

from (select sys_connect_by_path(value, '#') combo

from (select *

from tmp

where bizdate <= 20110104

order by bizdate asc) t

where level = 2

connect by prior bizdate < t.bizdate

and level <= 2) s

得到以下結果:

③最終計算出最大回撤幅度:

select max((a.num1 - a.num2) / a.num1)

from (select substr(s.combo, 2, instr(s.combo, '#', -1) - 2) as num1,

substr(s.combo, instr(s.combo, '#', -1) + 1) as num2

from (select sys_connect_by_path(value, '#') combo

from (select *

from tmp

where bizdate <= 20110104

order by bizdate asc) t

where level = 2

connect by prior bizdate < t.bizdate

and level <= 2) s) a

得到最終結果:

一般排列組合計算

若按照階乘的方式來計算,在數值較大時可能發生溢位。觀察可以發生c n,r 的分子分母都為r項,可以把它們的每一項分別進行計算。在程式設計時要注意除不進時,不要除,把分子分母分別乘到下乙個處理項中。同時 c n,r c n,n r 例 每行輸入兩個數分別代表上面的n,r。若n,r 0則終止。note ...

Python實現的排列組合計算操作示例

1.呼叫 scipy 計算排列組合的具體數值 from scipy.special import comb,perm perm 3,2 6.0 comb 3,2 3.02.呼叫 itertools 獲取排列組合的全部情況數 from itertools import combinations,per...

使用php計算排列組合的方法

前些天因為業務需要寫了一段計算排列組www.cppcns.com合的 今天整理了一下,以備後用 複製 如下 php 要解決的數學問題 nbhaulqzhvvwsp 算出c a,1 c b,1 c n,1 的組合情況,其中c n,1 代表從n個元素裡任意取乙個元素 要解決的實際程式設計客棧問題樣例 某...