设为首页收藏本站

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

只好请教管理员了,为啥我这个指令没有执行?平仓sell [复制链接]

Rank: 6Rank: 6

精华
0
UID
4140
积分
1557
帖子
242
主题
49
阅读权限
70
注册时间
2009-4-17
最后登录
2020-11-26
跳转到指定楼层
1#
发表于 2009-5-21 11:39:00 |只看该作者 |倒序浏览
按照交易指令Buy正确地开了2多仓,以下到了止损价位,但是没有执行

If (MarketPosition == 1)    //如果持多头,在这里测试模拟账户无法获得确切的持仓数量,只能用MarketPosition做简单判断
       {
               If(Q_Last <= A1 )     //如果当前bar最新价 小于等于A1
            {
                        Boutprice1 = A1 - offprice;   //加滑点形成平仓价格
               Sell(0,Boutprice1);   //全部多头止损平仓
            }else If 其他条件........
   
             }

反之,空头持仓一样也没有平,以致困扰,请教请教,是不是 sell 指令使用不对啊?
还有,以上止损没有执行,价格下跌反向,到了开空仓的位置,自然受到  MarketPosition == 0 的限制,没有开空仓。但是接下来
触发了空头盈利条件,竟然发出了平空仓指令,当然系统没有认,有提示“没有空仓”,我不明白,空头盈利平仓是受以下条件限制的
IF (MarketPosition == -1)  
   {
        If (Q_Last <=A2)
        {
             Soutprice2=A2+offprice;
             BuyToCover(1,Soutprice2);
        }else If
           其他条件....
    }
这个 MarketPosition  是不是比较怪?怎么被穿透的?还是说我用得不对,初学,不好意思,希望能够彻底领悟

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2009-5-21 12:31:32 |只看该作者
Q_Last只能在BarStatus==2的情况下使用。

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
4140
积分
1557
帖子
242
主题
49
阅读权限
70
注册时间
2009-4-17
最后登录
2020-11-26
3#
发表于 2009-5-21 13:54:14 |只看该作者
不太明白,我一直是使用的最后bar的最新价格啊!
我简略的说一下:见笑了,我的全局变量似乎不是正常用法,只是一个一般变量的用法,配合持仓判断的综合使用

计算各种开仓平仓价格后
If (MarketPosition == 0)  //开仓条件如下,如果没有持仓,如果有持仓不执行以下开仓If判断,注意由于是模拟测试帐户,没有加入停板的处理方式
          {
            If (Q_Last >= Bcon0 && Low <= Bcon0 )
                 {
                  Buyenterprice = Bcon0 + offprice; //得出开多仓价格
                  Buy(lots1,Buyenterprice);  //开多仓
                  SetGlobalVar(0,0); //只要开仓了,全局0归为0
                  SetGlobalVar(1,0); //只要开仓了,全局1归为0
                  FileAppend("e:\\Buyposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"多头开仓");
                 }
                If (Q_Last <= Scon0 && High >=Scon0 )
             {
                  sellenterprice = Scon0 - offprice; //得出开空仓价格
                  SellShort(lots1,sellenterprice);  //开空仓
                  SetGlobalVar(2,0); //只要开仓了,全局2归为0
                  SetGlobalVar(3,0); //只要开仓了,全局3归为0
                  FileAppend("e:\\Sellposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"空头开仓");
                 }
          
          }

            //以下为多头止损止盈方式
       
            If (MarketPosition == 1) //如果持多头,在这里测试模拟账户无法获得确切的持仓数量,只能用MarketPosition做判断
             {
               If(Q_Last <= Bcon1 ) //如果当前bar最新价 小于等于 Bcon1 预设止损价位            
                       {
                          Boutprice1 = Bcon1 - offprice;
                  Sell(0,Boutprice1); //全部多头止损平仓
        FileAppend("e:\\Buyposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"多头止损");
                       }Else If (Q_Last >= Bcon2 && Q_Last < Bcon3 && GetGlobalVar(0)!=1) //控制只平一次仓,如果全局变量0不等于1,执行平仓,以上开仓后被设为0,所以

满足
                         {
                                     Boutprice2 = Bcon2 - offprice;
                                     Sell(lots2,Boutprice2); //止盈平仓第一次
                                     SetGlobalVar(0,1); //平仓一次后,全局0被设为1,防止再次平仓
        FileAppend("e:\\Buyposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"多头止盈一次");
                        }Else If (Q_Last >= Bcon3 && GetGlobalVar(1)!=1)  //控制只平一次仓,如果全局变量1不等于1,执行平仓,以上开仓后被设为0,所以满足
                                           {
                                            Boutprice3 = Bcon3 - offprice;
                                            Sell(lots2,Boutprice3); //止盈平仓第二次,日后再加对涨停的操作
                                            SetGlobalVar(1,1); //平仓一次后,全局1被设为1,防止再次平仓
        FileAppend("e:\\Buyposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"多头止盈二次");
                                                   }
                        If (Currenttime >= 0.1455 ) //本地电脑时间大于等于14:55
                         {
                                Boutprice4 = Q_Last - offprice;
                                Sell(0,Boutprice4);//全部多头平仓
                FileAppend("e:\\Buyposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"多头收盘平仓");
                        }
                     }
                 //以下为空头止损止盈方式
       
                 If (MarketPosition == -1) //如果持空头,在这里测试模拟账户无法获得确切的持仓数量,只能用MarketPosition做判断
                   {
                     If (Q_Last >= Scon1)
                           {
                            Soutprice1 = Scon1 + offprice;
                                BuyToCover(0,Soutprice1); //全部空头止损平仓
                        FileAppend("e:\\Sellposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"空头止损");
                                }Else If (Q_Last <= Scon2 && Q_Last > Scon3 && GetGlobalVar(2)!=1) //控制只平一次仓,如果全局变量2不等于1,执行平仓,以上开仓

后被设为0,所以满足
                                        {
                                                  Soutprice2 = Scon2 + offprice;
                                          BuyToCover(lots2,Soutprice2); //止盈平仓第一次
                                                  SetGlobalVar(2,1); //平仓一次后,全局2被设为1,防止再次平仓
                 FileAppend("e:\\Sellposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"空头止盈一次");
                                                }Else If (Q_Last <= Scon3 && GetGlobalVar(3)!=1) //控制只平一次仓,如果全局变量3不等于1,执行平仓,以上开仓后

被设为0,所以满足
                                                         {
                                                                  Soutprice3 = Scon3 + offprice;
                                                  BuyToCover(lots2,Soutprice3); //止盈平仓第二次,,日后再加对跌停的操作
                                                                  SetGlobalVar(3,1); //平仓一次后,全局3被设为1,防止再次平仓
                FileAppend("e:\\Sellposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"空头止盈二次");
                                                                 }
                                                                 If (Currenttime >= 0.1455 ) //本地电脑时间大于等于14:55
                                                                          {
                                                                                   Soutprice4 = Q_Last + offprice;
                                                   BuyToCover(0,Soutprice4);//全部空头平仓
                FileAppend("e:\\Sellposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"空头收盘平仓");
                                                                                  }
                  
                          
                   }

[ 本帖最后由 天柏 于 2009-5-22 08:57 编辑 ]

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
4140
积分
1557
帖子
242
主题
49
阅读权限
70
注册时间
2009-4-17
最后登录
2020-11-26
4#
发表于 2009-5-21 14:23:27 |只看该作者
实际情况是:
多头开仓3手成功,没有重复开仓
价格下降达到预设止损价格Bcon1,没有发出平多仓指令,Fileappend记录也没有。
价格继续下跌,达到开空头条件,没有发出指令,但是Fileappend有记录,而且MarketPosition变为了-1
继续下跌,触发第一次止盈条件,发出指令,但是系统提示“没有空持仓”,多次符合多次发出。
请看问题在哪里

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
4140
积分
1557
帖子
242
主题
49
阅读权限
70
注册时间
2009-4-17
最后登录
2020-11-26
5#
发表于 2009-5-21 15:03:22 |只看该作者
还有啊!用If (Currenttime >= 0.1455 ) //本地电脑时间大于等于14:55
从来不会平仓,问题出在哪里呢?
1、是Currenttime >= 0.1455  的问题?不能用在模拟账户里?
2、还是IF (MarketPosition == )判断有问题?
3、Sell(0,Boutprice4)  和  BuyToCover(0,Soutprice4) 用法不对?
   请指教

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
6#
发表于 2009-5-21 16:43:40 |只看该作者
If(BarStatus==2)
{
     If(Q_Last >=....)
....
}else
{
    If(Close >=....)
....
}

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
4140
积分
1557
帖子
242
主题
49
阅读权限
70
注册时间
2009-4-17
最后登录
2020-11-26
7#
发表于 2009-5-21 17:03:08 |只看该作者
谢谢nopain,眼巴巴呢!我改一下,不过我想问明白一下,如果不加BarStatus==2 ,Q_Last  就不是当前bar的最新价格了吗?我现在这个执行不是在当前bar也就是最后bar上吗?或者说完全是函数调用的需要呢?多谢

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
4140
积分
1557
帖子
242
主题
49
阅读权限
70
注册时间
2009-4-17
最后登录
2020-11-26
8#
发表于 2009-5-22 10:18:43 |只看该作者

跟踪测试结果0522上午10:15

今天暂时还没有碰到止损的情况,所以无法得知结果。
但是也有问题,多头第一次止盈的命令执行了两次,而且间隔时间较长,说明未能控制再次触发的问题,也想不明白。看跟踪文件发现记录了很多次“多头开仓”“多头止盈一次”的信息,按道理说“多头开仓”不应该再出现了,因为“MarketPosition == 1”,虽然系统并没有发出开仓指令,但是既然出现了记录,说明条件“MarketPosition == 0”还是被穿透了。难道说我用MarketPosition作为一个重要的控制条件是错误的么?关于触发止盈两次的情况,从变量的设置看,理论上应该是没有问题的,但是用到了MarketPosition作为前提条件控制,同样不起效果,所以也作为被怀疑对象了。
请各位看看,毛病在哪里?

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
4140
积分
1557
帖子
242
主题
49
阅读权限
70
注册时间
2009-4-17
最后登录
2020-11-26
9#
发表于 2009-5-22 11:08:05 |只看该作者

整理下思路

If (MarketPosition == 0)            {
            If (Q_Last >= Bcon0 && Low <= Bcon0 )
                 {
                  Buyenterprice = Bcon0 + offprice; //得出开多仓价格
                  Buy(lots1,Buyenterprice);  //开多仓
                  SetGlobalVar(0,0); //只要开仓了,全局0归为0
                  SetGlobalVar(1,0); //只要开仓了,全局1归为0
                  FileAppend("e:\\Buyposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"多头开仓");
                 }
------在这里没有出现多次开仓指令,而出现了Fileapped记录“多头开仓”N次
而在以下的第一次止盈条件时被二次触发,发出了平仓指令,可以不可以看成以上的变量归0照样被执行了,所以满足下面的条件。可不可以理解为:FileAppend 和 SetGlobalVar 这两个东西是不理会MarketPosition限制的,而sell指令是要检验的。我目前只能这么理解了。

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
4140
积分
1557
帖子
242
主题
49
阅读权限
70
注册时间
2009-4-17
最后登录
2020-11-26
10#
发表于 2009-5-22 11:32:16 |只看该作者

跟踪测试结果11:24

很遗憾,止损照样没有被执行,失望,难道这段有问题么:
If (MarketPosition == 1)  //如果持多头
             {
               If(Q_Last <= Bcon1 ) //如果当前bar最新价 小于等于 Bcon1  
            {
                       Boutprice1 = Bcon1 - offprice;
               Sell(0,Boutprice1); //全部多头止损平仓
FileAppend("e:\\Buyposition.log",Symbol+","+Text(Date)+","+Text(Time*10000)+","+Text(MarketPosition)+","+Text(Q_Last)+"多头止损");
                       }
}

   头大大的!我把整个都装进 If (BarStatus==2) 里了啊?

[ 本帖最后由 天柏 于 2009-5-22 11:35 编辑 ]

使用道具 举报

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

bottom

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

GMT+8, 2024-4-28 05:36

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部