等级: 免费版
- 注册:
- 2024-4-26
- 曾用名:
|
一、函数
1.1 图表策略 转 后台策略
用图表显示交易信号的图表策略,图表的开多平多下单指令Buy/Sell函数,与后台程式化交易的开多平多下单指令TBuy/TSell函数,参数差异明显,不能简单的将Buy函数加T就直接后台交易。请您将鼠标放在TBuy函数上,逐字逐句地认真看看函数说明,再进行改写。
1.2 函数参数默认值的使用说明
函数最后面的参数可省略不写,中间参数不能省略
错误示例:后台程式化交易开多指令:tbuy(con,1,mkt,'003028',hy); 初学者容易犯的一个错误,认为使用了mkt市价指令后,价格就不需要填写了,这是典型的错误方法,几乎所有的编程语言函数缺省值都是中间不能空缺的,只能从后面空缺。 正确示例1:tbuy(con,1,mkt);可以从第4个参数开始,省略后面所有的参数,省略的参数金字塔将自行按默认处理。
正确示例2:tbuy(con,1,lmt,c,0) ; 也可以从第5、或第6个参数开始,省略后面所有参数,后面的帐号和品种均按当前账号和当前品种默认处理。
错误示例:tbuy(con,1,mkt,'003028','IF00'); 因为中间的两个委托价格没有填写,软件就将'003028','IF00'当做价格来处理,造成委托结果与您的预期不符。
改写后正确示例3:tbuy(con,1,mkt,0,0,'003028','IF00') ; 将中间的两个价格参数填写上,就是正确的书写格式了。
1.3 有关后台程式化交易使用的注意事项
后台程式化交易由于用户无法直接在图表上看到信号的整个出现过程,故对用户的公式编写水平有一定的要求,用户需要对金字塔的后台交易系统工作机理有比较深的了解,并且要对自己的公式系统有清晰的认识,这样一旦遇到问题也能及时找到问题的原因。强烈建议用户,只有具有比较熟练的使用图表公式编写基础之后再来使用后台程式化交易!后台程式化交易的调试工作非常重要,请参考下面有关的专门介绍。
如果你对金字塔的后台 程式化交易还不了解,那么建议用户仔细阅读:
公式编写与程式化交易-初级教程 https://www.weistock.com/software/download/PyxBJRXLkvYRP6dY43Ep
公式编写与程式化交易-高级教程 https://www.weistock.com/software/download/aQBp7rg6N9MeAkgy0VGA
1.4 有关在图表程式化交易中使用DYNAINFO、THOLDING等常数函数的特别说明
图表策略中,使用的都是序列函数。序列数值的函数,会在调用后返回一串连续的数据,像开盘价、收盘价等函数就都是序列函数。
在图上使用DYNAINFO、THOLDING等常数函数,请详看此贴 www.weistock.com/bbs/forum.php?m ... 1&extra=#pid890
1.5 当日K线数量
由于金字塔不鼓励使用未来函数,所以文华的:
[PEL] 复制代码
?
1
2
NN1:=BARSLAST(DATE<>REFX(DATE,1));
NN:=MAX(NN1,1);
在金字塔中用这一条指令替换
[PEL] 复制代码
?
1
NN:=barslast(DATE<>REF(DATE,1))+1;
1.6 函数不能在控制语句之内被引用 https://www.weistock.com/bbs/for ... 1&extra=#pid898
1.7 TIME 和 CURRENTTIME 的区别 很多用户需要在一个精确的时间内做某些下单动作,比如开盘后5分钟下单,收盘前1分钟平仓,这种时候不能使用TIME函数做时间点判断,因为TIME是取的周期时间,金字塔在生成每根K线时为了规范化时间,都将时间做了一定程度的修整,所以已经不是严格的成交时间。如果是9点开盘,1分钟周期的第一个K线就是090100,而5分钟则是090500。如果用户需要精确的时间做某些事情,必须使用(1)CURRENTTIME,取用户本地计算机时间;(2)DYNAINFO(207),取交易所行情时间来完成。如果用CURRENTTIME,为了保证时间准确可靠,请定期校正您的本地时间,方法可在工具->选项->基本设置->升级和时间 。
注意:TIME是返回序列数据,而CURRENTTIME返回常数,故尽量不要在图表交易策略上使用CURRENTTIME 。
1.8 对于最后一个周期才起作用的函数,如果使用了全局变量进行控制,千万记得加上islastbar控制条件
[PEL] 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
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变为一个周期之内的变量
1.9 市场代码函数MarketLabel
对于公式中经常引用到的市场代码,比如上海证券市场是'SH',具体每个市场的代码在工具菜单->市场与板块中,查看市场的代号,设置和进行管理.
1.10 文华模型转金字塔模型
布林带BOLL https://www.weistock.com/bbs/for ... &extra=#pid3480
简易文华模型改金字塔方法 https://www.weistock.com/bbs/for ... &extra=page%3D3
1.11用VARIABLE定义的全局变量
Variable定义的全局变量,使用场景如下:
(1)图表程序化;
(2)逐K线计算模式;
(3) 每根K线上只记录当根K线的最新值(不能记录一根K线上的历史各个状态值)。
逐K线计算模式,从第1根K线开始,会从第一个周期逐个周期解析公式系统,每个周期都会解析整个公式系统一遍
每解析一遍公式系统,就会在第1根K线上初始化一次。
正确应用示例:完整的包括止损,移动止赢交易范例 www.weistock.com/bbs/forum.php?m ... &extra=page%3D1
错误应用示例:Variable全局变量出问题 www.weistock.com/bbs/forum.php?m ... amp;extra=#pid10181
1.12 输出字符串函数:DRAWTEXT或DRAWTEXTEX 为什么输出的字符串是100000等数字
金字塔下,字符串是以地址形式保存的,如果直接按照数字方式显示,直接显示出的是地址;因此字符串的输出必须是使用字符串显示函数进行,DRAWTEXT或者DRAWTEXTEX都可以正常显示出字符串变量中的值。
1.13 日内交易模型的开盘,最高价,结算价
最高价:hhv(h,barslast(date<>ref(date,1))+1);
开盘价:valuewhen(data<>ref(data,1),o);
均价线:http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=950
在一分种周期取前一天最高价、最低价怎么取?
[PEL] 复制代码
?
1
2
3
N:=barslast(date<>ref(date,1))+1;
preDayHigh:ref(hhv(h,N),N); //昨日最高价
preDayLOW:ref(LLv(L,N),N); //昨日最低价
在一分种周期取前五分种最高价怎么取?
[PEL] 复制代码
?
1
2
3
N:=BARSLAST(DATE<>REF(DATE,1))+1;
HH:VALUEWHEN(TIME=090500,HHV(H,N));
LL:VALUEWHEN(TIME=090500,LLV(L,N));
{今日结算价}
ZQ:=IF(LLV(DAY,0)=HHV(DAY,0),0,BARSLAST(DAY<>REF(DAY,1))+1),LINETHICK0;
结算价:IF(SUM(VOL,ZQ)=0,(HIGH+LOW+OPEN+CLOSE)/4,SUM((HIGH+LOW+OPEN+CLOSE)/4*VOL,ZQ)/SUM(VOL,ZQ)) ;
1.14
1.12
|
|