- 精华
- 0
- 在线时间
- 213 小时
- UID
- 7286
- 积分
- 783
- 帖子
- 164
- 阅读权限
- 60
- 注册时间
- 2010-3-11
- 最后登录
- 2019-3-30
- 精华
- 0
- UID
- 7286
- 积分
- 783
- 帖子
- 164
- 主题
- 39
- 阅读权限
- 60
- 注册时间
- 2010-3-11
- 最后登录
- 2019-3-30
|
Params
Numeric Lots(1);//开仓手数
Numeric maxTrad(4);//最大交易次数
Numeric splitRate(2); //交易滑点和佣金
Numeric closeTime(14.54); //bar的时间超过此值后平仓
Numeric tradEndtime(14.40);//超过此时间不开仓
Numeric minrange(15);//开盘价波动此数值开仓
vars
Numeric splitDot; //交易滑点
Bool b1(False);//开多条件
Bool s1(False);//开空条件
Bool bc(False);//开多条件
Bool sc(False);//开多条件
Numeric tradePrice(0);//发单价格
NumericSeries tradNum(0);//交易次数
NumericSeries myposition(0);//持仓状态:0/无,1/多,-1/空
String tradmem;
Begin
splitDot=splitRate*MinMove();
if(Day !=Day[1])//如果当前K线与前一根不在同一天
{
SetGlobalVar(0,0);//全局变量记录仓位,防止重复开仓
SetGlobalVar(1,0);//全局变量记录交易次数,防止过度交易
}
{
myposition=GetGlobalVar(0);//当前持仓初始化
tradNum=GetGlobalVar(1);//当前交易次数初始化
//跌停板附近不开多仓,涨停附近不开空仓
if(BarStatus==2)//当前K线为最近一根K线时
{
b1=Close>(Q_LowerLimit()+20*MinMove());//如果收盘价大于跌停价向上浮动20个点,b1为真
s1=Close<(Q_UpperLimit()-20*MinMove()) ;//如果收盘价小于涨停价向下浮动20个点,s1为真
}
Else
{
b1=Not(High==Low And High==Close Or High[1]==Low[1] );//涨跌停板及集合竞价的处理
s1=Not(High==Low And High==Close Or High[1]==Low[1] );//
}
If(tradNum<=maxTrad And Time<=tradEndtime/100)//如果当前交易次数小于等于最大交易次数并且时间处于14:40之前
{
//开仓条件
bc=High>=OpenD(0)+minrange*MinMove And b1 ;//bc为真
sc=Low<=OpenD(0)-minrange*MinMove And s1 ;//sc为真
}
// 当前无仓-----------------------------------------------------------------Begin
if(myposition<>1 )//如果当前没有多单持仓
{
// 当前无仓,开始建立多头
if(bc)//如果bc是真
{
if(BarStatus==2) //如果当前为最后一根K线
tradePrice= Q_AskPrice +splitDot;//开仓价格为当前最新卖盘价格+滑点
Else tradePrice=Open+splitDot; //如果当前不是最后一根K线,开仓价格为当前K线的开盘价+滑点
if(Buy(Lots,tradePrice))
{
tradnum=tradnum+1;
myposition=1;
tradmem="指令一:"+" myposition="+text(myposition)+" 当前交易次数:"+text(tradnum);
}//开多仓
}
Else//没有达到开多条件的时候
If(time>=closeTime/100)
{
if(myposition==-1)
{
if(BarStatus==2) //如果当前为最后一根K线
tradePrice= Q_AskPrice +splitDot;//开仓价格为当前最新卖盘价格+滑点
Else tradePrice=Open+splitDot; //如果当前不是最后一根K线,开仓价格为当前K线的开盘价+滑点
if(BuyToCover(Lots,tradePrice))
{
myposition=0;
tradmem="指令二:"+" myposition="+text(myposition)+" 当前交易次数:"+text(tradnum);
}//收盘前平空单
}
}
}
else if(myposition<>-1 )//如果当前没有空单持仓
{
if(sc)//如果sc是真的
{
if(BarStatus==2)tradePrice= Q_BidPrice -splitDot;//如果当前K线为最后一根,开仓价格为最新买盘价格-滑点
Else tradePrice=Open-splitDot; //如果当前K线不是最后一根,开仓价格为当前K线的开盘价-滑点
If(SellShort(Lots,tradePrice)) //如果以开仓价格开空lots手成功
{
tradnum=tradnum+1;
myposition=-1;
tradmem="指令三:"+" myposition="+text(myposition)+" 当前交易次数:"+text(tradnum);
}//开空仓
}
else If(time>=closeTime/100)
{
if(myposition==1)
{
if(BarStatus==2)tradePrice= Q_BidPrice -splitDot;//如果当前K线为最后一根,开仓价格为最新买盘价格-滑点
Else tradePrice=Open-splitDot; //如果当前K线不是最后一根,开仓价格为当前K线的开盘价-滑点
If(Sell(Lots,tradePrice)) //如果平多lots手成功
{
myposition=0;
tradmem="指令四:"+" myposition="+text(myposition)+" 当前交易次数:"+text(tradnum);
}//收盘前平多仓
}
}
}
SetGlobalVar(0,myposition);
SetGlobalVar(1,tradnum);
} Commentary(tradmem);
End |
|