在SQL中计算"Max Draw Down"

Ram*_*amy 11 sql sql-server sql-server-2005

编辑:值得回顾第一个答案的评论部分,以更清楚地了解问题.

编辑:我正在使用SQLServer 2005

之前发布了类似于此的内容,但我认为海报没有给出足够的信息来真实地解释最大抽奖是什么.我对max max draw的所有定义都来自本文的(前两页):http: //www.stat.columbia.edu/~vecer/maxdrawdown3.pdf

实际上,您可以通过数学方式定义一些术语:

运行最大值,M t

M t = [0,t](S u)
中的最大u,其中S t是股票S的价格,时间t.

缩编,D t

D t = M t - S t

Max Draw Down,MDD t

MDD t = [0,t]中的最大u(D u)

所以,实际上需要确定的是一段时间内给定股票的一组高价和低价的当地最大值和最小值.我有一个历史报价表,其中包含以下(相关)列:

stockid int  
day date  
hi  int --this is in pennies  
low int --also in pennies  
Run Code Online (Sandbox Code Playgroud)

因此,对于给定的日期范围,您将在该日期范围内每天看到相同的stockid.

编辑:
高和低是白天高,每天低.

一旦确定了局部最大值和最小值,您可以将每个最大值与其后的每个最小值配对并计算差值.从该组中,最大差异将是"最大下拉".

然而,困难的部分是找到那些最大和最小的.

编辑:应该注意:如果股票在其最高买入点买入并以低点卖出点卖出,则最大亏损定义为假设损失的价值.股票不能以maxval之前的最小值出售.因此,如果全局最小值位于全局最大值之前,则这两个值不能提供足够的信息来确定最大值.

aka*_*nom 2

我们需要在问题域中考虑一些事情:

  1. 股票每天都有一系列价格,通常在烛台图表中查看
  2. 让我们把一天中的最高价称为 HI
  3. 让我们将一天的最低价格称为“低”
  4. 问题是受时间限制的,即使时间限制是IPO日期和退市日期
  5. 最大回撤是在该时间范围内您可能在股票上损失的最大金额
  6. 假设采用 LONG 策略:从逻辑上讲,如果我们能够确定所有局部最大值 (MAXES) 和所有局部最小值 (MINS),我们就可以定义一组将每个最大值与每个后续最小值配对并计算差值 DIFFS
  7. 有时差异会导致负数,但这并不是回撤
  8. 因此,我们需要在差异集中选择追加 0 并选择最大

问题在于定义 MAXES 和 MINS,通过曲线函数我们可以应用微积分,可惜我们不能。明显地

  1. 最大值需要来自 HI 和
  2. MINS 需要来自低位

解决这个问题的一种方法是定义一个游标并对其进行暴力破解。函数式语言也有很好的工具集来解决这个问题。