开拓者期货期权程序化系统交易论坛

标题: 全局变量初始化问题(已经解决,附出错代码) [打印本页]

作者: skyline    时间: 2011-2-16 13:39:19     标题: 全局变量初始化问题(已经解决,附出错代码)

本帖最后由 skyline 于 2011-2-17 19:55 编辑

Params
        Numeric Position(0);
Begin
        If(BarStatus==0)
        {
                SetGlobalVar(0,Position);

        }//初始化全局变量

        Commentary("GlobalVar0="+Text(GetGlobalVar(0)));

用参数初始化全局变量,早上把0改成1,为什么最后一根BAR输出还是0?前面的bar都是1
开盘后重新登录后改参数是正常的,而开盘前修改了没用。


--------------------------------------------------------------------------------------------------------------------
找到问题了,引用了在最后一根bar有效的函数导致出错,忘记加barstatus==2限定了。
但是很奇怪,参数只有1出错,如果改成0或2或其他数字都不会出错,不知道是不是BUG?

Params

        Numeric Position(1);
        Numeric UpBand(1.5);       
        Numeric DownBand(1.5);
        Numeric Length(400);       
        Numeric EntryRate(8.5);
        Numeric Lots(1);
Vars
        Numeric BuyRevenue;
        Numeric SellRevenue;               
        NumericSeries SpreadRate;
        Numeric UpLine;                //上轨
        Numeric DownLine;                //下轨
        NumericSeries MidLine;        //中间线
Begin
        If(BarStatus==0)
        {
                SetGlobalVar(0,Position);

        }//初始化全局变量
       
        If(Data0.Close != InvalidNumeric && Data1.Close != InvalidNumeric)
        {
        SpreadRate = Data1.Close - Data0.Close;
            MidLine = AverageFC(SpreadRate,Length);
            UpLine = MidLine + UpBand;
            DownLine = MidLine - DownBand;
               
                BuyRevenue = Data1.Q_BidPrice - Data0.Q_AskPrice;
                SellRevenue= Data1.Q_AskPrice - Data0.Q_BidPrice;

                If(BuyRevenue>EntryRate And BuyRevenue> UpLine And GetGlobalVar(0)==0 And High!=Low)
                {
                        Data0.A_SendOrder(Enum_Buy,Enum_Entry,Lots,Data0.Q_AskPrice+10);
                        Data1.A_SendOrder(Enum_Sell,Enum_Entry,Lots,data1.Q_BidPrice-10);
                        SetGlobalVar(0,1);
                }

                If(SellRevenue<DownLine And GetGlobalVar(0)==1 And High!=Low)
                {
                        Data0.A_SendOrder(Enum_Sell,Enum_Exit,Lots,Data0.Q_BidPrice-10);
                        Data1.A_SendOrder(Enum_Buy,Enum_Exit,Lots,data1.Q_AskPrice+10);
                        SetGlobalVar(0,0);
                }
        }

        Commentary("GlobalVar0="+Text(GetGlobalVar(0)));
End
作者: 欲速不达    时间: 2011-2-16 14:09:50

本帖最后由 欲速不达 于 2011-2-16 14:11 编辑

回复 1# skyline


    参数直接设置就可以了,不用赋值变量,你这样初始化会在每次断线重连或加载公式时都会去初始化一次,最后等于全局变量没用上。要知道初始化的作用是什么,是防止带有无效值才去初始化。
作者: lh948    时间: 2011-2-16 14:14:45

0改成1,是将Position默认值改成1,是吧?
最后一个bar变成历史bar的时候,输出还是0吗?
作者: skyline    时间: 2011-2-16 17:30:10

0改成1,是将Position默认值改成1,是吧?
最后一个bar变成历史bar的时候,输出还是0吗? ...
lh948 发表于 2011-2-16 14:14

0改成1,是将Position默认值改成1,是吧?   是的
最后一个bar变成历史bar的时候,输出还是0吗?
我是用全局变量控制下单的,因为有仓位了,所以把0改成1,但是点启动交易的时候还是下单出去,由于没开盘被拒绝,试了几次都是这样
作者: skyline    时间: 2011-2-16 17:32:05

回复  skyline


    参数直接设置就可以了,不用赋值变量,你这样初始化会在每次断线重连或加载公式时都 ...
欲速不达 发表于 2011-2-16 14:09

怎么参数设置全局变量?

如果单纯的参数,后面是没法给他赋值修改的
作者: 欲速不达    时间: 2011-2-16 19:43:42

回复 5# skyline

if(???)  
{
      buy();  
      SetGlobalVar(0,1);
}

if(????)
{
      sell;
      SetGlobalVar(0,0);
}
作者: skyline    时间: 2011-2-17 07:58:47

本帖最后由 skyline 于 2011-2-17 08:00 编辑

今天确认了,开盘之前无论怎么修改参数,最后一根bar的全局变量都为0.请问是什么机制导致?
我写的套利交易有隔夜的,第二天必须我手动设置下目前的仓位,不知道我这种需求还有什么其他更好的方法实现不?
Params
        Numeric Position(1);
Begin
        If(BarStatus==0)
        {
                SetGlobalVar(0,Position);

        }//初始化全局变量
       
        If(Data0.Close != InvalidNumeric && Data1.Close != InvalidNumeric)
        {

                If(开仓条件 And GetGlobalVar(0)==0 And High!=Low)
                {
                        Data0.A_SendOrder
                        Data1.A_SendOrder
                        SetGlobalVar(0,1);
                }

                If(平仓条件 And GetGlobalVar(0)==1 And High!=Low)
                {
                        Data0.A_SendOrder
                        Data1.A_SendOrder
                        SetGlobalVar(0,0);
                }
        }

        Commentary("GlobalVar0="+Text(GetGlobalVar(0)));
End
作者: skyline    时间: 2011-2-17 18:24:05

谁能帮忙解答下,先谢了
作者: 糊涂何妨    时间: 2012-12-28 14:16:03

怎么解决的啊?没看到答案嘛




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2