Board logo

标题: 【SharpeRatio】 [打印本页]

作者: 龙听    时间: 2022-11-2 13:01     标题: 【SharpeRatio】

  1. Input:
  2.         Period(NumericSimple), {0=monthly, 1=daily}
  3.         IntRate(NumericSimple), {interest rate}
  4.         CalculateRatio(TrueFalseSimple), {final calculation}
  5.         InitCapital(NumericSimple); {initial capital}
  6.                
  7. array: periods_returns[](0), periods_return_percent[](0);
  8. var: intrabarpersist last_idx(0);

  9. var: new_periods(0);

  10. new_periods = 0;

  11. var: recalcpersist int_rate_per_period(12);

  12. once begin
  13.         switch (Period) begin
  14.                 case 0 : int_rate_per_period = IntRate / 12 / 100;
  15.                 case 1 : int_rate_per_period = IntRate / 365 / 100;
  16.         end;
  17. end;

  18. var: intrabarpersist start(False);
  19. once (0 <> i_CurrentContracts or 0 <> i_OpenEquity) start = true;

  20. if not start then
  21.         #return;
  22.        

  23. switch (Period) begin
  24.         case 0 : begin
  25.                 new_periods = MonthsCount;
  26.                 end;
  27.         case 1 : begin
  28.                 new_periods = DaysCount;
  29.                 end;               
  30. end;

  31. var: intrabarpersist prev_equity(0);

  32. var: Equity(0);
  33. Equity = i_OpenEquity;

  34. if 0 < new_periods then begin
  35.         array_setmaxindex(periods_returns, last_idx + new_periods);
  36.        
  37.         periods_returns[last_idx + 1] = Equity[1] - prev_equity;

  38.         for value1 = 2 to new_periods - 1 begin
  39.                 periods_returns[last_idx + value1] = 0;
  40.         end;
  41.        
  42.         last_idx += new_periods;
  43.         prev_equity = Equity[1];
  44. end;

  45. var: intrabarpersist calculated(False);
  46. if CalculateRatio and not calculated then begin
  47.         once calculated = True;

  48.         if 0 = new_periods and 0 <> i_MarketPosition then begin
  49.                 last_idx += 1;
  50.                 array_setmaxindex(periods_returns, last_idx);
  51.                 periods_returns[last_idx] = Equity - prev_equity;
  52.         end;

  53.         RemoveLastZeros(periods_returns, last_idx);
  54.                
  55.         array_setmaxindex(periods_return_percent, last_idx);

  56.         CummRatio(periods_returns, periods_return_percent, last_idx, InitCapital);
  57.        
  58.         var: AvgReturnPercent(0), ReturnStdDev(0);
  59.         AvgReturnPercent = AverageArray( periods_return_percent, last_idx );
  60.         ReturnStdDev= StandardDevArray( periods_return_percent, last_idx, 0 );

  61.         if 0 <> ReturnStdDev then
  62.                 SharpeRatio = (AvgReturnPercent- int_rate_per_period) / ReturnStdDev;
  63. end;
复制代码





欢迎光临 龙听期货论坛 (http://qhlt.club/) Powered by Discuz! 7.2