设为首页收藏本站

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

全局变量初始化问题(已经解决,附出错代码) [复制链接]

Rank: 5Rank: 5

精华
1
UID
404
积分
1434
帖子
236
主题
74
阅读权限
60
注册时间
2007-9-23
最后登录
2014-7-25
跳转到指定楼层
1#
发表于 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

Rank: 7Rank: 7Rank: 7

精华
0
UID
7437
积分
2872
帖子
537
主题
133
阅读权限
80
注册时间
2010-3-15
最后登录
2013-11-15
2#
发表于 2011-2-16 14:09:50 |只看该作者
本帖最后由 欲速不达 于 2011-2-16 14:11 编辑

回复 1# skyline


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

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
3#
发表于 2011-2-16 14:14:45 |只看该作者
0改成1,是将Position默认值改成1,是吧?
最后一个bar变成历史bar的时候,输出还是0吗?

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
404
积分
1434
帖子
236
主题
74
阅读权限
60
注册时间
2007-9-23
最后登录
2014-7-25
4#
发表于 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,但是点启动交易的时候还是下单出去,由于没开盘被拒绝,试了几次都是这样

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
404
积分
1434
帖子
236
主题
74
阅读权限
60
注册时间
2007-9-23
最后登录
2014-7-25
5#
发表于 2011-2-16 17:32:05 |只看该作者
回复  skyline


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

怎么参数设置全局变量?

如果单纯的参数,后面是没法给他赋值修改的

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
0
UID
7437
积分
2872
帖子
537
主题
133
阅读权限
80
注册时间
2010-3-15
最后登录
2013-11-15
6#
发表于 2011-2-16 19:43:42 |只看该作者
回复 5# skyline

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

if(????)
{
      sell;
      SetGlobalVar(0,0);
}

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
404
积分
1434
帖子
236
主题
74
阅读权限
60
注册时间
2007-9-23
最后登录
2014-7-25
7#
发表于 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

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
404
积分
1434
帖子
236
主题
74
阅读权限
60
注册时间
2007-9-23
最后登录
2014-7-25
8#
发表于 2011-2-17 18:24:05 |只看该作者
谁能帮忙解答下,先谢了

使用道具 举报

Rank: 2

精华
0
UID
112465
积分
63
帖子
36
主题
3
阅读权限
30
注册时间
2012-9-11
最后登录
2013-7-3
9#
发表于 2012-12-28 14:16:03 |只看该作者
怎么解决的啊?没看到答案嘛

使用道具 举报

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

bottom

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

GMT+8, 2024-4-28 05:58

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部