用以图表显示的交易系统和后台程式化交易的交易指令函数,参数有明显的不同,用户不能简单的将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当做价格来处理,势必造成委托结果与你希望的不符。 tbuy(zd,1,mkt,0,0,'003028',hy) ; 这样经过改写,就没问题了。 ========================================== 有关后台程式化交易使用的注意事项 后台程式化交易由于用户无法直接在图表上看到信号的整个出现过程,故对用户的公式编写水平有一定的要求,用户需要对金字塔的后台交易系统工作机理有比较深的了解,并且要对自己的公式系统有清晰的认识,这样一旦遇到问题也能及时找到问题的原因。强烈建议用户,只有具有比较熟练的使用图表公式编写基础之后再来使用后台程式化交易!后台程式化交易的调试工作非常重要,请参考下面有关的专门介绍。 如果你对金字塔的后台 程式化交易还不了解,那么建议用户仔细阅读 http://www.weistock.com/bbs/dispbbs.asp?boardid=2&Id=370 金字塔公式编写与程式化交易设计指南 http://www.weistock.com/bbs/dispbbs.asp?boardid=2&Id=124 金字塔程式化交易简要教程 ========================================== 金字塔公式编写调试 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=1246&page=1&star=1 =========================================== 有关平仓反手的模型 input:man(26,2,200); ma1:=ma(close,man);
ccm:=cross(close,ma1);
cmc:=cross(ma1,close); 资产:ASSET,LINETHICK0;
可用现金:CASH(0),LINETHICK0;
持仓:HOLDING,LINETHICK0; //顺序必须主要需要根据仓位先平后开的原则 if ccm then
begin
//平空开多
sellshort(holding<0 and ccm,0);
buy(holding<=0,1);
end if cmc then
begin
//平多开空
sell(holding>0 and cmc,0);
buyshort(holding>=0,1);
end 如果是传统的ENTERLONG交易信号,同样需要先平后开的原则 EXITLONG: cross(A2,AO) OR B2>0;
EXITSHORT: CROSS(AO,A2) OR B2>0;
ENTERLONG: cross(AO,A2) AND B1=1;
ENTERSHORT: CROSS(A2,AO) AND B1=1; 如果用户帐户资金不足或者希望顺序成交,可以使用ORDERQUEUE指令 EXITLONG: cross(A2,AO) OR B2>0, ORDERQUEUE; ================================================== 由于金字塔不鼓励使用未来函数,所以 文华的: NN1:=BARSLAST(DATE<>REFX(DATE,1));
NN:=MAX(NN1,1); 在金字塔中用这一条指令替换 NN:=barslast(DATE<>REF(DATE,1))+1; ======================================= 关于函数不能在控制语句之内被引用的问题 答:请参阅专贴介绍 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=130 ================================================== TIME 和 CURRENTTIME 的区别 很多用户需要在一个精确的时间内做某些下单动作,比如开盘后5分钟下单,收盘前1分钟平仓,这种时候不能使用TIME函数做时间点判断,因为TIME是取的周期时间,金字塔在生成每根K线时为了规范化时间,都将时间做了一定程度的修整,所以已经不是严格的成交时间。如果用户需要精确的时间做某些事情,那么必须使用CURRENTTIME,取用户本地计算机时间来完成。为了保证时间准确可靠,用户应该定期的校正您的本地时间,方法可在工具->选项->升级和时间。 =================================================== 对于最后一个周期才起作用的函数,如果使用了全局变量进行控制,千万记得加上islastbar控制条件 variable:a=10; debugout('a1=%.0f',a); if a=10 then begin
debugout('a2=%.0f',a);
tbuy(1,1,mkt);
a:=6;
debugout('a3=%.0f',a);
end; debugout('a4=%.0f',a);
上述公式将无法正常工作,因为variable声明的变量是在整个计算周期内的全局变量,对于tbuy和debugout函数,他们都是在公式的最后的一个周期才执行的函数,所以将导致最后一个周期到来时a实际已经等于6而不会去正确执行开仓语句。
解决办法是 if a=10 and islastbar then begin 这样加上最后周期判断,或者去掉 variable 变量声明,让a变为一个周期之内的变量 =============================================== 对于公式中经常引用到的市场代码,比如上海证券市场是'SH',具体每个市场的代码在工具菜单->市场与板块中,查看市场的代号,设置和进行管理. ================================================= 金字塔公式测试系统,没有测试结果的问题解决 1、确认所测试品种的测试时间段的历史数据齐全,若不起请在工具菜单-》补充数据上补齐。2、在第二步的测试时间段确保时间正确。3、确保在第一步所选测试周期选择正确,公式系统该周期未被禁用。4、确保第四步交易费率设置合理,资金至少要能够进行必要的开仓条件。该资金设置同样在图表做交易系统测试显示时同样应该注意。 ========================================= 文华模型转金字塔模型 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=210 ========================================= 金字塔公式测试系统,没有测试结果的问题解决 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顺序下单指令,那么应该尽量的让其一次性成交,必要时请使用市价委托,因为一旦队列下单不成交撤单后,再次委托会将委托追单排到最后,导致后面的比如反手指令无法正确得到执行,造成信号漏单。 10)后台自动交易不要将THOLDING写在交易语句里比如TBUY(bk and THOLDING=0,1,MKT),详细解释请看问题15 11) 图表交易里使用了后台自动交易的函数THOLDING2或者THOLDING或者使用了DYNAINFO等常数函数,由于图表交易不会在产生信号时立即发单,等再次检测时由于之前的发单成交THOLDING已经发生变化导致刚才出现的信号因为THOLDING的信号消失,所以产生了信号漏掉。 12) 推荐用户仔细看看金字塔的调试技巧文章 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=1246&page=1&star=1 尤其是需要打开下单日志,这样便于在出现问题时,及时的查到问题的原因。 13)用户要确认自己的策略中没有使用跨周期数据引用或者BACKSET,REFX等未来函数,有些这些未来数据,或造成信号的反复消失及过往的K线突然出现信号,导致用户看起来错过的那跟K线没有下单 14)是否在模型中使用了小周期引用大周期的情况,同样属于未来数据的使用,会导致信号消失 =========================================
有关后台自动交易THOLDING的使用 初学者在使用后台自动交易时,通常认为将函数前简单加T就可以,但实际不行的,比如: tSELL(bp and THOLDING>0,0,LMT,C); tSELLSHORT(sp and THOLDING<0,0,LMT,C); tBUY(bk and THOLDING=0,1,LMT,C); tBUYSHORT(sk and THOLDING=0, 1,LMT,C);
在图表交易系统上这样改过来的代码 THOLDING与图表HOLDING最大的不同在于,THOLDING是与你真实持仓一致的函数,只有当我们的委托下单成交后才会有所变化,而HOLDING是虚拟持仓,BUY执行过后立即变化。 由于我们前面的代码在执行了平仓操作后,THOLDING不会马上变成0,故会导致TBUY的THOLDING=0条件不被成立,导致没有反手信号。 正确的反手写法 if bp > 0 and THOLDING>0 then begin tSELL(1,0,MKT),ORDERQUEUE; tBUYSHORT(1, 1,MKT),ORDERQUEUE; end if sp > 0 and THOLDING<0 then begin tSELLSHORT(1,0,MKT),ORDERQUEUE; tBUY(1,1,MKT),ORDERQUEUE; end 有关这部分的用户详细讨论,详见http://www.weistock.com/bbs/dispbbs.asp?boardid=2&Id=2775 清注意上述代码使用了市价委托,如在CTP接口上模拟交易,请注意一定要在上期所品种下进行 THOLING与THODING2的不同:THOLING会返回我们当前的可用持仓,发出平仓指令之后,即便没有成交,持仓也会被扣掉,故如果用THOLING做为开仓条件,会有前次平仓没有成交而马上开仓带来的资金不足情况,如果用户需要知道当前自己的实际持仓,那么请用THODING2,他不会因为你的挂单未成交而导致的实际持仓被扣情况。 ========================================= 用VARIABLE定义的变量和直接赋值定义的变量有何不同? http://www.weistock.com/bbs/dispbbs.asp?BoardID=2&ID=2501 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=3611 ========================================== 引用指定周期品种数据,指定指标数据的注意事项 在使用"INDIE.VAR"(P1,P2)或者"000001$CLOSE"或者使用CALLSTOCK,STKINDI函数引用其他周期的指标数据时,一些初学者容易犯的一个错误就是认为当前的品种数据全了以后被引用品种的数据也全的,导致在使用引用数据指标时编写的公式无法正常工作。金字塔的在用户翻看一个品种时是可以自动补数据的,但是无法自动补被引用品种的或者该品种不同周期的数据,再首次使用金字塔或者在不确定被引用数据是否齐全时,请手工进行数据补充工作,手工补充数据方法:http://www.weistock.com/download/receivedata.jpg ========================================= 为何输出的字符串是100000等数字的 金字塔下,字符串是以地址形式保存的,如果直接按照数字方式显示,则直接显示出地址;因此字符串的输出必须是使用字符串显示函数进行,DRAWTEXT或者DRAWTEXTEX都可以正常显示出字符串变量中的值。 ========================================= |