设为首页收藏本站

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

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

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
801#
发表于 2017-8-5 14:10:06 |只看该作者
superwin 发表于 2017-7-28 10:22
刚刚去阿里云看了看,现在新开的阿里云后台都被强制关闭25端口了,以前开通的阿里云就能使用25端口。如果 ...

谢谢   楼主!这段时间 都没空上论坛   

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
802#
发表于 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: 10Rank: 10Rank: 10

精华
0
UID
117005
积分
98549
帖子
1121
主题
14
阅读权限
200
注册时间
2013-3-18
最后登录
2022-10-29
803#
发表于 2017-8-15 21:49:30 |只看该作者
wfklhh2017 发表于 2017-8-14 20:20
superwin楼主  请教你个问题  我想将策略的Buy/sell函数换成用A函数买卖,这应该会涉及到全局变量控制、编 ...

1、首先我是根据交易账户的真实资金进行计算开仓手数的,所以要使用A函数,其次,A函数一旦获取到委托单状态后,可以立即进行相应操作(比如撤单什么的),而不是用固定的秒数来刷新同步,还有……总之,这样说吧,A函数能更符合我的需求,能更灵活地自定义许多功能。
2、使用A函数实盘多年,一次都没出现过这样的问题,不知道是我幸运还是……
3、没什么特别的建议,经验是靠时间去积累的,在没有完全熟悉TB的工作原理之前,慎用A函数,如果你已经对TB很熟悉,你会喜欢上A函数的
4、因为A函数只在最后的bar上有效,就这么简单。看来你还没完全熟悉TB,参考上一条,我建议你慎用A函数。

TB客服每天面对很多用户,很多的提问,私聊的,群里的,论坛的……所以,除非TB老板大量增加客服,不然,肯定不会所有人都能满意的,其次,很多东西必须自己去下功夫去学习的,不能寄希望于别人帮你去完成,并且,你自己实践回来的东西,你的印象更深,学到的东西更多……,当然,如果你并不想学那么多东西,只是想赚钱,那……还是去买理财产品,或者把钱给别人打理吧……


不要因为众生的愚疑,而带来了自己的烦恼。

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
804#
发表于 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: 10Rank: 10Rank: 10

精华
0
UID
117005
积分
98549
帖子
1121
主题
14
阅读权限
200
注册时间
2013-3-18
最后登录
2022-10-29
805#
发表于 2017-8-17 20:17:27 |只看该作者
wfklhh2017 发表于 2017-8-16 21:16
两个字  感谢!!

论坛等等 经常看 教程也学了两遍(应该还是不够的,因为开始看理解肯定不透侧) ...

A_SendOrder后马上接上A_OrderStatus应该是不现实的,回报没有那么快的,也不需要延迟几个TICK去获取状态,A_OrderStatus参数是nIndex,就是索引,你发出委托,有索引号,A_OrderStatus指定索引号,然后返回值与枚举值比较,根据枚举值做相应的操作就可以了,如果用延迟几个TICK,那跟交易助手固定时间刷新有何区别,你怎么确保是几个TICK才返回回报,假如你设定延迟5个TICK,第二个TICK就返回回报了,那不是后面浪费时间了,又或者要7个TICK才返回回报,那5个TICK后的操作岂不出问题了

发出委托后,就一直指定索引号来对比枚举值,一旦有符合的枚举值,就执行相应的操作

我没有使用助手,A函数已经能做到交易助手的功能了,而且使用起来比交易助手更灵活


不要因为众生的愚疑,而带来了自己的烦恼。

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
806#
发表于 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
807#
发表于 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
808#
发表于 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: 10Rank: 10Rank: 10

精华
0
UID
117005
积分
98549
帖子
1121
主题
14
阅读权限
200
注册时间
2013-3-18
最后登录
2022-10-29
809#
发表于 2017-8-21 07:36:07 |只看该作者
wfklhh2017 发表于 2017-8-19 23:31
楼主大神 请教一个问题   撤单动作算不算一个新的委托单呢 ?
比如  当前委托单状态返回是 已申报 或 部分 ...

你随便拿个模拟账户一测不就清楚了……


不要因为众生的愚疑,而带来了自己的烦恼。

使用道具 举报

Rank: 2

精华
0
UID
251800
积分
61
帖子
49
主题
7
阅读权限
30
注册时间
2017-5-29
最后登录
2017-11-6
810#
发表于 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

谢谢

使用道具 举报

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

bottom

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

GMT+8, 2024-4-28 06:42

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部