- 精华
- 0
- 在线时间
- 280 小时
- UID
- 5525
- 积分
- 1473
- 帖子
- 429
- 阅读权限
- 60
- 注册时间
- 2009-9-22
- 最后登录
- 2022-5-23
- 精华
- 0
- UID
- 5525
- 积分
- 1473
- 帖子
- 429
- 主题
- 93
- 阅读权限
- 60
- 注册时间
- 2009-9-22
- 最后登录
- 2022-5-23
|
好久没有人对这个帖子研究了。我有几个问题想请教:
(1) 在BarStatus == 2分支,由于使用B/S指令,所以不存在重复发单问题。
(2) 在CurrentBar==BarCount-2 分支,实际行情时,是发生在新的Bar的第一个Tick传来时,TB补一个程序,还是与新Bar的第一个Tick一起执行?进一步问题是这个分支下的B/S指令是否能发送到交易柜台,还是只作信号显示?
(3) 最后的Else分支只是用作历史回测,应该说只要LongCon和ShortCon条件时稳定的,信号就能保持,但是我试下来并非如此。
为了做测试验证,我对版主的原始程序做了少许变得,让LongCon和ShortCon满足条件变得容易些;在不同的分支B/S的手数不一样;还加了FileAppend用来记录,程序如下,希望大家测试分析。谢谢!- //------------------------------------------------------------------------
- // 简称: test1
- // 名称:
- // 类别: 交易指令
- // 类型: 多头建仓
- // 输出:
- //------------------------------------------------------------------------
- Params
- Numeric Length(20);
- Numeric OffSet(5);
- Vars
- Numeric MinPoint;
- Numeric AvgValue;
- NumericSeries UpBand;
- NumericSeries DnBand;
- BoolSeries LongCon;
- BoolSeries ShortCon;
-
- Numeric LastBarIndex; // 用来保存最后交易Bar的索引
- Numeric SendOrderFlag; // 用来保存交易状态信息
- Begin
- If(Date!=Date[1] && High == Low ) Return; // 集合竞价数据的过滤
- LastBarIndex = GetGlobalVar(0);
- SendOrderFlag = GetGlobalVar(1);
- If(LastBarIndex != CurrentBar)
- {
- SendOrderFlag = 0;
- LastBarIndex = CurrentBar;
- SetGlobalVar(0,LastBarIndex);
- SetGlobalVar(1,SendOrderFlag);
- }
-
- MinPoint = MinMove*PriceScale;
- AvgValue = AverageFC(Close,Length);
- UpBand = AvgValue + OffSet * MinPoint;
- DnBand = AvgValue - OffSet * MinPoint;
-
- LongCon = Low< Lowest(Low[1],5); //CrossOver(Close,UpBand);
- ShortCon = High> Highest(high[1],5); //CrossUnder(Close,DnBand);
-
- If(BarStatus == 2) // 实际交易
- {
- If(SendOrderFlag==1)
- {
- Buy(3,Close);FileAppend("C:\Test1.log",TimeToString(CurrentTime)+" "+Text(CurrentBar)+" Buy(3,Close) "+Text(Close));
- }else If(SendOrderFlag==-1)
- {
- SellShort(3,Close);FileAppend("C:\Test1.log",TimeToString(CurrentTime)+" "+Text(CurrentBar)+" SellShort(3,Close) "+Text(Close));
- }Else If(SendOrderFlag ==0 && ((Time==0.1100 && CurrentTime > 0.112800 )||(Time==0.1430 && CurrentTime > 0.145800 )))
- {
- If(MarketPosition!=1 && LongCon)
- {
- Buy(3,Q_AskPrice);FileAppend("C:\Test1.log",TimeToString(CurrentTime)+" "+Text(CurrentBar)+" Buy(3,Q_AskPrice) "+Text(Q_AskPrice));
- SendOrderFlag = 1;
- }Else If(MarketPosition!=-1 && ShortCon)
- {
- SellShort(3,Q_BidPrice);FileAppend("C:\Test1.log",TimeToString(CurrentTime)+" "+Text(CurrentBar)+" SellShort(3,Q_BidPrice) "+Text(Q_BidPrice));
- SendOrderFlag = -1;
- }
- SetGlobalVar(1,SendOrderFlag);
- }
- }Else If(CurrentBar==BarCount-2)// 倒数第二根Bar
- {
- If(SendOrderFlag==1)
- {
- Buy(2,NextOpen,True);FileAppend("C:\Test1.log",TimeToString(CurrentTime)+" "+Text(CurrentBar)+" Buy(2,NextOpen,True) Flag==1 "+Text(NextOpen));
- }else If(SendOrderFlag==-1)
- {
- SellShort(2,NextOpen,True);FileAppend("C:\Test1.log",TimeToString(CurrentTime)+" "+Text(CurrentBar)+" SellShort(2,NextOpen,True) Flag==-1 "+Text(NextOpen));
- }Else
- {
- If(MarketPosition!=1 && LongCon)
- {
- Buy(2,NextOpen,True);FileAppend("C:\Test1.log",TimeToString(CurrentTime)+" "+Text(CurrentBar)+" Buy(2,NextOpen,True) "+Text(NextOpen));
- }
-
- If(MarketPosition!=-1 && ShortCon)
- {
- SellShort(2,NextOpen,True);FileAppend("C:\Test1.log",TimeToString(CurrentTime)+" "+Text(CurrentBar)+" SellShort(2,NextOpen,True) "+Text(NextOpen));
- }
- }
- }Else // 测试
- {
- If(MarketPosition!=1 && LongCon)
- {
- Buy(1,Close); FileAppend("C:\Test1.log",TimeToString(CurrentTime)+" "+Text(CurrentBar)+" Buy(1,Close) "+Text(NextOpen));
- }
-
- If(MarketPosition!=-1 && ShortCon)
- {
- SellShort(1,Close);FileAppend("C:\Test1.log",TimeToString(CurrentTime)+" "+Text(CurrentBar)+" SellShort(1,Close) "+Text(NextOpen));
- }
- }
- End
- //------------------------------------------------------------------------
- // 编译版本 GS2004.06.12
- // 用户版本 2009/10/07 20:34
- // 版权所有 guqf
- // 更改声明 TradeBlazer Software保留对TradeBlazer平台
- // 每一版本的TrabeBlazer公式修改和重写的权利
- //------------------------------------------------------------------------
复制代码 |
|