咨询内容: 教程共分四大部分。
第一部第一章:指标写作
Know How EasyLanguage PowerEditor
简介
OmegaResearch 交易之王 系列产品是交易者公认最好用的交易工具整合环境。你不只可以拿它来看盘,使用它内建的诸多技术指针协助分析交易,你也可以自行开发属意的指标,只要你想的到的。最重要的你可以用它来开发交易系统协助你进入机械化交易的世界。把交易构想付之实现并量化,你可以给自己交易最重要的东西──信心!
这个开发并实现交易梦想的核心就存在它内含的EasyLanguage PowerEditor当中。它不是一般点选内建指针,再加一些逻辑运算选项的阳春交易系统设计平台。它是透过一个类似Pascal语法的所谓EasyLanguage来书写你的程序代码,然后透过内部的编译器产生执行效率高的机码(这就是让它屹立不摇的卖点)。甚至连它的竞争者如Equis 的 MetaStock 等多年来也只能不敢吭声的当老二。
虽然它名为「容易语言」,可是对许多没有程序语言经验的人来说它还真是宛如火星语一般的叫人直呼「不容易」。特别对我们这些非英语系的地区又多一曾障碍可称为最高级的「真不容易」。你的英语能力我没办法帮你改善的,至于EasyLanguage我可以助你一臂之力!不过你的计算机概念我也无能为力,基本上你还是要靠你自修加强,如果还是拿过去的理由让自己逃避,那省点事就干脆不要交易了吧!因为你放弃的是一条通往成功交易的不二法门,那就「学海无涯、回头是岸」吧。
以下所附的几则程序代码是未来全文所拿来探讨的样本,你可以节录列以便对照文章内的解说达事半功倍之效。对了、这些程序你都可以在你的PowerEditor找到,因为这些都是TS2000i所内建的。
MACD指标:
{*******************************************************************
Description : This Indicator plots MACD
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: FastMA(12), SlowMA(26), MacdMA(9);
Plot1(MACD(Close, FastMA, SlowMA), "MACD");
Plot2(XAverage(MACD(Close, FastMA, SlowMA), MacdMA), "MACDAvg");
Plot3(Plot1 - Plot2, "MADiff");
{Alert Criteria}
If Plot3 Crosses Over 0 Then
Alert("MACD has generated a bullish alert")
Else
If Plot3 crosses under 0 Then
Alert("MACD has generated a bearish alert");
{MACD Expert Commentary}
#BeginCmtry
Commentary(ExpertMACD(Plot1));
#End;
MACD函数之1:
{*******************************************************************
Description: Moving Average Convergence Divergence
Provided By: Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Price(NumericSeries), FastMA(NumericSimple), SlowMA(NumericSimple);
MACD = XAverage(Price, FastMA) - XAverage(Price, SlowMA);
MACD函数之2
{*******************************************************************
Description: Exponential Average
Provided By: Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: Price(NumericSeries), Length(NumericSimple);
Variables: Factor(0);
If Length + 1 0 Then Begin
If CurrentBar 2 AND MACD(Close, FastMovAvg, SlowMovAvg) Crosses Above XAverage(MACD(Close, FastMovAvg, SlowMovAvg), MACDMovAvg)[1] Then
Buy ("MACD") This Bar on Close;
MACD空头交易讯号
{*******************************************************************
Description : MACD Short Entry
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: FastMovAvg(12), SlowMovAvg(26), MACDMovAvg(9);
If CurrentBar > 2 AND MACD(Close, FastMovAvg, SlowMovAvg) Crosses Below XAverage(MACD(Close, FastMovAvg, SlowMovAvg), MACDMovAvg)[1] Then
Sell ("MACD") This Bar on Close;
待续
第一章:指标写作
现在开始我会逐行解说每一行程序代码的意义。我不想用一般手册的说明方法,因为那样子让我觉得没有效率;它让你懂一些方法,却也让你合上书后忘的一乾二净。我让你在实做中学习,马上披挂上阵!有成就感你就不容易忘。然后我会举一反三拿一些实例加强你的观念进入深植,想忘都不可能!至于手册、我希望你不要丢掉它,放在身边你会常常用它的;爱因斯坦说:不要去背找得到的数据来增加大脑的负担。相信我!我这二十多年涉猎许多计算机语言,没有手册我一行码都掰不出来的。让我们系上安全带,飞上天HI一下!
MACD指标:
Indicator?什么是Indicator?它就是指标、技术指标。不过在TS2000i它更泛指「可以显示在图型工作区的指针」,也就是说它不只是包含计算指标部份,更包括了显示部份(画图PLOT)。以下就是一个完整的MACD指针程序,使用EasyLanguage语法完成的。
{*******************************************************************
Description : This Indicator plots MACD
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
这一段我们称为『备注』、『批注』(Remark)。在PowerEditor中它会显示为绿色,因为它不会被理会或被编译,但它方便我们阅读,知道自己在这段程序企图得到或想表现些什么。
批注被包围在大括符里头{}。只要你把一段文字用大括符包围起来,就是告诉PowerEditor不要去执行这段东西,就算它里面是计算式也不必去鸟它。因为它是写给我这有血有肉的人看的,不是给你这大脑装满海沙的家伙看的。
Inputs: FastMA(12), SlowMA(26), MacdMA(9);
Inputs : 『外来参数输入』。
文法 Inputs 加冒号『:』之后输入外来参数『FastMA』后加括符内填初设值『(12)』。如果有一个以上的参数需要被代入,参数间用逗点隔开『,』。最后结束时以分号终止『;』。
Inputs的部份是代表这些数据未来在我们使用该指标时是可以被更改的。如本例可以看到12,26,9就是一般MACD的惯用参数。特别说明的是当我们在设定参数名称(FastMA)时虽然没人管你要命什么名称,但设定一些可读性高的名称对你未来使用会是一件好事的。FastMA一条快速的移动平均线比用abc来的叫人会意些吧?
初值一般也引用常用数据来代入,如此在使用上你也会方便自己许多。为什么我们要设外来参数呢?因为它方便你在使用时迅速的更改配合当时需要。也许你有天想看看以6,13,5计算的MACD会长得如何?那好你直接在图形页改参数便可。如果你不用Inputs、那抱歉你只有再进入PowerEditor改新参数,然后重新编译一次才可以使用,当然你要是每到阴天闲的发慌我不阻止你如此干,至少你孩子会对我感激涕零。
Plot1(MACD(Close, FastMA, SlowMA), "MACD");
Plot1 呼叫Plot1函式(函式未来会提,现在你就当自己是皇上吆喝各司其职的小太监上场。有侍衣、侍食、侍寝、、之类的他们有自己的专属工作,只待你一声令下,只是你要叫对人)。函式后面紧跟括符『()』,同样以分号结束叙述。括符内加入函式本身需要的参数或变量。加什么呢?这时手册就派上用场了!每一个函式要加的参数是不一定的,所以手册会帮你找到。你也可以利用在线手册,点选右上像一本书的图示或是选单的Tools>EasyLanguage Dictionary。
文法Plot1(代入要显示的数据,rdquo;
显示的文字字符串rdquo;
);同样的各参数间以逗点相隔,以分号结束。这里有一个不同;字符串输入必须包含在ldquo;
rdquo;
之间。它藉以区隔特别是数字以文字不被处理而直接表现。比如说rdquo;
3-2rdquo;
会表现3-2而不是变成1。
Plot1它有许多兄弟姊姊,排行由1到4。为什么呢?因为TS200i设计成每个指针的显示个数最大为4,无法显示更多。对了这四条线的当然包括你喜欢加在如RSI的超买或超卖的水平线,珍惜物资喔。
来源:bbs.moneyeast.com/viewthr ... 0highlight=DMA
TB技术人员: 改写MACD指标:
{*******************************************************************
Description : This Indicator plots MACD
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
Inputs: FastMA(12), SlowMA(26), MacdMA(9);
Vars : Macd_Now(0),Macd_Xavg(0),Macd_Diff(0);
Macd_Now = MACD(Close, FastMA, SlowMA);
Macd_Xavg = XAverage(Macd_Now, MacdMA);
Macd_Diff = Macd_Now ndash;
Macd_Xavg;
Plot1(Macd_Now, "MACD");
Plot2(Macd_Xavg, "MACDAvg");
Plot3(Macd_Diff, "MADiff");
Plot4(0,rdquo;
0rdquo;
);
如何?是不是一样的东西?我们甚至用了第四条线来画零轴中线。最后你必须按『F3』进行,记住!所有新写或改写的程序都必须按一下F3让PowerEditor帮你检视并编译才可以使用。当回应你Excellent!你就可拍拍手鼓鼓掌,因为它签了通行证给你。快去TS2000i打开一张图然后按F7看看Indicator有没有你的大作出现?找到My_MACD点选有没有热泪盈眶呀?
不过打击接踵来到。你的柱状图为啥跟MACD一样是条线呢?嗯、再回到我们的PowerEditor点选File>Properties在Indicator Properties ndash;
My_MACD 窗口下选Chart Style. > Plots > MADiff > Type > Histogram。记得改完按确定后还是要按F3再编译一次。自己可以尝试看看如何把零轴改成点状的线段表示。
待续
接下来、我们再举一个例子写另一个通用指标Stochastic,就是我们惯称的KD指标。我们设定通用天数为9天,我们知道必须要运算RSV(不成熟随机值)、与得到9天范围的最高与最低。完成程序如下
Inputs: Length(9), OverSold(20), OverBought(80);
Vars : RnHi(0),RnLo(0),RSV(0),sK(0),sD(0);
If CurrentBar > 1 then begin
RnHi = Highest(High, Length);
RnLo = Lowest(Low, Length);
RSV = (Close - RnLo) / (RnHi - RnLo) * 100;
sK = ((sK[1]/3) * 2) + (RSV / 3);
sD = ((sD[1]/3) * 2) + (sK / 3);
end;
Plot1(sK, "%K");
Plot2(sD, "%D");
Plot3(OverBought, "OverBought");
Plot4(OverSold, "OverSold");
以上程序代码大致应该没问题,不需再逐行解说了。所以我挑重点说明。这里出现一个新东西,我们第一个接触的『判别式』;IF(逻辑判断)THEN(执行)。我们把这个运算译成白话就是:如果(IF)今天下雨?(事实判断)那么(THEN)我们出门就要打伞(行动)。写成程序为:
IF 今天下雨? THEN 我们出门就要打伞;
在『今天下雨?』这个条件判别将产生『真TRUE』或『伪FALSE』的结果,如果结果为真(TRUE),我们则执行随后要求的动作,如伪(FALSE)随后动作将不会被执行。再看以下例子:
My_Count = 12;
IF My_Count > 10 THEN My_Count = My_Count + 10;
(TRUE>执行)
IF My_Count 1),如此你就不会在第9天之前看到乱七八糟的指针数据了。
Highest(比较数据, 范围天数)。这个函式很容易了解因为它用High+Est。这里的High不是指我们说的当日最高,而是一堆数据里的最高值将被发现出来。所以我们如果输入Highest(Close, 9);
将会寻找出过去9天中最高的收盘价。而相对的Lowest()便是找出输入范围的最低值。
最后一个是sK与sK[1]、sD与sD[1]。其中的不同点在于后面加了一个中括符。在EasyLanguage中,我们用中括符[X]来表示取前X天的数据或数据。所以当我们运算%K的时候需要昨天的%K数据,所以我们代入sK[1]就是得到1天前的%K数据。同理sD[1]也是这个意思。这个符号使用范围很广,几乎所有的变量都可以使用如此的表示。如Close[10]表10天前的收盘价、High[6]表6天前的当日最高值。好啰这段程序到现在应该没有感觉陌生的语法了吧?老写原来已经有的指标是否有点少些新鲜感?我们在继续推进前最后再举一个例子;它是在寰宇财金[45]-『最新技术分析指标』中的【随机RSI摆荡指标--P133】。
Name : StochRSI
Inputs : Price(close), Length(9);
Vars : ToRSI(0), HiRSI(0), LoRSI(0);
ToRSI = RSI(Price, Length);
HiRSI = Highest(ToRSI, Length);
LoRSI = Lowest(ToRSI, Length);
Value1 = (ToRSI - LoRSI) / (HiRSI - LoRSI);
Value2 = .8;
Value3 = .2;
Plot1(value1, "StRSI");
Plot2(value2, "O.B");
Plot3(value3, "O.S");