设为首页收藏本站

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

请帮忙审查一哈,米。 [复制链接]

Rank: 2

精华
0
UID
219647
积分
56
帖子
33
主题
14
阅读权限
30
注册时间
2015-9-14
最后登录
2023-6-12
跳转到指定楼层
1#
发表于 2018-11-5 23:26:55 |只看该作者 |倒序浏览
本帖最后由 lcxamm 于 2018-11-6 10:41 编辑

反6跳止损,涨跌停止盈,14.55对价平仓,tick交易,穿越支撑压力线对价开仓。

Params
         Numeric notaft(14.55);
         Numeric upperband(4280);
         Numeric lowerband(4272);
        
Vars
        Numeric minpoint;
bool con;                                         // bool中间变量
bool con1;                                         // bool中间变量
Begin
         MinPoint = MinMove*PriceScale;
         PlotNumeric("upperband=",upperband);
         PlotNumeric("lowerband=",lowerband);
         con = High >= upperband;
         con1= low <= lowerband;
        
         //开仓
        if (a_buyposition==0 and barstatus==2 and con)
            {
            A_SendOrder(Enum_Buy,Enum_Entry,1,Q_AskPrice,Q_AskPrice-6*MinPoint,Q_UpperLimit);;
            }
            
               if (a_sellposition==0 and barstatus==2 and con1 )
            {
           A_SendOrder(Enum_Sell,Enum_Entry,1,Q_BidPrice,Q_AskPrice-6*MinPoint,Q_LowerLimit);;
            }      
         //收盘平仓
          if(Time*100>=notaft and Time<0.1600 and barstatus==2 )

{
       {if(A_BuyPosition>0)
{
   A_SendOrder(Enum_Sell, Enum_Exit, A_BuyPosition(), Q_BidPrice);
}else If(A_SellPosition>0)
{
A_SendOrder(Enum_Buy, Enum_Exit, A_SellPosition(), Q_AskPrice);
}
}
}


End

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2018-11-6 09:02:47 |只看该作者
万不可

使用道具 举报

Rank: 2

精华
0
UID
219647
积分
56
帖子
33
主题
14
阅读权限
30
注册时间
2015-9-14
最后登录
2023-6-12
3#
发表于 2018-11-6 09:13:33 |只看该作者
小米 发表于 2018-11-6 09:02
万不可

愿闻其详啊

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2018-11-6 09:21:01 |只看该作者
本帖最后由 小米 于 2018-11-6 09:22 编辑

1,crossover,crossunder等函数是序列函数,不可放条件内进行运算。可声明中间变量,在条件外先将运算赋值给中间变量,再将中间变量代入条件中进行判断。

2,A函数的属性,只在最后K线有效,所以为提高效率以及减少无效值的判断异常,需要限制在barstatus==2的条件下 。

3,A_sendorder的发单,软件底层是没有做任何控制的。所以需要交易者自己想办法使用代码条件进行控制,以免发生重复发单 。
     而仅有持仓量这个判断是不够的,因为一个委托出去,经过网络,再到交易所撮合成交,再将成交回报返回到本地,这个过程是需要时间的。一个tick内不能完成整个流程,下一个tick是可能会再次发单 ,造成重复。
     所以,a_sendorder发单一般是需要配合使用全交易变量进行发单 次数的控制 。

使用道具 举报

Rank: 2

精华
0
UID
219647
积分
56
帖子
33
主题
14
阅读权限
30
注册时间
2015-9-14
最后登录
2023-6-12
5#
发表于 2018-11-6 09:23:45 |只看该作者
小米 发表于 2018-11-6 09:21
1,crossover,crossunder等函数是序列函数,不可放条件内进行运算。可声明中间变量,在条件外先将运算赋值 ...

谢谢,任重道远。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
6#
发表于 2018-11-6 09:27:26 |只看该作者
lcxamm 发表于 2018-11-6 09:23
谢谢,任重道远。

使用道具 举报

Rank: 2

精华
0
UID
219647
积分
56
帖子
33
主题
14
阅读权限
30
注册时间
2015-9-14
最后登录
2023-6-12
7#
发表于 2018-11-6 10:54:49 |只看该作者
本帖最后由 lcxamm 于 2018-11-6 11:11 编辑

1,同一个条件?完全一样?那直接在条件下同时下两个委托语句好了,使用不同的委托价即可。
    如果你说价格下跌后再去加仓,那一定是有条件的不同吧?价格的不同难道不算吗?

4,我觉得开仓时记录一个全局变量,之后每个tick给此全局变量的值+1,待5个tick后,直接判断a_getopenordercount是否大于0,如果大于0就去撤单,然后重下新下单 。
所以还是得当前状态有已报单即a_getopenordercount(0)!=InvalidInteger and >0的情况下,才去取a_openorderfilledprice(0)的值较为合理。
3,善用fileappend来进行,可令公式的调试效率更高。自己拿不准的地方使用fileappend一步步输出或者会有所帮助 。

参考1
if(BarStatus==0)
  SetGlobalVar(0,0);
/* if(GetGlobalVar(0)==0 and A_BuyPosition>0)
  SetGlobalVar(0,1);
if(GetGlobalVar(0)==0 and A_SellPosition>0)
  SetGlobalVar(0,-1);  */
If(BarStatus==2 and A_BuyPosition==0 and GetGlobalVar(0)==0 and  l2[1]==l3[1] and l2>l3 )
   {A_SendOrder(Enum_Buy,Enum_Entry,1,Q_Last);
    SetGlobalVar(0,1);
        PlotString("1","开多",low,red);
}


    If(BarStatus==2 and  A_BuyPosition>0 and GetGlobalVar(0)==1 and  h1[1]==h2[1] and  h1<h2 )
    {A_SendOrder(Enum_Sell,Enum_Exit,1,Q_Last);
         SetGlobalVar(0,0);
    PlotString("2","平多",high,Yellow); }

使用道具 举报

Rank: 2

精华
0
UID
219647
积分
56
帖子
33
主题
14
阅读权限
30
注册时间
2015-9-14
最后登录
2023-6-12
8#
发表于 2018-11-6 11:11:19 |只看该作者
条件分开。一层层定位。。
If(BarStatus==2 and A_BuyPosition==0 )
{
        FileAppend("d:\\testduo1.log","a_buypositon==0");
        If(  myorderbuy==0 )
    {  
                FileAppend("d:\\testduo1.log","myorderbuy==0");
        If(mbuy and High>High[1])
        {
                        A_SendOrder(Enum_Buy,Enum_Entry,lots,Q_BidPrice+OffSet*MinPoint);
                        myentryprice = Q_BidPrice+OffSet*MinPoint;
                        myorderbuy = 1;
                        myordersell = 0;
                        SetGlobalVar(1,myorderbuy);
                        SetGlobalVar(2,myordersell);
                        FileAppend ("d:\\testduo1.log","GlobalVar(1)="+Text(GetGlobalVar(1))+"Date="+DateToString(CurrentDate)+"Time="+TimeToString(CurrentTime)+"委托时间="+TimeToString(A_OrderTime(0))+"mbuy是否成立="+IIFString(MACDDiff>MACDDiff[1],"true","False")+"k是否成立="+IIFString(High>High[1],"yes","no")+"委托价格="+text(myentryprice));
         }
        }
        }
   If(BarStatus==2 and low<low[1] )
   {
                FileAppend("d:\\testduo1.log","low<low[1]");
                If(A_BuyPosition>0 )
                {
                        FileAppend("d:\\testduo1.log","myorderbuy=>0");
                        If(msell )
                        {
                                FileAppend("d:\\testduo1.log","msell==true");
                                If( myordersell==0 )
                                {
                                        FileAppend("d:\\testduo1.log","myordersell==0");
                                       
                                           A_SendOrder(Enum_Sell,Enum_Exit,lots,Q_AskPrice-OffSet*MinPoint);
                                           myexitprice = Q_AskPrice-OffSet*MinPoint;
                                           myordersell = 1;
                                           myorderbuy = 0;
                                           SetGlobalVar(1,myorderbuy);
                                           SetGlobalVar(2,myordersell);
                                          
                                           FileAppend ("d:\\testduoping.log","GlobalVar(2)="+Text(GetGlobalVar(2))+"Date="+DateToString(CurrentDate)+"Time="+TimeToString(CurrentTime)+"委托时间="+TimeToString(A_OrderTime(0))+"msell是否成立="+IIFString(MACDDiff<MACDDiff[1],"true","False")+"k是否成立="+IIFString(low<low[1],"yes","no")+"委托价格="+text(myexitprice));
                }
                        }
                }
        }
复制代码

使用道具 举报

Rank: 2

精华
0
UID
219647
积分
56
帖子
33
主题
14
阅读权限
30
注册时间
2015-9-14
最后登录
2023-6-12
9#
发表于 2018-11-6 11:48:14 |只看该作者
需要使用全局变量来控制撤单 与发单 的委托次数。。
因为委托出去到回报返回到本地,是需要时间的,这个过程中,可能已经有新的tick进来,再次运算,发现当前条件仍满足于是再次委托 。。而事实上之前的委托可能已经到了交易所或是在返回的中途了,这样就会导致重复委托的结果 。。

使用道具 举报

Rank: 2

精华
0
UID
219647
积分
56
帖子
33
主题
14
阅读权限
30
注册时间
2015-9-14
最后登录
2023-6-12
10#
发表于 2018-11-6 11:58:12 |只看该作者
FileAppend("D:\\tick日志.log",DateTimeToString(Date+CurrentTime)+"  OpenOrderCount:"+Text(A_GetOpenOrderCount)+" TP:"+Text(CC)+" TotalPosition:"+Text(A_TotalPosition)) 记录如下:

使用道具 举报

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

bottom

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

GMT+8, 2024-4-26 15:33

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部