用戶交易數據分析 -最大回轍 O(1) O(n)實現

##定義

最大回撤率:在選定週期內任一歷史時點往後推,產品淨值走到最低點時的收益率回撤幅度的最大值。最大回撤用來描述買入產品後可能出現的最糟糕的情況

##計算公式

  • 回轍
    draw_down= draw\_down = \frac{當日淨值-當日之前最大淨值}{當日之前最大淨值}

  • 最大回轍

max_draw_down=max[(DiDj)Di)]=max(1) max\_draw\_down = max[\frac{(D_i-D_j)}{D_i}) ] = max(1 - \frac{當日淨值}{當日之前最高淨值} )

DD爲某一天的淨值 ,ii爲某一天,jjii後面的某一天. DjD_jDiD_i後面某一天的淨值

##數據模型設計

統計時間 用戶ID 窗口最大值 窗口起點 窗口終點 當前淨值 窗口今日回撤值 窗口最大回撤
a =(當前淨值 - 窗口最大值)/窗口最大值 max(窗口最大回撤T-1,窗口今日回撤值 )
b
c

SQL 實現

根據上面的數據模型 ,可以:

O(1)實現自然窗口最新一天的最大回轍

O(n) 實現滑動窗口最新一天的最大回轍

Python實現

O(n2)O(n^2)

def get_max_drawdown_slow(array):
    drawdowns = []
    for i in range(len(array)):
        max_array = max(array[:i+1])
        drawdown = max_array - array[i]
        drawdowns.append(drawdown)
    return max(drawdowns)

O(n)O(n)

def get_max_drawdown_fast(array):
    drawdowns = []
    max_so_far = array[0]
    for i in range(len(array)):
        if array[i] > max_so_far:
            drawdown = 0
            drawdowns.append(drawdown)
            max_so_far = array[i]
        else:
            drawdown = max_so_far - array[i]
            drawdowns.append(drawdown)
    return max(drawdowns)

參考:O(n)複雜度實現最大回撤的計算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章