PDF下载 下载

快速新建策略

  • 下载掘金3终端
  • 打开终端后,登陆掘金账号点击研究策略,新建策略
    或者点击右上角新建策略

  • 新建一个典型默认账户交易策略
    新建C#的默认账户交易策略

编译策略

  • 打开新建策略文件目录
    策略文件目录内容可以拷贝到本地其他盘符也可以进行编译生成

  • 打开工程文件 sln 文件
    需要用 visual studio 打开工程文件 (注意:visual studio 2013及以下版本需安装.net framework 4.5.2)
  • 编写策略
    打开Program.cs文件,可进行策略编辑

    编译并运行策略

  • 查看运行结果
    掘金客户端中关闭新建策略窗口并打开回测结果列表

    查看回测结果

    回测相关数据指标

下载我们的SDK

  • 下载sdk: 点击下载
  • 解压后得到:
    • example:示例代码
    • gmsdk :C#SDK
      1. ├─example
      2. ...
      3. └─gmsdk
      4. ├─x86
      5. gmsdk.dll
      6. gmsdk-net.dll
      7. protobuf-net.dll
      8. └─x64
      9. ...

建立我们第一个策略

  • 打开Visual Studio新建空白工程并新建源码文件
  • 工程中引用 gmsdk-net.dll
  • 引入命名空间:GMSDK

    1. using GMSDK;
  • gmsdk.dll, protobuf-net.dll放到策略执行文件所在目录

策略应该是这样的

  • 继承策略基类
  • 重改关注事件
  • 在OnInit里订阅行情,初始化
  • 在main方法中实例化一个派生类对像
  • 设置token,策略id,和mode
  • 开始运行

继承策略基类

  1. public class MyStrategy: Strategy
  2. {
  3. public MyStrategy(string token, string strategyId, StrategyMode mode) : base(token, strategyId, mode) {}
  4. }

重改关注事件

  1. public class MyStrategy: Strategy
  2. {
  3. public MyStrategy(string token, string strategyId, StrategyMode mode) : base(token, strategyId, mode) {}
  4. //重写OnInit事件,进行策略开发
  5. public override void OnInit()
  6. {
  7. Console.WriteLine("OnInit");
  8. return;
  9. }
  10. }

在OnInit里订阅行情,初始化

  1. class MyStrategy :public Strategy
  2. {
  3. public MyStrategy(string token, string strategyId, StrategyMode mode) : base(token, strategyId, mode) {}
  4. //重写OnInit事件,进行策略开发
  5. public override void OnInit()
  6. {
  7. Console.WriteLine("OnInit");
  8. Subscribe("SHSE.600000", "tick");
  9. return;
  10. }
  11. }

在main里实例化一个派生类对像

  1. 获取token:打开客户端->点击右上角用户头像 -> 系统设置 -> 复制token
  2. 获取策略id:打开客户端->策略研究->右上角新建策略->新建C#策略->复制策略ID
  3. 策略模式:
    • MODE_LIVE
    • MODE_BACKTEST
  1. MyStrategy s("27cbdfd8cd9b86dea554a5612baa4a8eee51af79", "536f1097-8b27-11e8-b6af-94c69161828a", StrategyMode.MODE_LIVE);

开始运行

  1. s.Run();

订阅行情策略示例

源文件

  1. using GMSDK;
  2. namespace example
  3. {
  4. public class MyStrategy : Strategy
  5. {
  6. public MyStrategy(string token, string strategyId, StrategyMode mode) : base(token, strategyId, mode) { }
  7. //重写OnInit事件,进行策略开发
  8. public override void OnInit()
  9. {
  10. System.Console.WriteLine("OnInit");
  11. //订阅行情数据
  12. Subscribe("SHSE.600000", "tick");
  13. return;
  14. }
  15. public override void OnTick(Tick tick)
  16. {
  17. System.Console.WriteLine("{0,-50}{1}", "代码", tick.symbol);
  18. System.Console.WriteLine("{0,-50}{1}", "时间", tick.createdAt);
  19. System.Console.WriteLine("{0,-50}{1}", "最新价", tick.price);
  20. System.Console.WriteLine("{0,-50}{1}", "开盘价", tick.open);
  21. System.Console.WriteLine("{0,-50}{1}", "最高价", tick.high);
  22. System.Console.WriteLine("{0,-50}{1}", "最低价", tick.low);
  23. System.Console.WriteLine("{0,-50}{1}", "成交总量", tick.cumVolume);
  24. System.Console.WriteLine("{0,-50}{1}", "成交总额/最新成交额,累计值", tick.cumAmount);
  25. System.Console.WriteLine("{0,-50}{1}", "合约持仓量(期), 累计值", tick.cumPosition);
  26. System.Console.WriteLine("{0,-50}{1}", "瞬时成交额", tick.lastAmount);
  27. System.Console.WriteLine("{0,-50}{1}", "瞬时成交量", tick.lastVolume);
  28. System.Console.WriteLine("{0,-50}{1}", "(保留)交易类型, 对应多开, 多平等类型", tick.tradeType);
  29. System.Console.WriteLine("{0,-50}{1}", "一档委买价", tick.quotes[0].bidPrice);
  30. System.Console.WriteLine("{0,-50}{1}", "一档委买量", tick.quotes[0].bidVolume);
  31. System.Console.WriteLine("{0,-50}{1}", "一档委卖价", tick.quotes[0].askPrice);
  32. System.Console.WriteLine("{0,-50}{1}", "一档委卖量", tick.quotes[0].askVolume);
  33. }
  34. }
  35. class Program
  36. {
  37. static void Main(string[] args)
  38. {
  39. MyStrategy s = new MyStrategy("27cbdfd8cd9b86dea554a5612baa4a8eee51af79", "536f1097-8b27-11e8-b6af-94c69161828a", StrategyMode.MODE_BACKTEST);
  40. s.SetBacktestConfig("2017-07-25 8:20:00", "2018-07-25 17:30:00");
  41. s.Run();
  42. System.Console.WriteLine("回测完成!");
  43. System.Console.Read();
  44. }
  45. }
  46. }