|
智麦套利 发表于 2013-4-26 16:39
请教楼主,怎样在您的这个挂单代码上加上开平仓策略,能否举一个简单的例子,非常感谢
比如一个上午9点开仓,下午2点55平仓的策略。
Params
//参数定义段
GlobalVars
//全局变量定义段;
Integer nOrderNo; //此变量用来记录最近订单号
Vars
//局部变量定义段
NumericSeries fOrderSta;//此变量用来记录策略的当前状态,0为空仓,小于零为卖持,大于零为卖持。也可将代码稍微改进,用来控制仓位。
Begin
//策略执行区
//上午9点开仓,下午2点55平仓
if(currenttime>0.090000&¤ttime<0.145500)
fOrderSta=1;
else
fOrderSta=0;
//下单模块
//开多
If(fOrderSta[1]>0 && A_SellPosition==0 && A_BuyPosition<6){ //前一根k线收盘触发买多
,且当前买仓小于6
nOrderNo = A_LastOrderNO(); //获取最近订单号
If((nOrderNo != -1 && A_OrderPrice(nOrderNo) < Q_BidPrice) && //(如果有订单
,&&订单价格不等于买1价,&&后面)
(A_OrderStatus(nOrderNo) == Enum_Queue || A_OrderStatus(nOrderNo) ==
Enum_PartDeal)) //(订单未成交,||部分成交)
CancelAllOrders; //撤单
If(nOrderNo == -1 || //如果没有订单
A_OrderStatus(nOrderNo) == Enum_Invalid || //或订单无效
A_OrderStatus(nOrderNo)== Enum_AllDeal || //或订单全部成交
A_OrderStatus(nOrderNo)== Enum_Canceled) //或已经撤单
Buy(6-A_BuyPosition,Q_BidPrice);
}
//平多
If(fOrderSta[1]<=0 && A_BuyPosition>0){ //前一根k线触发平多,且买仓大于0
nOrderNo = A_LastOrderNO(); //获取最近订单号
If((nOrderNo != -1 && A_OrderPrice(nOrderNo) > Q_AskPrice) && //(如果有订单
,&&订单价格不等于卖1价,&&后面)
(A_OrderStatus(nOrderNo) == Enum_Queue || A_OrderStatus(nOrderNo) ==
Enum_PartDeal)) //(订单未成交,||部分成交)
CancelAllOrders;
If(nOrderNo == -1 || //如果没有订单
A_OrderStatus(nOrderNo) == Enum_Invalid || //或订单无效
A_OrderStatus(nOrderNo)== Enum_AllDeal || //或订单全部成交
A_OrderStatus(nOrderNo)== Enum_Canceled) //或已经撤单
Sell(0,Q_AskPrice);
}
//开空
If(fOrderSta[1]<0 && A_BuyPosition==0 && A_SellPosition<6){ //前一根k线触发开空,且
空单小于6
nOrderNo = A_LastOrderNO(); //获取最近订单号
If((nOrderNo != -1 && A_OrderPrice(nOrderNo) > Q_AskPrice) && //(如果有订单
,&&订单价格不等于卖1价,&&后面)
(A_OrderStatus(nOrderNo) == Enum_Queue || A_OrderStatus(nOrderNo) ==
Enum_PartDeal)) //(订单未成交,||部分成交)
CancelAllOrders;
If(nOrderNo == -1 || //如果没有订单
A_OrderStatus(nOrderNo) == Enum_Invalid || //或订单无效
A_OrderStatus(nOrderNo) == Enum_AllDeal || //或订单全部成交
A_OrderStatus(nOrderNo) == Enum_Canceled) //或已经撤单
SellShort(6-A_SellPosition,Q_AskPrice);
}
//平空
If(fOrderSta[1]>=0 && A_SellPosition>0){ //前一根k线触发平空,且空单大于0
nOrderNo = A_LastOrderNO(); //获取最近订单号
If((nOrderNo != -1 && A_OrderPrice(nOrderNo) < Q_BidPrice) && //(如果有订单
,&&订单价格不等于买1价,&&后面)
(A_OrderStatus(nOrderNo) == Enum_Queue || A_OrderStatus(nOrderNo) ==
Enum_PartDeal)) //(订单未成交,||部分成交)
CancelAllOrders;
If(nOrderNo == -1 || //如果没有订单
A_OrderStatus(nOrderNo) == Enum_Invalid || //或订单无效
A_OrderStatus(nOrderNo)== Enum_AllDeal || //或订单全部成交
A_OrderStatus(nOrderNo)== Enum_Canceled) //或已经撤单
BuyToCover(0,Q_BidPrice);
}
End
|
|