设为首页收藏本站

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

关于A_BuyPosition函数的疑惑 [复制链接]

Rank: 3Rank: 3

精华
0
UID
282705
积分
223
帖子
93
主题
28
阅读权限
40
注册时间
2019-8-19
最后登录
2020-3-31
跳转到指定楼层
1#
发表于 2019-9-24 00:04:27 |只看该作者 |倒序浏览
为什么A_BuyPosition函数显示无效值??

程序如下:
OnBar(ArrayRef<Integer> indexs)
        {
                cdiff1 = Close[1]-Open[1];
                cdiff2 = Close[2]-open[2];
                con1 = (cdiff1>0 && cdiff2>0);
               
                If(A_BuyPosition == 0 && con1 )
                {
                        Buy(Lot,Open);
                }
                Else
                {
                        Commentary("A_BuyPosition="+Text(A_BuyPosition));
                }
        }
结果如图:




附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2019-9-24 08:31:36 |只看该作者
A函数的属性决定了,只有在最后K线且图表关联(或交易单元)关联了交易帐户后方可取到有 效值 。。
一般是启动自动交易进行关联

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
282705
积分
223
帖子
93
主题
28
阅读权限
40
注册时间
2019-8-19
最后登录
2020-3-31
3#
发表于 2019-9-24 08:37:26 |只看该作者
小米 发表于 2019-9-24 08:31
A函数的属性决定了,只有在最后K线且图表关联(或交易单元)关联了交易帐户后方可取到有 效值 。。
一般是 ...

版主早上好,我已经换成TBQquant了,启动自动交易前也已经在头寸管理里关联了模拟账号,为什么还是没有有效值呢?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2019-9-24 09:08:36 |只看该作者
czs763268157 发表于 2019-9-24 08:37
版主早上好,我已经换成TBQquant了,启动自动交易前也已经在头寸管理里关联了模拟账号,为什么还是没有有 ...

启动自动交易了吗?
代码怎么写的?发给我看一下。                                

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
282705
积分
223
帖子
93
主题
28
阅读权限
40
注册时间
2019-8-19
最后登录
2020-3-31
5#
发表于 2019-9-24 09:19:03 |只看该作者
小米 发表于 2019-9-24 09:08
启动自动交易了吗?
代码怎么写的?发给我看一下。                                 ...

Params
        Numeric Lot(1);                                //交易手数
        Numeric LossTime(15);                //止损单位倍数值
        Numeric GainTime(15);                //止盈单位倍数值
Vars
        Series<Numeric> COdiff1;
        Series<Numeric> COdiff2;
        Bool UpTrend(False);
        Bool DownTrend(False);
       
        Series<Numeric> gainExitPrice;        //止盈价
        Series<Numeric> lossExitPrice;        //止损价
        Series<Numeric> buyprice(0);        //买入价
        Series<Numeric> sellprice(0);                //卖出价
Events
    onBar(ArrayRef<Integer> indexs)
    {   
            // 集合竞价过滤
            If(BarStatus == 2 && Time == 0.090000 && CurrentTime < 0.090000) Return;
            If(BarStatus == 2 && Time == 0.210000 && CurrentTime < 0.210000) Return;
            If(BarStatus == 2 && Time == 0.103000 && CurrentTime < 0.103000) Return;
            If(BarStatus == 2 && Time == 0.133000 && CurrentTime < 0.133000) Return;
            //涨跌停板过滤
            If((Close==Q_LowerLimit) or (Close==Q_UpperLimit)) Return;
           
            COdiff1 = Close[1]-Open[1];
            COdiff2 = Close[2]-Open[2];
           
            If(COdiff1>0 && COdiff2>0)
            {
                    UpTrend = True;
            }
            Else If(COdiff1<-0 && COdiff2<-0)
            {
                    DownTrend = True;
            }
            //系统入场       
            If(A_TotalPosition == 0 && UpTrend == True)
            {
                    A_SendOrder(Enum_Buy,Enum_Entry,Lot,Q_AskPrice());
                    SetGlobalVar(0,Q_AskPrice());
                    buyprice = GetGlobalVar(0);
            }
            If(A_TotalPosition == 0 && DownTrend == True)
            {
                    A_SendOrder(Enum_Sell,Enum_Entry,Lot,Q_BidPrice());
                    SetGlobalVar(0,Q_BidPrice());
                    sellprice = GetGlobalVar(0);
            }       
            Commentary("buyprice="+Text(buyprice));
            Commentary("sellprice="+Text(sellprice));

                //计算止盈止损
            If(A_TotalPosition > 0 )
            {
                    buyprice = GetGlobalVar(0);
                    sellprice = 0;
                    gainExitPrice = buyprice + GainTime*MinMove*PriceScale;        //止盈价=开仓价+GT个最小变动价位
                    lossExitPrice = buyprice - LossTime*MinMove*PriceScale;                //止损价=开仓价-LT个最小变动价位
                    Commentary("我的止盈价="+Text(gainExitPrice));
                    Commentary("我的止损价="+Text(lossExitPrice));       
            }
            Else If(A_TotalPosition < 0)
            {       
                    buyprice = 0;
                    sellprice = GetGlobalVar(0);
                    gainExitPrice = sellprice - GainTime*MinMove*PriceScale;                //止盈价=开仓价-GT个最小变动价位
                    lossExitPrice = sellprice + LossTime*MinMove*PriceScale;                //止损价=开仓价+LT个最小变动价位
                    Commentary("我的止盈价="+Text(gainExitPrice));
                    Commentary("我的止损价="+Text(lossExitPrice));       
            }

            Commentary("buyprice="+Text(buyprice));
            Commentary("sellprice="+Text(sellprice));
           
            //多单离场
                If(A_TotalPosition > 0 && A_GetOpenOrderCount == 0)
            {
                    //高于止盈价,全部止盈出场
                    If(High >= gainExitPrice)
                    {
                            A_SendOrder(Enum_Sell,Enum_Exit,Lot,Q_BidPrice());
                            PlotString("Text","止盈",High+1,White);
                            SetGlobalVar(0,0);
                            //count=GetGlobalVar(0);
                            lossExitPrice = 0;
                            gainExitPrice = 0;
                            buyprice = 0;
                    }
                    Else If(Low <= lossExitPrice)
                    {
                            A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice());
                            SetGlobalVar(0,0);
                            //count=GetGlobalVar(0);
                            lossExitPrice = 0;
                            gainExitPrice = 0;
                            buyprice = 0;
                    }
                }
                //空单离场
                If(A_TotalPosition < 0 && A_GetOpenOrderCount == 0)
            {
                    //低于止盈价,全部止盈出场
                    If(Low <= gainExitPrice)
                    {
                            A_SendOrder(Enum_Buy,Enum_Exit,Lot,Q_AskPrice());
                            PlotString("Text","止盈",High+1,White);
                            SetGlobalVar(0,0);
                            //count=GetGlobalVar(0);
                            lossExitPrice = 0;
                            gainExitPrice = 0;
                            sellprice = 0;
                    }
                    Else If(High >= lossExitPrice)
                    {
                            A_SendOrder(Enum_Buy,Enum_Exit,A_BuyPosition(),Q_AskPrice());
                            SetGlobalVar(0,0);
                            //count=GetGlobalVar(0);
                            lossExitPrice = 0;
                            gainExitPrice = 0;
                            sellprice = 0;
                    }
                }
        }

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
6#
发表于 2019-9-24 09:27:53 |只看该作者
czs763268157 发表于 2019-9-24 09:19
Params
        Numeric Lot(1);                                //交易手数
        Numeric LossTime(15);                //止损单位倍数值

1,前面有强调在最后一个K线上,即barstatus==2的状态下。。你的代码里没有这样的限制 。。
2,前面有强调要关联帐户,即启动自动交易。。而tbquant的K线图是不可以启动自动交易的。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
282705
积分
223
帖子
93
主题
28
阅读权限
40
注册时间
2019-8-19
最后登录
2020-3-31
7#
发表于 2019-9-24 09:33:20 |只看该作者
小米 发表于 2019-9-24 09:27
1,前面有强调在最后一个K线上,即barstatus==2的状态下。。你的代码里没有这样的限制 。。
2,前面有强 ...

Params
        Numeric Lot(1);                                //交易手数
        Numeric LossTime(15);                //止损单位倍数值
        Numeric GainTime(15);                //止盈单位倍数值
Vars
        Series<Numeric> COdiff1;
        Series<Numeric> COdiff2;
        Bool UpTrend(False);
        Bool DownTrend(False);
       
        Series<Numeric> gainExitPrice;        //止盈价
        Series<Numeric> lossExitPrice;        //止损价
        Series<Numeric> buyprice(0);        //买入价
        Series<Numeric> sellprice(0);                //卖出价
Events
    onBar(ArrayRef<Integer> indexs)
    {   
            // 集合竞价过滤
            If(BarStatus == 2 && Time == 0.090000 && CurrentTime < 0.090000) Return;
            If(BarStatus == 2 && Time == 0.210000 && CurrentTime < 0.210000) Return;
            If(BarStatus == 2 && Time == 0.103000 && CurrentTime < 0.103000) Return;
            If(BarStatus == 2 && Time == 0.133000 && CurrentTime < 0.133000) Return;
            //涨跌停板过滤
            If((Close==Q_LowerLimit) or (Close==Q_UpperLimit)) Return;
           
            COdiff1 = Close[1]-Open[1];
            COdiff2 = Close[2]-Open[2];
           
            If(COdiff1>0 && COdiff2>0)
            {
                    UpTrend = True;
            }
            Else If(COdiff1<-0 && COdiff2<-0)
            {
                    DownTrend = True;
            }
           
            //系统入场       
            If(BarStatus == 2 && A_TotalPosition(0) == 0 && UpTrend == True)
            {
                    A_SendOrder(Enum_Buy,Enum_Entry,Lot,Q_AskPrice());
                    SetGlobalVar(0,Q_AskPrice());
                    buyprice = GetGlobalVar(0);
            }
            If(BarStatus == 2 && A_TotalPosition(0) == 0 && DownTrend == True)
            {
                    A_SendOrder(Enum_Sell,Enum_Entry,Lot,Q_BidPrice());
                    SetGlobalVar(0,Q_BidPrice());
                    sellprice = GetGlobalVar(0);
            }
            Commentary("AT="+Text(A_TotalPosition(0)));
            Commentary("buyprice="+Text(buyprice));
            Commentary("sellprice="+Text(sellprice));

                //计算止盈止损
            If(BarStatus == 2 && A_TotalPosition(0) > 0 )
            {
                    buyprice = GetGlobalVar(0);
                    sellprice = 0;
                    gainExitPrice = buyprice + GainTime*MinMove*PriceScale;        //止盈价=开仓价+GT个最小变动价位
                    lossExitPrice = buyprice - LossTime*MinMove*PriceScale;                //止损价=开仓价-LT个最小变动价位
                    Commentary("我的止盈价="+Text(gainExitPrice));
                    Commentary("我的止损价="+Text(lossExitPrice));       
            }
            Else If(BarStatus == 2 && A_TotalPosition(0) < 0)
            {       
                    buyprice = 0;
                    sellprice = GetGlobalVar(0);
                    gainExitPrice = sellprice - GainTime*MinMove*PriceScale;                //止盈价=开仓价-GT个最小变动价位
                    lossExitPrice = sellprice + LossTime*MinMove*PriceScale;                //止损价=开仓价+LT个最小变动价位
                    Commentary("我的止盈价="+Text(gainExitPrice));
                    Commentary("我的止损价="+Text(lossExitPrice));       
            }
           
            //多单离场
                If(BarStatus == 2 && A_TotalPosition(0) > 0 && A_GetOpenOrderCount == 0)
            {
                    //高于止盈价,全部止盈出场
                    If(High >= gainExitPrice)
                    {
                            A_SendOrder(Enum_Sell,Enum_Exit,Lot,Q_BidPrice());
                            PlotString("Text","止盈",High+1,White);
                            SetGlobalVar(0,0);
                            //count=GetGlobalVar(0);
                            lossExitPrice = 0;
                            gainExitPrice = 0;
                            buyprice = 0;
                    }
                    Else If(Low <= lossExitPrice)
                    {
                            A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice());
                            SetGlobalVar(0,0);
                            //count=GetGlobalVar(0);
                            lossExitPrice = 0;
                            gainExitPrice = 0;
                            buyprice = 0;
                    }
                }
                //空单离场
                If(BarStatus == 2 && A_TotalPosition(0) < 0 && A_GetOpenOrderCount == 0)
            {
                    //低于止盈价,全部止盈出场
                    If(Low <= gainExitPrice)
                    {
                            A_SendOrder(Enum_Buy,Enum_Exit,Lot,Q_AskPrice());
                            PlotString("Text","止盈",High+1,White);
                            SetGlobalVar(0,0);
                            //count=GetGlobalVar(0);
                            lossExitPrice = 0;
                            gainExitPrice = 0;
                            sellprice = 0;
                    }
                    Else If(High >= lossExitPrice)
                    {
                            A_SendOrder(Enum_Buy,Enum_Exit,A_BuyPosition(),Q_AskPrice());
                            SetGlobalVar(0,0);
                            //count=GetGlobalVar(0);
                            lossExitPrice = 0;
                            gainExitPrice = 0;
                            sellprice = 0;
                    }
                }
        }

根据版主的要求加上了barstatus==2,但为什么在策略交易里还是没有任何交易数据?
是因为在TBQuant里用不了这些函数吗??

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
8#
发表于 2019-9-24 09:42:23 |只看该作者
czs763268157 发表于 2019-9-24 09:33
Params
        Numeric Lot(1);                                //交易手数
        Numeric LossTime(15);                //止损单位倍数值

您的策略里的开平仓的条件是容易出现的吗?改了代码就应该立马进行交易的吗?
现在是说这个结果与你预期不符合是吗?
如果这样,建议您 在公式里加上fileappend写日志的语句,将您的开平仓条件里的变量等相关的值都输出看一下。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
282705
积分
223
帖子
93
主题
28
阅读权限
40
注册时间
2019-8-19
最后登录
2020-3-31
9#
发表于 2019-9-24 10:20:21 |只看该作者
小米 发表于 2019-9-24 09:42
您的策略里的开平仓的条件是容易出现的吗?改了代码就应该立马进行交易的吗?
现在是说这个结果与你预期 ...

先谢谢版主提供的建议,我发现输出日志后终于发现不是A_TotalPosition的问题了,而是因为A_SendOrder返回False,请问这个问题如何解决呢?
A_SendOrder语句和上面程序一样:
       A_SendOrder(Enum_Buy,Enum_Entry,Lot,Q_AskPrice());

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
10#
发表于 2019-9-24 10:26:40 |只看该作者
czs763268157 发表于 2019-9-24 10:20
先谢谢版主提供的建议,我发现输出日志后终于发现不是A_TotalPosition的问题了,而是因为A_SendOrder返回 ...

你的日志怎么写的?如何判断是a_sendorder为false的?
一般只有条件不满足时,才会返回false

使用道具 举报

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

bottom

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

GMT+8, 2024-5-3 22:12

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部