如何自定义一个股票交易策略? 我们的软件是允许用户自定义一下交易策略的。在这篇文章里,我们将教你如何自定义一个股票交易策略。 直接下载我们的例子。解压到 D:\Projects\MACD2\目录下。 用VS2010打开 D:\Projects\MACD2\MACD2.sln。 我们可以看到有一个文件叫作 MACDTractic2.cs 这个文件就是我们的MACD交易策略文件了。 它继承于 AbstractTrade类型 /// <summary> /// 所有的自定义交易策略必须继承于它 /// </summary> public abstract class AbstractTrade { /// <summary> /// 作者 /// </summary> public abstract string Author { get; } /// <summary> /// 策略描述 /// </summary> public abstract string Description { get; } /// <summary> /// 名字 /// </summary> public abstract string Name { get; } /// <summary> /// 具体的策略实现是否可以买 /// </summary> /// <param name="context"></param> /// <returns></returns> public abstract TradeBuyInfo BuyCheck(TradeContext context); /// <summary> /// 具体的策略实现是否可以卖 /// </summary> /// <param name="context"></param> /// <returns></returns> public abstract TradeSellInfo SellCheck(TradeContext context); /// <summary> /// 得到可以买的最大数量 /// </summary> /// <param name="context"></param> /// <returns></returns> protected virtual int GetMaxAmount(TradeContext context,float buyPrice) { int amount = BuyAmount.Calculate(context.StockAndFundInfo.FundInfo.AvailableMoney, buyPrice); return amount; } /// <summary> /// 得到购买的价格 /// 当前价格的再加千分之一 /// </summary> /// <param name="context"></param> /// <returns></returns> protected virtual float GetBuyPrice(TradeContext context) { return context.CurrentPrice * (1 + 0.001f); } /// <summary> /// 得到卖出的价格 /// 当前价格的减去 千分之一 /// </summary> /// <param name="context"></param> /// <returns></returns> protected virtual float GetSellPrice(TradeContext context) { return context.CurrentPrice * (1 - 0.001f); } /// <summary> /// 得到当前可以卖出的的股票数 /// </summary> /// <param name="context"></param> /// <returns></returns> protected virtual int GetAvailableAmount(TradeContext context) { ExistStock existStock=context.StockAndFundInfo.Stocks.FirstOrDefault(it => it.StockCode==context.StockCode); if (existStock!=null&&existStock.AvailableAmout>0) { return (int)existStock.AvailableAmout; } return 0; } /// <summary> /// 得到总的数量 /// </summary> /// <param name="context"></param> /// <returns></returns> protected virtual int GetAmount(TradeContext context) { ExistStock existStock = context.StockAndFundInfo.Stocks.FirstOrDefault(it => it.StockCode == context.StockCode); if (existStock != null && existStock.Amount > 0) { return (int)existStock.Amount; } return 0; } /// <summary> /// 是否有股票可以卖 /// </summary> /// <param name="context"></param> /// <returns></returns> protected virtual bool IsHaveStockToSell(TradeContext context) { ExistStock existStock=context.StockAndFundInfo.Stocks.FirstOrDefault(it => it.StockCode==context.StockCode); if (existStock!=null&&existStock.AvailableAmout>0) { return true; } return false; } /// <summary> /// 是否已经有这个股票了 (必须有数量) /// 有的话返回true没有返回false /// </summary> /// <param name="context"></param> /// <returns></returns> protected virtual bool IsHaveTheStockAlready(TradeContext context) { return context.StockAndFundInfo.Stocks.FirstOrDefault(it => it.StockCode == context.StockCode&&it.Amount>0) != null; } public AbstractTrade Clone() { return this.MemberwiseClone() as AbstractTrade; } } 我们需要实现的方法有 Author Description Name 最重要的 BuyCheck 和SellCheck 这两个方法来判断是否需要买入和卖出。 如果你自己需要再创建新的策略,只要记得添加一个新的类,并实现AbstractTrade类就可以达到目的了。 还需要注意的一点有 第11行 [Export(typeof(AbstractTrade))] 我们是通过这个来向我们的程序说我们有这个接口。 只有把这个加到类的attribute哪边。才是最终完成的。 如何进行调试 在VS2010 哪里按 快捷键 F5 进入调试状态,股票自动交易软件会被自动打开,下一个断点到Description 27行。 在股票自动交易软件哪边 选择系统设置 策略设置 选择 "MACD 5 分钟交易DEMO" 我们可以看到断点就自动断在了 27行哪边了。 在自动化交易运行的时候你同样可以把断点设在BuyCheck和SellCheck哪边,这样就可以方便的看你的策略运行的数据对不对了。