//红璟程序化交易平台 //网站: http://www.programtrade.com.cn //QQ群:289246060 //邮件:hj_support@163.com //最新帮助地址:http://www.programtrade.com.cn/webhelp/index.html using System; using System.Collections.Generic; using System.Linq; using System.Text; using DevelopLibrary.Enums; using DevelopLibrary.DevelopAPI; namespace DemoStrategy.策略范例 { public class 钓鱼 : EventStrategyBase { [Parameter(Display = "钓线长度", Description = "与当前价的间隔", Category = "参数")] int distance = 15; [Parameter(Display = "手数", Description = "下单的手数", Category = "参数")] int Qty = 1; [Parameter(Display = "撤单价位", Description = "当价格波动大于Adjust时撤单,重新开仓", Category = "参数")] int Adjust = 5; [Parameter(Display = "最大可撤单次数", Description = "用于限制不超过交易所的当天最大撤单手数", Category = "参数")] int Cancel = 400; double price = 0; double askprice = 0; double bidprice = 0; public override void OnStart()//在策略启动时执行,一般用来创建图表,或读取账户信息。 { CreateChart(); } public override void OnTick() //在每个tick来的时候执行 { if (price == 0) { price = C.LAST; //同时放买卖方向的钓线 askprice = ASKPRICE(1).LAST - distance; OpenBuy(askprice, Qty); bidprice = BIDPRICE(1).LAST + distance; OpenSell(bidprice, Qty); } else if (Math.Abs(price - C.LAST) >= Adjust) { price = C.LAST; List<Order> lst = GetOrderList(SYMBOL, EnumOrderStatusType.NoTradeQueueing); for (int i = 0; i < lst.Count; i++) { CancelOrder(lst); Cancel--; } } } public override void OnTrade(Trade trade) { if (trade.OffsetFlag == EnumOffsetFlagType.Open) { if (trade.Direction == EnumDirectionType.Buy) { if (INSTRUMENT.ExchangeID == EnumExchange.SHFE) CloseSellToday(BIDPRICE(1).LAST, trade.Volume); else CloseSell(BIDPRICE(1).LAST, trade.Volume); } else { if (INSTRUMENT.ExchangeID == EnumExchange.SHFE) CloseBuyToday(ASKPRICE(1).LAST, trade.Volume); else CloseBuy(ASKPRICE(1).LAST, trade.Volume); } } } public override void OnStop() { List<Order> lst = GetOrderList(SYMBOL, EnumOrderStatusType.NoTradeQueueing); for (int i = 0; i < lst.Count; i++) { CancelOrder(lst); } } public override void OnCancelOrderSucceeded(Order order) { if (Cancel > 0) { if (order.OrderDirection == EnumDirectionType.Buy) { askprice = ASKPRICE(1).LAST - distance; OpenBuy(askprice, Qty); } else { bidprice = BIDPRICE(1).LAST + distance; OpenSell(bidprice, Qty); } } } } }