设为首页收藏本站

 找回密码
 注册
查看: 1444|回复: 2
打印 上一主题 下一主题

A_SendOrder开仓问题 [复制链接]

Rank: 3Rank: 3

精华
0
UID
257171
积分
133
帖子
99
主题
32
阅读权限
40
注册时间
2017-9-28
最后登录
2019-11-16
跳转到指定楼层
1#
发表于 2018-5-2 16:05:55 |只看该作者 |倒序浏览
俺是新手,请多包涵啊........

双均线策略,A_SendOrder开平仓。
问题1:为何会出现持有2手多仓的情况?是什么原因导致的?
问题2:If(BKcond and TemB==0&&barstatus==2 && KC==True) //此处加上HasBK==0的限制条件,就一直不开仓了,去掉HasBK==0的限制就能正常开仓了,这是为何?错在哪里?
问题3:初始化全局变量if ( BarStatus==0 && GetGlobalVar(0)==InvalidNumeric)这样是正确的吗?这样能避免断线重连后不必要的再次初始化吗?
源码如下
Params
        Numeric FastLength(5);
        Numeric SlowLength(20);
        Numeric OffSet (8);//委托价格偏移
        Numeric Lots (1);
Vars
        NumericSeries AvgValue1;
        NumericSeries AvgValue2;
        Numeric TemB;//多头持仓
        Numeric TemS;//空头持仓
        BooL KC(False);//开仓许可
        BooL QC(False);//清仓必须
        Bool BKcond(False);
        bool SPcond(False);
        Numeric HasSP(0);//已平多仓标志
        Numeric HasBK (0);//已开多仓标志
       
       
Begin
        // 集合竞价和小节休息过滤
        If(!CallAuctionFilter()) Return;
       
if ( BarStatus==0 && GetGlobalVar(0)==InvalidNumeric)//初始化全局变量
{
HasSP = 0;
HasBK = 0;
SetGlobalVar (0 ,HasSP);
SetGlobalVar ( 1 , HasBK );
} ELse
{
HasSP = GetGlobalVar (0);
HasBK = GetGlobalVar (1);
Commentary("HasSP" +Text(HasSP));
Commentary("HasBK" +Text(HasBK));
}
        KC=time>=0.090000 and time<0.145800 || time>=0.0900 and time<0.1458 || time>=0.210000 and time<0.232800 || time>=0.2100 and time<0.2328;//允许开仓
  QC=time>=0.145800 and time<0.150000 || time>=0.1458 and time<0.1500 || time>=0.232800 and time<0.233000 || time>=0.2328 and time<0.2330;//必须清仓

        AvgValue1 = AverageFC(Close,FastLength);   
        AvgValue2 = AverageFC(Close,SlowLength);

        PlotNumeric("MA1",AvgValue1);
        PlotNumeric("MA2",AvgValue2);       
        BKcond=CrossOver (AvgValue1[1] , AvgValue2[1]);//开多的条件,  
        SPcond=CrossUnder (AvgValue1[1] , AvgValue2[1]);
        TemB = A_BuyPosition();//多头持仓
        TemS = A_SellPosition(); //空头持仓

        If(BKcond and TemB==0&&barstatus==2 && KC==True) //此处加上HasBK==0的条件,就不能开仓。
        {
                A_SendOrder(Enum_buy,Enum_Entry,Lots,Q_AskPrice+OffSet*MinMove*PriceScale);//A_SendOrder开多,
                SetGlobalVar(0,0);//允许平多仓
                SetGlobalVar(1,1);
               
        }
        If(TemB>0)
        {
        SetGlobalVar(0,0);//允许平多仓,hassp=0
        SetGlobalVar(1,1);//hasbk=1
       
        }
        If(SPcond and TemB>0&&barstatus==2 && HasSP==0 || TemB>0&&barstatus==2 && QC==True && HasSP==0)  
        {
                A_SendOrder(Enum_Sell,Enum_Exit,TemB,Q_BidPrice-offSet*MinMove*PriceScale);
                SetGlobalVar(0,1);//hassp=1
                SetGlobalVar(1,0);//hasbk=0
       
        }
       
        End
  

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2018-5-2 16:59:19 |只看该作者
1,平仓里都会使用hasSP==0来控制发单次数,为啥在开仓里没有全局变量来控制次数呢?仅靠头寸来控制是不够的,因为成交以及回报到本地是需要时间的。
2,hasBk==0的条件在开仓时是一定需要的。使用fileappend在条件下输出0或1号全局变量的值,来跟踪一下是哪一个环节与预期的不一样,这样才好找到错在哪里。
3,个人建议,初始化只要使用getglobalvar(0)==invalidnumeric就可以了,不要加barstatus==0的。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
257171
积分
133
帖子
99
主题
32
阅读权限
40
注册时间
2017-9-28
最后登录
2019-11-16
3#
发表于 2018-5-2 18:14:17 |只看该作者
小米 发表于 2018-5-2 16:59
1,平仓里都会使用hasSP==0来控制发单次数,为啥在开仓里没有全局变量来控制次数呢?仅靠头寸来控制是不够 ...

多谢指导。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-26 11:54

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部