案例:
开发一个算法交易策略,每间隔5秒以买一价买入100股,同时将小于买一价的未成交委托单做撤单处理。
Type MyOrder=class(TsOrder2)
Function init();override;
Begin
//订单初始化,检查定单有效性
if OrderData_['策略开始时间'] < today()+strtotime('9:30:00') then OrderData_['策略开始时间'] := today() + strtotime('9:30:00');
if OrderData_['策略开始时间'] > today()+strtotime('11:30:00') and OrderData_['策略开始时间'] < today()+strtotime('13:00:00') then OrderData_['策略开始时间']:=today() + strtotime('13:00:00');
if timeof(OrderData_['策略结束时间']) > strtotime('15:00:00') then OrderData_['策略结束时间'] := today() + strtotime('15:00:00');
//获得总交易时间
total_trade_seconds := class(TS_TradeManager).GetTradeSeconds(OrderData_['策略开始时间'],OrderData_['策略结束时间']);
if total_trade_seconds <= 0 then Begin
release('初始化失败(交易时间段错误)');
return 0;
end;
return 1;
End;
Function DoOrder();virtual;//下单、撤单等
Begin
t:=now();
if t >= OrderData_['策略结束时间'] then Begin //订单执行截止时间
release('策略生命期到,强制结束算法策略');
return;
End;
stkid := OrderData_ ['代码'];
SetSysParam(pn_stock(),stkid);
buy1_price := rd(10);//买一档价格
//撤单(撤掉所有<买一价的子单)
child_orders := GetOrders(4);//获取所有可撤单的子单
for i:=0 to length(child_orders)-1 do Begin
if strtofloat(child_orders[i][‘Price’]) < buy1_price then
CancelOrder(child_orders[i][‘EntrustID’]);//子单撤单
End;
//下子单
TOrder(‘B’,buy1_price,100,’test’);
End;
注:开发中cep不能设置断点进行调试,需要使用syslog,将相关信息打印出来,保存在TXT文档中。