自定义绩效指标.md 2.44 KB
Newer Older
hetao's avatar
hetao committed
1
## 自定义绩效指标
hetao's avatar
hetao committed
2

hetao's avatar
hetao committed
3 4 5 6 7 8 9 10 11
在 AllInOne 的 CustomStatistics 有一个完整的示例,OpenQuant 里面的自定义绩效指标需要  
从 PortfolioStatisticsItem 继承类型,ICustomStatisticsType 是 QuantBox 插件设计的一个接口  
方便安装自定义绩效指标。  

## 安装使用
在场景文件中通过调用`framework.StatisticsManager.Change()` 来安装使用  
`Change` 方法需要指定一个被替换的指标,就是用自定义的指标去替换系统自带的指标。  
这么做是因为 OpenQuant 的实现有问题,如果直接使用`AddStatisticsItem`方法添加  
一个新的指标会引发系统异常OpenQuant崩溃,只能是替换系统自带指标来使用自定义指标。
hetao's avatar
hetao committed
12 13

```c#
hetao's avatar
hetao committed
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    public override void Run()
    {
        // 把 MARRatio 指标替换成 TradesCommission 指标
        framework.StatisticsManager.Change(PortfolioStatisticsType.MARRatio, new TradesCommission());
    }
```

## 引用其他指标

如果需要在指标中使用其他指标的数据可以在构造函数中调用 `Subscribe` 订阅,`Subscribe`  
的参数是一个`int`代表一个指标的类型,系统自带的类型在 `PortfolioStatisticsType`有定义  
可以直接使用。

订阅的示例:

```c#
    public class TestStatistics : PortfolioStatisticsItem, ICustomStatisticsType
hetao's avatar
hetao committed
32 33 34 35
    {
        public static int TypeId;
        
        //一次进出场完成
hetao's avatar
hetao committed
36 37 38 39 40 41 42 43 44
        public TestStatistics()
        {
            //订阅净收益指标
            Subscribe(PortfolioStatisticsType.NetProfit);
            //订阅交易次数
            Subscribe(PortfolioStatisticsType.NumOfTrades);
        }

        protected override void OnStatistics(PortfolioStatisticsItem statistics)
hetao's avatar
hetao committed
45
        {
hetao's avatar
hetao committed
46 47 48
            if(statistics.Type == PortfolioStatisticsType.NetProfit)
            {
                
hetao's avatar
hetao committed
49
            }
hetao's avatar
hetao committed
50 51 52
            if(statistics.Type == PortfolioStatisticsType.NumOfTrades)
            {
                
hetao's avatar
hetao committed
53
            }
hetao's avatar
hetao committed
54
        }        
hetao's avatar
hetao committed
55 56 57 58 59 60 61 62 63 64 65 66 67

        public override string Category
        {
            get
            {
                return "Trades";
            }
        }

        public override string Name
        {
            get
            {
hetao's avatar
hetao committed
68
                return "Test";
hetao's avatar
hetao committed
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
            }
        }

        public override int Type
        {
            get
            {
                return TypeId;
            }
        }

        public void SetStatisticsType(int type)
        {
            TypeId = type;
        }
    }
}

```