设为首页收藏本站

 找回密码
 注册
楼主: leixb
打印 上一主题 下一主题

深刻理解TB的执行流程 [复制链接]

Rank: 2

精华
0
UID
4386
积分
62
帖子
9
主题
0
阅读权限
30
注册时间
2009-5-13
最后登录
2019-3-30
9#
发表于 2009-10-23 16:05:42 |只看该作者
我的策略是在交易时间内启动自动交易 然后记录下最新bar 在最新把人下单 然后购买加仓。可是就是有问题,不能够记录下启动自动交易策略时刻的Bar!!。如下程序请帮修改
//------------------------------------------------------------------------
// 简称: test
// 名称: test
// 类别: 交易指令
// 类型: 多头建仓
// 输出:
//------------------------------------------------------------------------



Vars
        BoolSeries executed(False);
        BoolSeries recorded(False);
        NumericSeries FirstTradedBar(-10);
        NumericSeries TradeStage(0);   
Begin
               

    If(BarStatus == 0)
    {
                FirstTradedBar=-10;
                TradeStage=0;
                executed=False;
                recorded=False;
        }
        Else
        {
                TradeStage=TradeStage[1];
                FirstTradedBar=FirstTradedBar[1];
                executed=executed[1];
                recorded=recorded[1];

    }



        if((!recorded)&&(CurrentBar==BarCount-2))
                {
                                FirstTradedBar=CurrentBar+1;
                                recorded=True;
                }



        If(((CurrentBar==FirstTradedBar)||(CurrentBar==FirstTradedBar+1))&&(!executed)&&(TradeStage==0)&&(MarketPosition == 0)&&(time<0.1458))
                {

                                //If(Buy(1,Close))
                                If(Buy(1,NextOpen, True))
                                {
                                        Commentary("===做多成功(BARany)=====");
                                }

                                TradeStage=1;
                                executed=True;
                }

        Commentary("CurrentBar="+Text(CurrentBar));
        Commentary("FirstTradedBar="+Text(FirstTradedBar));
        Commentary("TradeStage="+Text(TradeStage));
        Commentary("executed="+IIFString(executed,"True","False"));       
        Commentary("recorded="+IIFString(recorded,"True","False"));       
END



//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2009/10/23 13:59
// 版权所有        xltz02
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

使用道具 举报

Rank: 3Rank: 3

精华
1
UID
3800
积分
133
帖子
28
主题
6
阅读权限
40
注册时间
2009-3-12
最后登录
2009-9-27
8#
发表于 2009-9-27 09:00:59 |只看该作者

回复 2# 幺林 的帖子

是的。最新Bar之前的Bar,都被计算过。只有最新的bar上,才会反复被Tick触发。

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
4140
积分
1557
帖子
242
主题
49
阅读权限
70
注册时间
2009-4-17
最后登录
2020-11-26
7#
发表于 2009-9-25 16:19:54 |只看该作者
"2、在前199根Bar上,每根Bar上执行一次交易代码。如果发现某些Bar上符合开平仓条件,仅仅显示交易信号,但不实际发出交易指令。因为你迟到了,刚才的行情已经成为历史了。"
这点有点出入吧?实际要看你的代码是怎么写的。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
6#
发表于 2009-9-24 16:11:43 |只看该作者

回复 5# zjs 的帖子

是的。

使用道具 举报

Rank: 2

精华
0
UID
5274
积分
91
帖子
15
主题
8
阅读权限
30
注册时间
2009-8-25
最后登录
2019-10-23
5#
发表于 2009-9-24 15:05:33 |只看该作者

回复 3# lh948 的帖子

那么用NextOpen是不是就可以了, 譬如If(Close满足某条件) Buy(lots, NextOpen, True) 是不是就可以保证每次的交易指令只是针对每个Bar的最后收盘价进行交易机会判断的?

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5525
积分
1473
帖子
429
主题
93
阅读权限
60
注册时间
2009-9-22
最后登录
2022-5-23
4#
发表于 2009-9-24 14:55:34 |只看该作者
受益非浅,谢谢各位!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20906
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
3#
发表于 2009-9-23 10:44:04 |只看该作者
在交易时间前启动自动交易:
4.如果你只用buy和sell函数的话,在同一个bar上是不会反复开仓的,如果你用A_sendorder就会反复开仓!,如果使用close写是会有反复开仓的可能。

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
0
UID
4485
积分
3032
帖子
164
主题
33
阅读权限
80
注册时间
2009-5-25
最后登录
2011-3-26
2#
发表于 2009-9-22 21:04:34 |只看该作者
3、开盘后,分笔交易数据(tick)开始传过来。为了保持实时性,TB就必须对每个tick做出响应,就是在每个tick都运行一次程序代码。
   由此可见,交易时间里,每根Bar上,程序代码都被多次执行。这一点,和历史数据测试时明显不同。
====>
好象只有最新bar被反复执行。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-23 12:44

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部