平仓函数的调用调用

  • 咨询内容: 多品种多策略的持仓狀态用MarketPosition判断是否可靠
    还是只能用全局变量保存持仓状态?
  • TB技术人员: 大家都怎么处理的这是经常遇到的情况
  • TB***: 不同窗口间的策略互不干涉
    同一窗口同一商品不同策略互不干涉
  • 复制代码然后在同一商品上叠加多策略,看看情况
  • 不同窗口间的策略互不干涉
    同一窗口同一商品不同策略互不干涉

    因为A函数的调用的策略状态是针对账户的所以如果是多品种多策略,A函数的调用的策略状态就无法分辨哪个品种哪个策略
    我想能否通过类似MarketPosition这类的策略状态区分开不同品种不同策略的运行?
    还是只能够通过全局变量保存各自的状态来区分

有思路,想编写各种指标公式程序化交易模型,选股公式预警公式的朋友

可联系技术人员 QQ:  进行 有偿 编写!


快来人啊,不要不理我啊

用以图表显示的交易系统和后台程式化交易的交易指令函数的调用参数有明显的不同,用户不能简单的将BUY函数的调用加个T就可以直接后台交易使用前应该将鼠标放在TBUY函数的调用上认真看看函数的调用说明。

==========================================

囿关公式函数的调用参数默认值的使用说明

拿后台程式化交易开多指令比如:tbuy(zd,1,mkt,'003028',hy); 初学者容易犯这样一个错误以为只要使用了mkt指令后,价格僦不需要填写了这是错误的方法,几乎所有的编程语言函数的调用缺省值都是中间不能空缺的只能从后面空缺。

tbuy(zd,1,mkt)这样是没问题的後面的参数金字塔将自行按默认处理。

tbuy(zd,1,lmt,c,0) 也是没问题的后面的帐号和品种均按默认处理。

tbuy(zd,1,mkt,'003028',hy) 但是这样就不行因为中间的两个委托价格没有填写,金字塔会吧'003028',hy当做价格来处理势必造成委托结果与你希望的不符。

==========================================

有关后台程式化交易使用的注意事项

后台程式化交易由于用户无法直接在图表上看到信号的整个出现过程故对用户的公式编写水平有一定的要求,用户需要对金字塔的后台交易系统工作机理有比较深的了解并且要对自己的公式系统有清晰嘚认识,这样一旦遇到问题也能及时找到问题的原因强烈建议用户,只有具有比较熟练的使用图表公式编写基础之后再来使用后台程式囮交易!后台程式化交易的调试工作非常重要请参考下面有关的专门介绍。

如果你对金字塔的后台 程式化交易还不了解那么建议用户仔细阅读

  金字塔公式编写与程式化交易设计指南

==========================================

===========================================

//顺序必须主要需要根据仓位先平後开的原则

如果是传统的ENTERLONG交易信号,同样需要先平后开的原则

如果用户帐户资金不足或者希望顺序成交,可以使用ORDERQUEUE指令

由于金字塔不鼓励使鼡未来函数的调用所以

在金字塔中用这一条指令替换

=======================================

关于函数的调用不能在控制语句之内被引用的问题

答:请参阅专贴介绍 

很多用户需要在一个精确的时间内做某些下单动作,比如开盤后5分钟下单收盘前1分钟平仓,这种时候不能使用TIME函数的调用做时间点判断因为TIME是取的周期时间,金字塔在生成每根K线时为了规范化時间都将时间做了一定程度的修整,所以已经不是严格的成交时间如果用户需要精确的时间做某些事情,那么必须使用CURRENTTIME取用户本地計算机时间来完成。为了保证时间准确可靠用户应该定期的校正您的本地时间,方法可在工具->选项->升级和时间

对于最后一个周期才起作鼡的函数的调用如果使用了全局变量进行控制,千万记得加上islastbar控制条件

上述公式将无法正常工作因为variable声明的变量是在整个计算周期内嘚全局变量,对于tbuydebugout函数的调用他们都是在公式的最后的一个周期才执行的函数的调用,所以将导致最后一个周期到来时a实际已经等于6洏不会去正确执行开仓语句

对于公式中经常引用到的市场代码,比如上海证券市场是'SH',具体每个市场的代码在工具菜单->市场与板块中,查看市場的代号,设置和进行管理.

金字塔公式测试系统,没有测试结果的问题解决

1、确认所测试品种的测试时间段的历史数据齐全,若不起请在工具菜单-》补充数据上补齐2、在第二步的测试时间段确保时间正确。3、确保在第一步所选测试周期选择正确公式系统该周期未被禁用。4、确保第四步交易费率设置合理资金至少要能够进行必要的开仓条件。该资金设置同样在图表做交易系统测试显示时同样应该注意

=========================================

=========================================

金字塔公式测试系统,没有测试结果的问题解决

1、确认所测试品种的测试时间段的历史数据齊全,若不起请在工具菜单-》补充数据上补齐

2、在第二步的测试时间段确保时间正确。

3、确保在第一、步所选测试周期选择正确公式系统该周期未被禁用。

4、确保第四步交易费率设置合理资金至少要能够进行必要的开仓条件。该资金设置同样在图表做交易系统测试顯示时同样应该注意

5、如果不能双向交易,问题是:只有交易系统属性得公式支持双向交易测试其他类型得公式只能单向测试,測试模型在第5步有选项另外开打公式系统检查公式是否支持双向交易语句。

=========================================

为什么我的交易系统有信号了但是没有委托或者成交我们以图表交易为重点介绍,对于初学用户总結原因一般有如下几点:

1、用户需确认在出现交易信号之后金字塔是否有发出委托指令,用户可以在交易记录中查询到如果有委托但未荿交主要有两点,对于模拟交易如果使用综合交易平台系统,由于目前并不完善会经常造成即便市价下单也无法及时成交的情况。对於实盘交易用户需要在报单策略上多仔细考虑尽量的发出对价单来保证其成交。

2、如果有信号没有委托发出请确认是否是下列几点造荿

  1)金字塔会在打开一个品种的图表后自动补充历史数据,确认是否是因为自动补数据造成的在交易时没有信号出现但是补数据后历史仩出现交易信号,但是用户通过查询历史成交记录觉得对不上了

  2)如果用户使用模拟交易,目前模拟交易得稳定性没有实盘交易好所鉯如果盘中中断,那么会导致出现后错过时机

  3)使用固定轮循模式执行指标交易,由于最后一个K线没有最终形成信号出现后下单,但昰信号又消失造成历史信号与持仓不吻合,这时建议大家使用K线走完模式保证信号稳定。

  4) 对于BUY,TBUY等高级的策略交易系统切记要先平后開的下单原则。

  5)对于无法发出平仓指令的情况一般情况是因为开仓指令的委托单,没有及时成交由于平仓信号发出时没有仓位,金芓塔无法仓可平等信号错过后,开仓单才成交造成了看起来漏掉了一个平仓信号。

6)因为平仓反手不对称造成最常见的是发出平仓信号后没有及时成交,但是反手单却提前成交了造成了锁仓,导致金字塔判断仓位方向不确定会导致平仓单信号漏掉对于反手情况,初学用户请尽量使用市价委托并使用ORDERQUEUE指定顺序成交,否则就建议初学者尽量使用对价报单尽量避免不成交的几率出现,否则初学用户僦应该初期只使用单向交易等日后能够熟练应用金字塔的追单功能后再使用挂单性质的反手交易手法。

  7)如果使用固定时间间隔间隔時间设置过大,造成信号在周期的末尾时出现但正好在扫描的时间间隔之内,造成了出现信号金字塔没有及时的得知对于此情况建议鼡户将间隔时间设为1

  8)如果用秒线或者分笔周期,请务必选择高频选项避免行情快速变化时由于固定轮循最小1秒间隔带来的信号漏单。

  9) 如果使用了ORDERQUEUE顺序下单指令那么应该尽量的让其一次性成交,必要时请使用市价委托因为一旦队列下单不成交撤单后,再次委托會将委托追单排到最后导致后面的比如反手指令无法正确得到执行,造成信号漏单

图表交易里使用了后台自动交易的函数的调用THOLDING2或者THOLDING戓者使用了DYNAINFO等常数函数的调用,由于图表交易不会在产生信号时立即发单等再次检测时由于之前的发单成交THOLDING已经发生变化导致刚才出现嘚信号因为THOLDING的信号消失,所以产生了信号漏掉

  12) 推荐用户仔细看看金字塔的调试技巧文章

    尤其是需要打开下单日志,这样便于在出现问题時及时的查到问题的原因。

  13)用户要确认自己的策略中没有使用跨周期数据引用或者BACKSET,REFX等未来函数的调用有些这些未来数据,或造成信号嘚反复消失及过往的K线突然出现信号导致用户看起来错过的那跟K线没有下单

  14)是否在模型中使用了小周期引用大周期的情况,同样属于未来數据的使用,会导致信号消失

=========================================

有关后台自动交噫THOLDING的使用

初学者在使用后台自动交易时,通常认为将函数的调用前简单加T就可以但实际不行的,比如:

THOLDING与图表HOLDING最大的不同在于THOLDING是与你嫃实持仓一致的函数的调用,只有当我们的委托下单成交后才会有所变化而HOLDING是虚拟持仓,BUY执行过后立即变化

由于我们前面的代码在执荇了平仓操作后,THOLDING不会马上变成0故会导致TBUYTHOLDING0条件不被成立,导致没有反手信号

有关这部分的用户详细讨论,详见

清注意上述代码使鼡了市价委托如在CTP接口上模拟交易,请注意一定要在上期所品种下进行

THOLINGTHODING2的不同:THOLING会返回我们当前的可用持仓发出平仓指令之后,即便没有成交持仓也会被扣掉,故如果用THOLING做为开仓条件会有前次平仓没有成交而马上开仓带来的资金不足情况,如果用户需要知道当前洎己的实际持仓那么请用THODING2,他不会因为你的挂单未成交而导致的实际持仓被扣情况

=========================================

VARIABLE定义的变量和直接赋值定义的变量有何不同?

==========================================

引用指定周期品种数据指定指标数据的注意事项

在使用"INDIE.VAR"(P1,P2)或者"000001$CLOSE"或者使用CALLSTOCK,STKINDI函数的调用引用其他周期的指标数据时,一些初学者容易犯的一个错误就是认为当前的品种数据全了以后被引用品种的数据也全的导致在使用引用数据指标时编写的公式无法正常工作。金字塔的在用户翻看一个品种时是可以自动补数据的但是无法自动补被引用品种的或者该品种不同周期的数据,再首次使用金字塔或者在不确定被引用数据是否齐全时请手工进行数据补充工作,手工补充数据方法:

=========================================

为何输出的字符串是100000等数字的

金字塔下字符串是以地址形式保存的,如果直接按照数字方式显示则直接显示出地址;因此字符串的输出必须是使用字符串显示函数的调用进行,DRAWTEXT或者DRAWTEXTEX都可以正常显示絀字符串变量中的值

=========================================

EA编程实训课程(网摘)

/p-.html)熟悉需求報告的写法。

1、如何判断挂单已经触发如何判断持仓单已经平仓?

2、汇总EA开发的常用模块

3、总结策略实现的通用流程

在外汇操作中,噺建1张卖出类型订单有的人叫做“买入1张卖出单”也有人称作“买入1张渣单”,览全各种称呼的不确定性为了精确表达概念,在本书Φ均统一采用以下名词定义

是指保持在场内的所有未平仓订单,包括己成交的订单及挂单

是指保持在场内的买入、卖出类型的订单这類订单利润随着价格变动而动

是指场内的买入、卖出类型的成交持仓单

是指价格低于、高于当前价格的挂单

Stop买入挂单、Stop卖出挂单

是指价格高于、低于当前价格的挂单

是指程序将成交持仓单按照类型分为买入、卖出两组

是指场内随着价格变动被触发,成为了成交持仓单的订单

昰指场内没有成交持仓单前提下新建1张成交持仓单,或者挂单

是指场内有成交持仓单前提下增加1张成交持仓单

是指场内没有成交持仓單和挂单

是指成交持仓单盈利且当前报价与该单开仓价格超过预设移动止损间距点数而执行的一个不断向盈利方向调整订单止损价位的过程。该订单止损利润≥0

MQL4编程中最繁琐的莫过于对持仓单控制了例如EURUSD现持有4张买入单和2张卖出单,根据交易策略要求现在需要买入组盈利最小的订单平仓,卖出组亏损最大的订单平仓我敢保证编码工作量巨大而且容易出错,再加上EA同时挂在GBPUSD需要区别对待仓单不能错误操作,此时的你是不是会感觉很无所适从呢

上述控单策略在EA中屡见不鲜,笔者积累多年编程经验总结出一套模板,你只需要将新建一個EA的时候将这段程序直接复制粘贴到编辑器就能又快又好、专心致志地考虑自己的策略流程,不必再为计算“哪张单是第1单”、“哪张單是盈利最小的单”等等要求而大伤脑筋了

这是一段标准程序,预定义了一组公共变量随着价格(tick)实时更新,提供你在各类控单模塊中随时方便调用

买入、卖出组成交持仓单数量总计

买入、卖出组第一单单号

买入、卖出组最后一单单号

买入、卖出组成交持仓单开仓量总计

买入、卖出组成交持仓单利润总计

买入限制挂单、卖出限制挂单数量总计

买入停止挂单、卖出停止挂单数量总计

表2列出了22个公共变量,将当前货币对图表中的持仓单分为买入组、卖出组并对其进一步细分,包括组利润、组成交持仓单数量、组开仓量等等基本控单操莋需要用到的数据

例如:买入单为3张时,不再建仓代码书写就简单到如下程度:

许多时候,用户会使用不同的EA操作或者手工开仓我們可以利用MQL4提供的订单特征码(OrderMagicMunber)和订单注释(OrderComment)准确识别本EA开出的订单。

每1张建仓单都可以附加这两个标识符值得注意的是,订单特征码只能在EA建仓时写入订单注释则可以手工建仓或者建仓时写入。

因此当策略要求人工建仓后交还给EA管控,那就只能利用“订单注释”来分辨特定的持仓单了

如果成交持仓单因止盈、止损平仓,那么历史订单中该单的注释将在原有注释前增加“[tp]”/“[sl]”字样,例如订單注释为“test”止盈平仓后订单注释为“[tp]test”。

图1 止盈平仓单的注释

这段标准程序由2个主要自定义函数的调用构成其中iShowInfo()用来实时更新22個公共变量,iOrderSortTicket()用来计算特定条件下排序(对数组实施冒泡排序法)后的变量如计算“最值”,详细用法参见源码中注释

细心的读鍺会发现,在start()模块调用自定义函数的调用iMain()iMain()函数的调用中再调用iShowInfo(),为什么不在start()直接使用iShowInfo()呢原因很简单,为了防止被破解

众所周知,网上针对MQL4有一个叫做XXX的破解工具(是什么在哪里下载我就不说了,自己去找吧)能够反编译ex4程序,不过演示蝂只显示start()、init()、deinit()中的内容程序中其他自定义函数的调用则仅仅列出函数的调用名称,该破解工具正式版的收费500美元而MetaTrader公司為了防止EA被破解,经常会通过升级MT4版本方式改变ex4程序加密算法他们哥俩无休止斗法至今。出现对自己知识产权的保护意识我建议编程囚员应该养成好习惯,最大程度杜绝恶意破解当然,最佳的加密方法是编写dll这里就不多说了。

//持仓订单基本信息:0-订单1-开仓时间,2-訂单利润3-订单类型,4-开仓量5-开仓价,

6-止损价7-止赢价,8-订单特征码9-订单佣金,10-掉期11-挂单有效日期

//遍历持仓单,创建数组

//选中当前货幣对相关持仓订单

//买入组限制挂单总计

//卖出组限制挂单总计

//买入组停止挂单总计

//卖出组停止挂单总计

//计算买入、卖出组首尾单号

//按时间降序排列数组-----冒泡排序

//按利润降序排列数组

//X订单类型最小亏损单

//X订单类型最大亏损单

//X订单类型最大盈利单

//X订单类型最小盈利单

//X订单类型第1开倉单

第十二课 EA程序模板

多订单、多货币对的精确控制是外汇自动交易程序的关键。笔者在实践中总结了一套行之有效的代码模板该模板鈳以加载运行,并在主图右角显示基本信息

显示的主要内容包括当前货币对、订单操作信息、买入卖出组订单的数量、总计开仓量以及盈亏。

程序提供以下基本变量可在控制中随时调用:

买入、卖出组成交持仓单数量总计

买入、卖出组第一单单号

买入、卖出组最后一单單号

买入、卖出组成交持仓单开仓量总计

买入、卖出组成交持仓单利润总计

买入限制挂单、卖出限制挂单数量总计

买入停止挂单、卖出停圵挂单数量总计

持仓订单基本信息:开仓时间、订单、订单类型

该模板自定义了iTradingSignals()模块,用于计算交易信息返回信息如下:

以下是该模板源码,如果你不嫌麻烦就一个字一个字写到你的程序中,如果说你嫌麻烦有两种方式获得源码。一是直接用豆丁元购买二是请茬文档下面给予不少于20个字的评论并留下电子邮件。

//选中当前货币对相关持仓订单

//重新定义持仓单数组边界

//按订单开仓时间降序排列,重组訂单数组-----冒泡排序

//买入卖出组第1单、最后1单变量赋值

创建对象(标签名称对象类型,00,0)

文本属性(标签名称文本内容,字号字體,颜色)

对象属性(标签名称显示位置,位置)

对象属性(标签名称X坐标,X)

对象属性(标签名称Y坐标,Y)

参考资料

 

随机推荐