开拓者期货期权程序化系统交易论坛
标题:
请帮主帮忙将此策略实现
[打印本页]
作者:
drasper
时间:
2010-9-27 10:16:15
标题:
请帮主帮忙将此策略实现
时间架构:1min
品种开仓:读取1minBar的前五个BarClosePrice取其Max和Min值 ,如果当前Bar的价格低于前五个BarClosePrice的Min值则市价卖出开仓 ,如果当前Bar的价格高于前五个BarClosePrice的Max值则市价买入开仓。
初始止损设置及 跟踪止损设置:如果是卖出开仓,则当前Bar的价格高于前两个1minBar的highprice的Max值 时市价止损;如果是买入开仓,则当前Bar的价格低于前两个1minBar的lowprice的Min值市价止损。每过一个时间架构向后延伸重新设置一次止损价。
跟踪止损的生效:从开仓Bar之后的第一根Bar开始,跟踪止损生效。
头寸管理:交易时间内允许同时持有多空各一手头寸。
强制平仓:当日14:59开始,停止开仓,全部市价平仓。
强制停止开仓:当日连续N次止损后,当日停止开仓。账户净资产的Drawdown达到账户X时,强制停止交易。
刚开始学习,请帮主帮忙将此策略实现,谢谢!
作者:
drasper
时间:
2010-9-27 14:55:52
我写了策略,发现只能进行一个方向的开仓,请版主指教!
Params
Numeric lots(1);//每单的手数
Numeric AllowLong(1); //允许多单的数量
Numeric AllowShort(1);//允许空单的数量
Numeric AllowCountLoss(5);//允许亏损的次数
Numeric AllowAmountLoss(5000);//允许亏损的金额
Vars
Numeric preMP; //历史持仓
Numeric curMP;//现在持仓
Numeric max5Close;//最近5根bar收盘价的最大值
Numeric min5Close;//最近5根bar收盘价的最小值
Numeric max2High;//最近2根bar最高价的最大值
Numeric min2Low;//最近2根bar最低价的最小值
Numeric CountLong(0);//多单统计
Numeric CountShort(0);//空单统计
Numeric CountLoss(0);//亏损的次数统计
Numeric AmountLoss(0);//亏损的金额统计
Begin
preMP = MarketPosition;
If(Time > 0.145900 && Time < 0.150030 ) // 收盘平仓
{
If(preMP == 1){
Sell;
return;
}
else if(preMP == -1){
BuyToCover;
return;
}
return;
}
max5Close= Max(Max(Max(Max(Close[1],Close[2]),Close[3]),Close[4]),Close[5]);//前五个周期的最大值
min5Close=Min(Min(Min(Min(Close[1],Close[2]),Close[3]),Close[4]),Close[5]);//前五个周期的最小值
max2High= Max(High[1],High[2]);//前两个周期的最大值
min2Low=Min(Low[1],Low[2]);//前两个周期的最小值
if(preMp==0){
if(CountLong<AllowLong){//允许开多单
If(Close > max5Close){
Buy(lots);
CountLong=CountLong+1;
}
}
if(CountShort<AllowShort){//允许开空单
If(Close < min5Close){
SellShort(lots);
CountShort=CountShort+1;
}
}
}
Else If(preMP == 1) //多单
{
If (Close<min2Low){
Sell(lots);
CountLong=CountLong-1;
//大于预订的亏损次数
CountLoss = NumLosTrades();
if(CountLoss>=AllowCountLoss) {
curMP = MarketPosition;
If(curMP == 1){
Sell;
return;
}else if(curMP == -1){
BuyToCover;
return;
}
return;
}
//大于预订的亏损金额
AmountLoss = GrossLoss();
if(AmountLoss>=AllowAmountLoss) {
curMP = MarketPosition;
If(curMP == 1){
Sell;
return;
}else if(curMP == -1){
BuyToCover;
return;
}
return;
}
}
}
Else If(preMP == -1) //空单
{
If (Close >max2High){
BuyToCover(lots);
CountShort=CountShort-1;
//大于预订的亏损次数
CountLoss = NumLosTrades();
if(CountLoss>=AllowCountLoss) {
curMP = MarketPosition;
If(curMP == 1){
Sell;
return;
}else if(curMP == -1){
BuyToCover;
return;
}
return;
}
//大于预订的亏损金额
AmountLoss = GrossLoss();
if(AmountLoss>=AllowAmountLoss) {
curMP = MarketPosition;
If(curMP == 1){
Sell;
return;
}else if(curMP == -1){
BuyToCover;
return;
}
return;
}
}
}
End
欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/)
Powered by Discuz! X2