设为首页收藏本站

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

多个开仓条件怎么判断? [复制链接]

Rank: 1

精华
0
UID
238121
积分
45
帖子
33
主题
12
阅读权限
10
注册时间
2016-8-2
最后登录
2018-12-26
跳转到指定楼层
1#
发表于 2016-8-15 11:16:13 |只看该作者 |倒序浏览
老师,请问,下面的程序:
1)con1,只能开仓1次;
2)con2,能够开仓多次;
这个用什么方法来控制?

if (con1)
{
    buy(1,open);  //这里只能开仓1次;
    if (con2)
    {
         buy(1,open);  //这里需要能够多次开仓
    }
}

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2016-8-15 13:17:17 |只看该作者
con2的条件是在con1的下层条件里,这里确认是你想要的吗?
如果是这样的逻辑,那么con2下的发单 ,也是在con1之下 哟……这个与你的需求描述似乎有些冲突……
或者是我还没有理解您的意思?

使用道具 举报

Rank: 1

精华
0
UID
238121
积分
45
帖子
33
主题
12
阅读权限
10
注册时间
2016-8-2
最后登录
2018-12-26
3#
发表于 2016-8-15 14:02:47 |只看该作者
改了一下:
1)con1,只能开仓1次;
2)con2,能够开仓多次;
这个用什么方法来控制?

if (con1)
{
    buy(1,open);  //这里只能开仓1次;
}
if (con2)
{
     buy(1,open);  //这里需要能够多次开仓
}

使用道具 举报

Rank: 1

精华
0
UID
238121
积分
45
帖子
33
主题
12
阅读权限
10
注册时间
2016-8-2
最后登录
2018-12-26
4#
发表于 2016-8-15 14:06:56 |只看该作者
另外,还有个问题:
使用数据库,是不是每个tick要读写硬盘?会不会影响性能?
全局变量是不是比数据库性能要高很多?

使用道具 举报

Rank: 1

精华
0
UID
238121
积分
45
帖子
33
主题
12
阅读权限
10
注册时间
2016-8-2
最后登录
2018-12-26
5#
发表于 2016-8-15 14:29:20 |只看该作者
con1用于首次开仓(只能开仓1次),con2一次用于后续的多次开仓;
我有2种思路:使用全局变量或数据库,不知道哪个好;
如果使用数据库,每个tick如果读写硬盘,担心性能会有问题。
---------------------------------------------------------
var1=0;  //var1 为数据库 或 全局变量, 语法错误问题这里暂不讨论,只是描述思路
if (con1 and var1==0)
{
    buy(1,open);  //这里只能开仓1次;
    var1=1;
}
if (con2 and var1==1)
{
     buy(1,open);  //这里需要能够多次开仓
}
问题有2个,请老师回答:
1)使用数据库,是不是每个tick要读写硬盘?会不会影响性能?如果使用全局变量,则退出TB程序后,全局变量就失效了。
2)con1用于首次开仓(只能开仓1次),con2一次用于后续的多次开仓;麻烦您写一个简单的程序例子,我做参考。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
6#
发表于 2016-8-15 14:55:33 |只看该作者
tian_cd 发表于 2016-8-15 14:29
con1用于首次开仓(只能开仓1次),con2一次用于后续的多次开仓;
我有2种思路:使用全局变量或数据库,不 ...

是的,相对于读写数据库而言,全局变量的性能更好些。
但如果在某些特定的需求下,只能使用写数据库而非全局变量,例如在使用图表间的数据传递等。
您上述的需求里可以不用全局变量 的,序列变量即可。
vars
   numericsereis  flag;
begin
   if(con1 && flag==0)
   {
        buy;
        flag =1;
    }
    if(con2)
    {
         buy;
     }
     if(sellcon)
    {
           sell;
           flag =0;
     }
//另外需要将全局交易设置里勾选 为允许连续建仓并设置好次数。

使用道具 举报

Rank: 4

精华
0
UID
88963
积分
269
帖子
208
主题
16
阅读权限
50
注册时间
2011-12-25
最后登录
2022-12-9
7#
发表于 2016-8-15 15:28:00 |只看该作者
小米 发表于 2016-8-15 14:55
是的,相对于读写数据库而言,全局变量的性能更好些。
但如果在某些特定的需求下,只能使用写数据库而非 ...

我觉得你写的这个 con1 && flag==0
如果设置了可以连续开仓,有可能在同一个bar上开仓多次哦,嘿嘿

使用道具 举报

Rank: 1

精华
0
UID
238121
积分
45
帖子
33
主题
12
阅读权限
10
注册时间
2016-8-2
最后登录
2018-12-26
8#
发表于 2016-8-15 15:33:43 |只看该作者
首先,感谢您的回复;
另外,我没有描述清楚,我的功能需求是:
if  (符合con1条件)
{
     buy1次,并且只允许1次;
}
if  符合con2条件  &&  con1条件买入了1次
{
     buy;  //允许多次buy
}


程序我这样写:
begin
   if(con1 && flag==0)
   {
        buy;
        flag =1;
    }
    if(con2 && flag==1)  //第1次买入之后,这里可以多次买入;如果没有第1次买入,这里不允许买入;
    {
         buy;
     }
     if(sellcon)
    {
           sell;
           flag =0;
     }
end

问题:
1)按照我现在的功能需求,是不是只能使用全局变量?用序列变量好像flag只在buy和sell的bar赋值,其他bar没有赋值;假设现在开始一个新的bar,flag没有值,我不知道flag是0还是1,无法进行buy的条件判断,我的理解对吗?

使用道具 举报

Rank: 1

精华
0
UID
238121
积分
45
帖子
33
主题
12
阅读权限
10
注册时间
2016-8-2
最后登录
2018-12-26
9#
发表于 2016-8-15 15:47:40 |只看该作者
问题:
2)如果使用全局变量,假设我执行了:
   if(con1 && flag==0)
   {
        buy;
        flag =1;
    }
注意,此时 flag =1;

   之后退出tb,隔一段时间再次进入tb,如果从图表信息看,已经sell了(实际并没有平仓),是不是相当于在历史bar执行了:
   if(sellcon)
    {
           sell;
           flag =0;
    }

注意,此时 flag =0;

这样,由于退出了tb,导致图表上执行了sell,实际没有执行sell;我希望 flag =1,而根据图表计算, flag =0;
当然,原因是因为:人工退出tb导致的;
是不是得出结论:如果使用程序化交易,尽量不要退出TB;一旦退出TB再进入,最好检查一下:buy和sell的图表状态有无变化?


不知道我描述清楚没有,如果描述清楚了,麻烦回复下。

使用道具 举报

Rank: 1

精华
0
UID
238121
积分
45
帖子
33
主题
12
阅读权限
10
注册时间
2016-8-2
最后登录
2018-12-26
10#
发表于 2016-8-15 16:09:05 |只看该作者
问题:
3)同一个bar上,会出现重复开仓吗?TB怎样避免重复开仓?

使用道具 举报

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

bottom

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

GMT+8, 2024-5-10 19:14

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部