设为首页收藏本站

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

使用第三方程序辅助实现 [旗舰版] 的无人值守 [复制链接]

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
21#
发表于 2017-8-14 20:20:05 |显示全部楼层
本帖最后由 wfklhh2017 于 2017-8-14 21:34 编辑

superwin楼主  请教你个问题  我想将策略的Buy/sell函数换成用A函数买卖,这应该会涉及到全局变量控制、编写自动撤单再次委托、委托回报处理等等,你好像是用 A函数买卖的,请教你:
1、你自身感觉使用A函数的优点,可以告诉我你为何选择用A函数而不去用Buy/sell然后通过监控器同步吗?(虽然这未必适合每个人,但是向高手学习总是没错的)
2、你使用A函数开平仓,有没有出现类似明明有仓位却无法平仓,系统提示可平仓位不足的情况?(我是使用Buy/sell监控器同步失败,明明有多单1手,没有未撤销委托单,短信提示策略已经发送平仓单  监控器设置委托偏移 12秒刷新一次,2次不匹配启动自动同步  最终却无法同步,按一键同步也是一样  系统提示可平仓位不足,最后手工平了,已经碰到2次,很是郁闷)
3、计划换成A函数直接指令交易账户,结合你的经历能给我一些建议吗,避免走弯路。
4、我看一些用A函数买卖的例子里买卖条件里都有加上BarStatus==2,查询函数说明BarStatus==2表示当前公式应用在指定图层上最后一个Bar,但是论坛上很多版主有说到实盘开始每个Bar的最后一个Tick前BarStatus==1,最后一个Tick BarStatus==2,下一个bar开始的第一个Tick会跟上一个Bar最后一个Tick再一起运行一次 这样上一个bar的状态值就变成BarStatus==1避免全局变量重置。 我想问的是很多买卖条件加上BarStatus==2如何理解,必要性是什么,难道A函数不可以在当前BAR的当前Tick上实时交易吗 我有点不懂,想请教。
很是感谢,很想见你一面认识下!真的是TB的服务太跟不上,所以才请教你的辅助软件外的问题,还望拉我一把,已经学了TB不想中途放弃

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
22#
发表于 2017-8-16 21:16:55 |显示全部楼层
本帖最后由 wfklhh2017 于 2017-8-16 22:53 编辑
superwin 发表于 2017-8-15 21:49
1、首先我是根据交易账户的真实资金进行计算开仓手数的,所以要使用A函数,其次,A函数一旦获取到委托单 ...


两个字  感谢!!

论坛等等 经常看 教程也学了两遍(应该还是不够的,因为开始看理解肯定不透侧),但是很多东西论坛和教程都是没有的  也没余解决方案和相应学习教程  看来很多东西只能试自己慢慢摸索了 或者你这样的好心大神赐教  这样可以少走些弯路   但是作为官方我认为很多东西还是有必要做得  比如函数的范例应该要更详细具体方便客户自学 。   还是决定改用A函数宁可在花点时间学习 大不了错误亏点钱!! 感谢你的赐教!

就像你说的TB和你的辅助软件只是个工具   我想多花点时间学习  总是能搞定的   赚钱关键还是交易策略本身,我对策略还是有信心的  但是必须要学好 TB的才能把策略很好的编写出来并符合预期的运行。
楼主:贪心的再请教你个问题 当前tick运行到A_SendOrder 指令 当前tick程序是等成交回报返回到位后再运行后续的程序  还是未必,如果是当前tick的后续运行必然要等成交回报到位我就可以在A_SendOrder 指令之后就接上 A_OrderStatus进行状态判断 方便后续撤单等等  如果不是可能需要对tick进行计数,延迟几个tick确保成交回报到位后 再做后续处理!!另外,你是不是不用交易助手,将交易助手的功能直接用A函数在程序里编写了,谢谢

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
23#
发表于 2017-8-17 20:47:49 |显示全部楼层
本帖最后由 wfklhh2017 于 2017-8-17 20:55 编辑
superwin 发表于 2017-8-17 20:17
A_SendOrder后马上接上A_OrderStatus应该是不现实的,回报没有那么快的,也不需要延迟几个TICK去获取状态 ...

A函数TB说明里讲的太少了    对内在的机制理解不透       现在明白了  谢谢!

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
24#
发表于 2017-8-17 23:27:40 |显示全部楼层
wfklhh2017 发表于 2017-8-17 20:47
A函数TB说明里讲的太少了    对内在的机制理解不透       现在明白了  谢谢! ...

查找你之前的帖子

你先弄懂索引号先吧,弄懂了就都明白了,看看A_GetLastOpenOrderIndex、A_GetLastOrderIndex返回的是什么,你把返回的数字填到A_OrderStatus()、A_OrderContractNo()、A_OrderComment()的括号里面看看又会返回什么,弄明白了就一通百通了。   这段话里面透着好多内容   感觉好多问题都可以解决了

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
25#
发表于 2017-8-19 23:31:50 |显示全部楼层
本帖最后由 wfklhh2017 于 2017-8-19 23:35 编辑

楼主大神 请教一个问题   撤单动作算不算一个新的委托单呢 ?
比如  当前委托单状态返回是 已申报 或 部分成交, 那么执行撤单A_DeleteOrder(A_OpenOrderContractNo(0))后,这个撤单动作算不算新的委托单动作而产生Enum_Canceled 或 Enum_Canceling返回状态;或者是执行撤单A_DeleteOrder(A_OpenOrderContractNo(0))成功后,对之前委托单状态 已申报 或 部分成交进行更替 变成Enum_Canceled 或 Enum_FillPart ,如果是后者那么索引值应该不变吧。   谢谢 大神指教!

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
26#
发表于 2017-8-27 09:48:23 |显示全部楼层
楼主大神 请帮个忙     我用A\E\Q函数编了个 委托、委托未成交或未全部成交撤单、再次发单的程序   最后编译结果提示最终文件编译错误 error c2665:'CTBNumericSeries::CTBNumericSeries':none of the 2 overloads could conert all the argument types

帮我看下 我错在哪里了   
Vars
NumericSeries  Ma1(0);  //目标周期下第1条短线均线
NumericSeries  Ma2(0);  //目标周期下第2条短线均线
Numeric Declaredtickcount(1);//委托已申报tick 计数
Numeric LastIndex(0);//当日最后一个未成交委托单索引号
Numeric OrderCanceledLot(0);//委托单撤单数量
Numeric nBorS;//委托单买卖方向
Numeric nEntryFlag;//委托单开平方向
Numeric CanceledOrderagin;// 撤单再次委托操作标志
Numeric nStatus;//委托单状态
Bool Condtion1(True);// 买卖条件1
Bool Condtion2(True);// 买卖条件2
Begin
Ma1=Average(1, 5);
Ma2=Average(1, 10);
If(BarStatus == 0)
{   
  SetGlobalVar(0,0);// 开仓标志
  SetGlobalVar(1,0);// 撤单操作标志
  SetGlobalVar(2,1);// 委托已申报tick 计数
  SetGlobalVar(5,0);// 状态检测开关 1 进入检测
}
Condtion1=Ma1>Ma2+2*MinMove*PriceScale;
Condtion2=Ma1<Ma2-2*MinMove*PriceScale;
If( BarStatus == 2 && Condtion1 && A_BuyPosition()==0 && GetGlobalVar(0)==0)
{
  A_SendOrder(Enum_Buy,Enum_Entry,4,Q_AskPrice+4*MinMove*PriceScale);
  SetGlobalVar(0,1);SetGlobalVar(1,0);SetGlobalVar(5,1);
}
If( BarStatus == 2 && Condtion2 && A_SellPosition==0 && GetGlobalVar(0)==0)
{
  A_SendOrder(Enum_Sell,Enum_Entry,4,Q_BidPrice-4*MinMove*PriceScale);
  SetGlobalVar(0,1);SetGlobalVar(1,0);SetGlobalVar(5,1);
}
If( BarStatus == 2 && Condtion2 && A_BuyPosition()>0 && GetGlobalVar(0)==0)
{
  A_SendOrder(Enum_Sell,Enum_Exit,4,Q_BidPrice-4*MinMove*PriceScale);
  SetGlobalVar(0,1);SetGlobalVar(1,0);SetGlobalVar(5,1);
}
If(BarStatus == 2 && Condtion1 && A_SellPosition()>0 && GetGlobalVar(0)==0)
{
  A_SendOrder(Enum_Buy,Enum_Exit,4,Q_AskPrice+4*MinMove*PriceScale);
  SetGlobalVar(0,1);SetGlobalVar(1,0);SetGlobalVar(5,1);
}
If(GetGlobalVar(5)==1)
{
  nStatus = A_OrderStatus(0); //nStatus 未声明
  nEntryFlag = A_OpenOrderEntryOrExit(0);// nEntryFlag未声明
  nBorS = A_OpenOrderBuyOrSell(0);//nBorS 未声明
  If(nStatus == Enum_Filled)
  {
    SetGlobalVar(5,0);SetGlobalVar(0,0);
  }Else If(nStatus == Enum_Declared)
  {
    Declaredtickcount=GetGlobalVar(2)+1;SetGlobalVar(2,Declaredtickcount);
    If(Declaredtickcount>=6)
    {
       LastIndex = A_GetLastOrderIndex(nBorS,nEntryFlag);//当日最后一个未成交委托单索引号  
       If(LastIndex != InvalidInteger)
       SetGlobalVar(3,LastIndex);
       If(GetGlobalVar(1)==0 && A_GetOpenOrderCount()>0)
       {
         A_DeleteOrder(A_OpenOrderContractNo(0));
         SetGlobalVar(1,1);
         SetGlobalVar(4,0);//撤单再次委托标识
       }
    }
  }Else If(nStatus == Enum_FillPart)
  {   
    Declaredtickcount=GetGlobalVar(2)+1;SetGlobalVar(2,Declaredtickcount);
    If(Declaredtickcount>=6)
    {
       LastIndex = A_GetLastOrderIndex(nBorS,nEntryFlag);//当日最后一个未成交委托单索引号  
       If(LastIndex != InvalidInteger)
       SetGlobalVar(3,LastIndex);
       If(GetGlobalVar(1)==0 && A_GetOpenOrderCount()>0)
       {
         A_DeleteOrder(A_OpenOrderContractNo(0));
         SetGlobalVar(1,1);
         SetGlobalVar(4,0);//撤单再次委托标识
       }
    }
  }Else If(nStatus == Enum_Canceled OR (GetGlobalVar(1)==1 && A_GetOpenOrderCount()==0))
  {
    nBorS = A_OpenOrderBuyOrSell(GetGlobalVar(3));
    nEntryFlag = A_OpenOrderEntryOrExit(GetGlobalVar(3));
    OrderCanceledLot = A_OrderCanceledLot(GetGlobalVar(3));//委托单撤单数量
    If(GetGlobalVar(4)==0)
    {
      If(nBorS==Enum_Buy())
      {
        A_SendOrder(nBorS,nEntryFlag,OrderCanceledLot,Q_AskPrice+4*MinMove*PriceScale);
        CanceledOrderagin=1;SetGlobalVar(4,CanceledOrderagin);
        SetGlobalVar(0,1);SetGlobalVar(1,0);SetGlobalVar(5,1);
      }
      If(nBorS==Enum_Sell())
      {
        A_SendOrder(nBorS,nEntryFlag,OrderCanceledLot,Q_BidPrice-4*MinMove*PriceScale);
        CanceledOrderagin=1;SetGlobalVar(4,CanceledOrderagin);
        SetGlobalVar(0,1);SetGlobalVar(1,0);SetGlobalVar(5,1);
      }
    }
  }Else If(nStatus == Enum_Declare OR nStatus == Enum_Canceling )
   Return;
}
End

谢谢

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
27#
发表于 2017-8-28 15:28:36 |显示全部楼层
谢谢,还是太粗心了

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
28#
发表于 2017-8-28 15:29:12 |显示全部楼层
本帖最后由 wfklhh2017 于 2017-8-28 15:33 编辑
superwin 发表于 2017-8-27 17:23
Average的用法错误,看TB的说明里参数类型是什么类型


谢谢,还是太粗心了!这写成这样都没发觉!只关注核心东西了,其他的功能性编辑有错误吗,大哥!

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
29#
发表于 2017-8-28 15:29:58 |显示全部楼层
谢谢,还是太粗心了

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
30#
发表于 2017-8-31 23:00:04 |显示全部楼层
谢谢

使用道具 举报

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

bottom

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

GMT+8, 2024-5-12 15:53

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部