藉此,可让多组买卖信号同时存在。
至于部位结清部位,可使用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