EasyLanguage重要功能指令与语法解析.docx

上传人:b****6 文档编号:7058948 上传时间:2023-01-16 格式:DOCX 页数:14 大小:202.72KB
下载 相关 举报
EasyLanguage重要功能指令与语法解析.docx_第1页
第1页 / 共14页
EasyLanguage重要功能指令与语法解析.docx_第2页
第2页 / 共14页
EasyLanguage重要功能指令与语法解析.docx_第3页
第3页 / 共14页
EasyLanguage重要功能指令与语法解析.docx_第4页
第4页 / 共14页
EasyLanguage重要功能指令与语法解析.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

EasyLanguage重要功能指令与语法解析.docx

《EasyLanguage重要功能指令与语法解析.docx》由会员分享,可在线阅读,更多相关《EasyLanguage重要功能指令与语法解析.docx(14页珍藏版)》请在冰豆网上搜索。

EasyLanguage重要功能指令与语法解析.docx

EasyLanguage重要功能指令与语法解析

单元五EasyLanguage重要功能、指令及语法解析

 

本单元内容主要取材自EasyLanguage原版手册。

‰EasyLanguage语法介绍

EasyLanguagePowerEditor可提供程序编辑、颜色管理、语法检查、在线辅助、程序检察与在线侦错等多功能的整合式程序开发环境;而StrategyBuilder用以结合多操作信号,形成完整交易策略;透过EasyLanguage程序「在TradeStation线图中扫描资料」,即可完成回

测。

交易信号的基本语法由许多「If(条件判断式)Then(交易行动)」规则所组成,使用

「If-Then」的邏辑判断式处理交易线图上的回测,「条件判断式」可由算术、比较或邏辑运算式组成,而「交易行动」用以作建立部位,最简单的交易行动如Buy/Sell。

例如,「IfClose

>High[1]ThenBuyNextBaratMarket;」(或简写为「IfC>H[1]ThenBuy」可形成「若(If)

今日收盘(C)大于(>)昨日最高价(H[1]),则(Then)买(Buy)在当日收盘」。

本单元将详细介绍EasyLanguage的语法,包括以下主题:

运算符(算术、邏辑)与复合表达式、數值变數与自定变數宣告、动态參數输入、内置函數、区块指令、买卖命令种類、

多资料策略、客制函數、环境条件与触发条件之运用、相关辅助系统的使用等。

 

‰关于变數(不先讲不知道,除非默认变數…)

常用变數包括邏辑值(True/False)与數值(Numeric)变數。

邏辑值变數可用ConditionN(N=1..99)储存;數值变數可用ValueN(N=1..99,默认值为

0))储存。

數值变數的使用,如:

Value1=(High[1]–Low[1])/2;Close>High[1]–Value1;

邏辑值变數的使用,如:

Condition1=Close>High[1]+(High[1]–Low[1])/2;Condition2=Volume>Volume[1]*1.5;

IfCondition1AndCondition2ThenBuyNextBaratMarket;Value1=(High[1]–Low[1])/2;

Variables则可以同时储存邏辑值与數值,需做变數宣告同时可做起始值设定,如:

Variables:

PreBarRange(0);PreBarRange=High[1]–Low[1]

IfClose>High[1]+PreBarRange/2ThenBuyNextBaratMarket;Y=f(x)

‰算术、比较与邏辑运算符与复合表达式

1.同时使用算术与比较运算符。

IfClose>High[1]+(High[1]–Low[1])/2ThenBuyNextBaratMarket;

2.使用复合表达式

1

Condition1=Close>High[1]+High[1]–Low[1])/2;IfCondition1ThenBuyNextBaratMarket;

其中,Condition变數可由Condition1~Condistion99,默认值为False。

3.使用邏辑运算符(AND,OR)

Condition1=Close>High[1]+High[1]–Low[1])/2;Condition2=Volumn>Volumn[1]*1.5;

IfCondition1ANDCondition2ThenBuyNextBaratMarket;

 

‰内置函數使用(在哪裡找?

程序代码是什么?

EasyLanguage中包含大量内置函數用于建立技术分析指标,例如:

「Value1=Highest(Close,5);」可取得最近5天收盘最高。

又如:

IfAverage(Close,9)CrossesOverAverage(Close,18)ThenBuyNextBaratMarket;

函數亦可于执行时才取得參數输入(动态输入),例如:

Inputs:

FastLen(9),SlowLen(18);

IfAverage(Close,FastLen)CrossesOverAverage(Close,SlowLen)ThenBuyNextBarat

Market;

使用Input指令可以藉由接口改变參數,并做參數优化。

 

‰多前提条件(Conditions)与多执行行动(Actions)的处理(也可藉由多Signal组合)

当买卖条件与其指令众多时,可使用区块指令(Begin…End),如:

Variable:

CountTheBuy(0);

Condition1=Close>High[1]+Range[1];IfCondition1ThenBegin

BuyNextBaratMarket;CountTheBuys=CountTheBuys+1;

End;

又如:

Variable:

BarCount(0);

IfMarketPosition<>0ThenBeginBarCounter=BarCounter+1;IfClose

ExitLongNextBaratMarket;ExitShortNextBaratMarket;

End;

End;

 

‰下单(Orders)种類(何时、何价、何量)

Buy建立多头部位;Sell建立空头部位;ExitLong结清多头部位;ExitShort结清空头部位。

2

买卖可在当日收盘或隔日开盘,分别如:

IfCondition1ThenBuy;与IfCondition1ThenBuyThisBaronClose;

相同,均为当日。

IfCondition1ThenSellatMarket;

则以隔日开盘价交易。

此外,OrHigher,用于Buy-Stop与Sell-Limit,例:

IfCondition1ThenBuyat45orHigher;

表「>=45」则BuyStop。

IfCondition1ThenSellat68orHigher;

表「>=68」则SellLimit。

OrLower,用于Buy-Limit与Sell-Stop,例:

IfCondition1ThenBuyat33orLower;

表「>=33」则BuyLimit。

IfCondition1ThenSellat42orLower;

表「>=42」则SellStop。

买进卖出可指定点數,分为Point(为最小增减量,Minimummovement,在EasyLanguage中股票以0.001之便量为point)与BigPoints(期货选择权使用之,在在EasyLanguage中最小跳动单位对应的价值衡量),如:

IfCondition1ThenBuyNextBaratHigh+1pointorHigher;

IfCondition1ThenBuyNextBaratHigh+1Stop;(不写默认为BigPoint)

也可指定量(Quantity),如:

IfCondition1ThenSell100Sharesat66orHigher;

IfCondition1ThenBuy12ContractsNextBaratMarket;

MarketPosition用以确认市场部位狀况,1,-1,0分别表示买进、卖出或无部位。

可藉由继续加仓或連续减仓(pyramiding),分批进出,做资金管理。

‰前提(Setup)条件与进场(Entry)条件

交易条件之执行可分为环境设定(Set-up)与触发(Entry),Set-up用以确认触发的前提条件,但并不实际触发行动;可以Setup条件评估市况,再由Entry实际下单。

通常会以一个Set-up「AND」連结多个以「OR」連结的Entry信号,如:

IfFastAvgCrossesAboveSlowAvgANDClose>OpenThenBuyNextBaratMarket;

前面为Setup条件,后者为Entry条件。

 

‰进场信号(EntrySignal)与離场信号(ExitSignal)

最基本的交易策略应该包含进场策略以及停利加上止损的策略;部位结清条件可能为:

「出场条件满足」、「止盈」、「止损」或「市场过度震荡」。

建立部位方式可藉由Buy与Sell。

Buy与Sell分别建立多头与空头策略,无論如何均会建立部位,而非只是平仓而已,因此不能在同一个Bar中又Sell又Buy。

3

在Buy与Sell动作被驱动时,可以在图形上加上文字卷标,欲在图上标注(Buy/Sell)买卖之理由,例如:

IfClose>High[1]ThenBuy(“HigherClose”)atMarket;

IfVolumn>Volumn[1]ThenBuy(“Volimnup”)100sharesatMarket;IfClose

藉此,也可指定要平仓的是对应什么进场条件,当同时存在多组操作信号时,就不会全

部平仓。

如:

「IfClose>High[1]ThenBuy(“CloseUp”)NextBaratOpen;」与以下卖出信号对应:

IfClose

藉此,可让多组买卖信号同时存在。

至于部位结清部位,可使用ExitLong与ExitShort分别结清多头部位与空头部位。

出场信号范例如下:

IfCondition1ThenExitLongThisBaronClose;

IfCondition1ThenExitShortNextBaratMarket;

以上作法将结清所有多头或空头部位,但由于在交易过程可能陸续建立多次买进部位

(OpenOrder),而每次买进部位又交易多个单位(Contracts或Shares),例如3次交易,每次各建立5个Contracts,则可用「IfCondition1ThenExitLong2Constracts;」语法,将会让3次交易各剩下3(5-2)个Contracts;而「IfCondition1ThenExitLong2ConstractsTotal;」语法,将只会结清第一次交易的2个Contracts;亦即,第一次交易剩下3个Contracts,而其他兩次交易剩下5个Contracts。

‰自定义函數(CustomFunction)

EasyLanguage中包含大量内置函數,使用者也可自定义函數。

当使用者希望撰写一个判断是否連续3天上涨的程序,可以写成:

Variable:

CloseUp(False);CloseUp=Close>Open;

IfCloseUp[1]ANDCloseUp[2]ANDCloseUp[3]ThenBuyNextBaratMarket;

但如果要弹性的设定天數,可以写自建函數,程序为以菜单「File¾New」在图1窗口中选择「General」分页夹,选择「Function」,按「Ok」键,即可带出图2窗口,给予自建函數一个名称Name(如,_CloseUps),并设定函數输出资料型态为「TrueFalse」,按「Ok」键,即可进入自建程序编辑窗口。

Y=f(x)

在程序编辑窗口中输入以下程序代码:

Input:

Length(Numeric);

IfCountIf(Close>Open,Length)=LengthThen

_CloseUps=True

Else

_CloseUps=False;

 

4

图1

 

图2

「Verify」(F3按键)无误后,即可使用。

例如,写一个Signal程序如下(命名为

「_CloseOpen」):

If_CloseUps(3)ThenBuyNextBaratMarket;

「Verify」(F3按键)无误后,进入StrategyBuilder建立一名为_UpTrend的操作策略,此策略以「_CloseOpen」信号作为多头部位进场条件,再选择「FixedBarExit」为多头部位出场条件。

最后,进入TradeStation中,选取分析线图后,調用此策略进行分析,即可完成,如图3

所示。

图3

 

5

‰調用多资料(Multi-data)來源的交易策略(在哪裡设定资料序号)

交易的执行可能參考一个以上的资料來源,例如某股票(Data1)买卖依据指數(Data2)相对决定,语法如下:

Condition1=CloseofData1>Close[1]ofData1;

Condition2=LowofData2Close[1]ofData2;IfCondition1ANDCondition2ThenBuyNextBaratMarket;

又如,透过以下语法调用特定资料來源的资料,

Value1=Average(Close,10)ofData2;

主要DataStream为Data1,Data2~Data50作为辅助DataStream。

 

‰进阶语法与资料型态

1.文字资料(TextValues)

Variables:

MyString1(“”),MyString2(“”);MyString1=“Aseriesofcharters”;MyString2=“Kuas”;

MyString3=MyString1+MyString2;

又如,

MyText=“StockName:

”Print(MyText,GetSymbolName);

将可在MessageLog出现「StockName:

TTXN」。

2.「If…Then…Else」进阶程序结构例:

IfClose>Close[1]Then

Buy20SharesatMarket;

Else

Sell10SharesatMarket;

End;

例:

IfClose>High[1]ThenBegin

Value1=10;Condition1=True;

End

ElseBegin

Value1=20;Condition1=False;

End;

 

6

3.进阶Loops结构

ForValue1=0To5Begin

Actions;End;

Variable:

MyValue(0);

ForMyValue=5DownTo1Begin

Actions;End;

以下为「Average」Function:

{*******************************************************************Description:

SimpleMovingAverage

ProvidedBy:

OmegaResearch,Inc.(c)Copyright1999

********************************************************************}Inputs:

Price(NumericSeries),Length(NumericSimple);

Variables:

Sum(0),Counter(0);Sum=0;

Forcounter=0ToLength-1Begin

Sum=Sum+Price[counter];End;

IfLength>0Then

Average=Sum/Length

Else

Average=0;

4.「While…Begin」指令写一名为「_VolumeWeek」的Indicator:

Variable:

DaysAgo(0),TotalVolume(0);TotalVolume=Volume;

DaysAgo=1;

WhileDayOfWeek(Date)>DayOfWeek(Date[DaysAgo])Begin

TotalVolume=TotalVolume+Volume[DaysAgo];DaysAgo=DaysAgo+1;

End;Plot1(TotalVolume);

Date保留字用以传回目前的Bar的日期,例如1999/01/07,则传回990107(若在2000年

后,例如2001/3/4,传回1010304)。

5.数组(Arrays)变數例如:

Array:

Prices[3](0);

宣告名为Prices的阵列变數,包含3个Element,初值均为0。

值的设定如下:

7

Prices[1]=100;Prices[2]=200;Prices[3]=300;

Array常用以储存不同Bars的值,Close、Volume等亦为Array。

 

‰策略解析举例(还可再找「RSIOscillator」、「TrendLinesAutomatic」)

藉由EasyLanguage语言可以设计交易信号,组合交易信号则形成交易策略,以下以「MovAvgCrossover」策略为例,解析策略的组成。

此策略以「黄金交叉建立多头部位,以3日(预设值,可更改亦可优化)追踪止损结清多头部位」,其为系统内置的策略,透过现成策略的解析,可以学习EazyLanguage的语法。

欲打开交易策略,可透过菜单「Go¾TradeStationStrategyBuilder」的操作(即进入TradeStation的StrategyBuilder),打开如图1的窗口。

 

图1

在图1中选取名为「MovAvgCrossover」的策略,按下「Edit」按键,可打开「Strategy

Properties」(即策略属性)的窗口,可在不同分页夹中作相关设定。

图2

图2「General」分页夹可以设定,策略名称(Name)、策略批注(Notes)、策略分析最大前置资料需求笔數(Maximumnumberofbarsstudywill)。

 

8

图3

图3「General」分页夹可以观察策略系由哪些交易信号组成,不同信号提供的交易行动(LongEntry、LongExit、ShortEntry、ShortExit等四种)设定,在此透过「Add」按键,亦可继续增减策略的信号组成,使用「Remove」按键,可移除既有的操作信号。

 

图4

图4「General」分页夹可以观察组合策略的交易信号包含哪些输入(Input)参数,并可做更动。

 

图5

图5「General」分页夹可以设定是否可以允许在现有部位继续加仓(默认为不可),若设定为可继续加仓(选取图5的检核框),则可继续设定是否允许在同一交易信号启动的部位上加

码,或只允许在不同交易信号启动的部位上加仓。

9

 

`

图6

图6「General」分页夹可以设定最多未结清部位數以及每一部位最大合约數。

由图3可知,此交易策略系由「MABullishCrossover」与「TrailingStopLX」兩交易信号(Signal)组成,欲了解这兩个信号的EasyLanguage原始码,可回到EasyLanguagePowerBuilder中,使用菜单「File¾Open」操作打开图7的窗口,下拉选取「Signal」類别。

分别找到此兩Signal档案,以「Open」按键打开,即可看到源文件。

 

图7

「MABullishCrossover」交易信号的程序代码如下:

{*******************************************************************Description:

MovingAverageCrossover(2Line)LongEntry

ProvidedBy:

OmegaResearch,Inc.(c)Copyright1999

********************************************************************}Inputs:

Price(Close),FastLen(9),SlowLen(18);

IfCurrentBar>1ANDAverageFC(Price,FastLen)CrossesAboveAverageFC(Price,SlowLen)Then

Buy("MAC")ThisBaronClose;

「TrailingStopLX」交易信号的程序代码如下:

{*******************************************************************Description:

TrailingStopLongExit

ProvidedBy:

OmegaResearch,Inc.(c)Copyright1999

********************************************************************}

 

10

Inputs:

Length(3),ShowText(False);Variables:

OrderPrice(0),StopText(0);OrderPrice=LowestFC(Low,Length);

ExitLong("Trl")NextBaratOrderPriceSt

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1