设为首页收藏本站

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

请教版主:如何为全局变量赋初值? [复制链接]

Rank: 2

精华
0
UID
110801
积分
61
帖子
25
主题
10
阅读权限
30
注册时间
2012-6-5
最后登录
2021-10-23
跳转到指定楼层
1#
发表于 2012-9-17 08:24:01 |只看该作者 |倒序浏览
本帖最后由 hql123 于 2012-9-17 08:38 编辑

1. 日内交易,全局变量初始值只赋一次,以后由开仓控制,我用了:
If(BarStatus == 0)
    {
       
       
                Setglobalvar(1,1);
                        Setglobalvar(2,1);
       
        }

If (MarketPosition<>1 )
    {
                  myEntryMoreSignal1 = GetGlobalVar(1)==1;
                       
              if (myEntrySignal1 and myEntryMoreSignal1)
                  {
                          myEntryPrice=Open+MinPoint;
                      Buy(lots,myEntryPrice);
                          SetGlobalVar(1,0);
                          setglobalvar(2,1);
                  }
        }
       
        else if  (MarketPosition<>-1 )
       
    {                  
              myEntryMoreSignal2 = GetGlobalVar(2)==1;
                  
                  if (myEntrySignal2 and myEntryMoreSignal2 )
                  {
                       myEntryPrice=Open-MinPoint;
                       SellShort(lots,myEntryPrice);
                           SetGlobalVar(2,0);
                           SetGlobalVar(1,1);
                  }
        }
为什么交易信号不出来?
想做到:开多仓后不再加多仓,多仓平后不能再次开多仓,但可以开空仓;开空仓情况同。

如果用
If(BarsSinceentry == 0)
        {
               
               
                Setglobalvar(1,1);
            Setglobalvar(2,1);
        }
可以出现交易信号,但可能多次对全局变量赋初始值。
请版主不吝赐教!

Rank: 2

精华
0
UID
110801
积分
61
帖子
25
主题
10
阅读权限
30
注册时间
2012-6-5
最后登录
2021-10-23
2#
发表于 2012-9-17 08:30:13 |只看该作者
本帖最后由 hql123 于 2012-9-17 09:01 编辑

(StartBarTime<Time*1000000) && (Time*1000000<CloseBarTime)

使用道具 举报

初级大户

酱油

Rank: 5Rank: 5

精华
0
UID
37561
积分
1108
帖子
395
主题
9
阅读权限
60
注册时间
2011-5-4
最后登录
2014-11-3
3#
发表于 2012-9-17 08:59:30 |只看该作者
这样既然是历史测试,就不需要全局变量控制了吧,序列变量就够了额。
第二个问题是因为currenttime是系统时间,time才是K线时间

使用道具 举报

Rank: 2

精华
0
UID
110801
积分
61
帖子
25
主题
10
阅读权限
30
注册时间
2012-6-5
最后登录
2021-10-23
4#
发表于 2012-9-17 09:02:55 |只看该作者
alex647l 发表于 2012-9-17 08:59
这样既然是历史测试,就不需要全局变量控制了吧,序列变量就够了额。
第二个问题是因为currenttime是系统时 ...

谢谢!如果不是历史测试,应该如何赋值,请赐教!

使用道具 举报

初级大户

酱油

Rank: 5Rank: 5

精华
0
UID
37561
积分
1108
帖子
395
主题
9
阅读权限
60
注册时间
2011-5-4
最后登录
2014-11-3
5#
发表于 2012-9-17 09:50:08 |只看该作者
hql123 发表于 2012-9-17 09:02
谢谢!如果不是历史测试,应该如何赋值,请赐教!

您的逻辑跟我的思考模式有点不同,我个人认为这样写应该有信号,但是实际却没有,请试试把marketposition=0 1 -1三种情况分开写是否会好一些,只看到部分代码,不清楚LZ的策略是否是一只反手没有空仓,但是个人习惯分开写这样方便找出问题。
commetery 这个多用在一些判断句中会对自己纠错有很大帮助的哦

使用道具 举报

Rank: 2

精华
0
UID
110801
积分
61
帖子
25
主题
10
阅读权限
30
注册时间
2012-6-5
最后登录
2021-10-23
6#
发表于 2012-9-17 10:04:29 |只看该作者
alex647l 发表于 2012-9-17 09:50
您的逻辑跟我的思考模式有点不同,我个人认为这样写应该有信号,但是实际却没有,请试试把marketposition ...

谢谢!

使用道具 举报

Rank: 2

精华
0
UID
110801
积分
61
帖子
25
主题
10
阅读权限
30
注册时间
2012-6-5
最后登录
2021-10-23
7#
发表于 2012-9-17 10:08:23 |只看该作者
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 2

精华
0
UID
110801
积分
61
帖子
25
主题
10
阅读权限
30
注册时间
2012-6-5
最后登录
2021-10-23
8#
发表于 2012-9-17 10:14:35 |只看该作者
Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);
        Numeric FastLength1(20);
        Numeric Upperband(25);
        Numeric lots(1);
                Numeric StartBarTime(91000);  
        Numeric CloseBarTime(145000);     
    Numeric CloseLastTime(145800);   
            Numeric StopLossSet(30);    // 止损设置
       
Vars
        NumericSeries MACDValue;
        NumericSeries AvgMACD;
        NumericSeries MACDDiff;
        NumericSeries AvgValue20;
       
        Numeric MinPoint;           // 一个最小变动单位,也就是一跳
    Numeric MyEntryPrice;       // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
   
    Numeric MyExitPrice;        // 平仓价格
           
       
        Bool    myEntrySignal1(False) ;
        Bool    myEntrySignal2(False) ;
        Bool    myEntryMoreSignal1(False) ;
        Bool    myEntryMoreSignal2(False) ;
        Bool    StartTime;
Begin

    MACDValue = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;       
        AvgMACD = XAverage(MACDValue,MACDLength);
        MACDDiff = MACDValue - AvgMACD;
        AvgValue20 = AverageFC(Close,FastLength1);
        MinPoint=MinMove*PriceScale;
       
        myEntrySignal1=MACDDiff[1]>1  and Close[1]>Open[1] and Close[1]>AvgValue20[1] and (Close[1]-AvgValue20[1])<Upperband;
        myEntrySignal2=MACDDiff[1]<-1 and Close[1]<Open[1] and Close[1]<AvgValue20[1] and (AvgValue20[1]-Close[1])<Upperband;
       
        /*If(BarStatus == 0)
    {
       
       
                Setglobalvar(1,1);
            Setglobalvar(2,1);
       
        }*/
       
       
       
        StartTime=(StartBarTime<Time*1000000) && (Time*1000000<CloseBarTime);
       
       
        If(BarsSinceentry == 0)
        {
               
               
                Setglobalvar(1,1);
            Setglobalvar(2,1);
        }
       
        /*        Setglobalvar(1,1);
            Setglobalvar(2,1); */
       
        If (MarketPosition<>1  and StartTime)
    {
                  myEntryMoreSignal1 = GetGlobalVar(1)==1;
                       
              if (myEntrySignal1 and myEntryMoreSignal1)
                  {
                          myEntryPrice=Open+MinPoint;
                      Buy(lots,myEntryPrice);
                          SetGlobalVar(1,0);
                          setglobalvar(2,1);
                  }
        }
       
        else if  (MarketPosition<>-1 and StartTime)
       
    {                  
              myEntryMoreSignal2 = GetGlobalVar(2)==1;
                  
                  if (myEntrySignal2 and myEntryMoreSignal2 )
                  {
                       myEntryPrice=Open-MinPoint;
                       SellShort(lots,myEntryPrice);
                           SetGlobalVar(2,0);
                           SetGlobalVar(1,1);
                  }
        }
end

今天满足条件了,为何信号没出现在图表,请教高手!

使用道具 举报

Rank: 2

精华
0
UID
110801
积分
61
帖子
25
主题
10
阅读权限
30
注册时间
2012-6-5
最后登录
2021-10-23
9#
发表于 2012-9-18 08:30:09 |只看该作者
hql123 发表于 2012-9-17 10:14
Params
        Numeric FastLength(12);
        Numeric SlowLength(26);

已经解决了,
用if (10000*Time==900 || BarStatus==0)
       
        {
       
       
                Setglobalvar(1,1);
            Setglobalvar(2,1);
       
        }
解决了赋初值问题!

使用道具 举报

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

bottom

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

GMT+8, 2024-5-16 04:00

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部