“交易开拓者 序列变量”是一个在量化交易领域描述特定类型变量的概念。 要理解这个概念,我们需要逐层分解:
“交易开拓者 序列变量”实际上指的是在TradeStation平台的EasyLanguage编程环境中,那些随着交易时间推移而储存一系列数值的变量。 这些变量对于追踪历史数据、进行技术分析和开发自动化交易策略至关重要。 它们不同于简单的数值变量或字符串变量,因为它们保存了时间序列数据,可以访问历史数据点。例如,可以获取前一根K线的收盘价,也可以获取某个自定义指标的历史值.
在EasyLanguage中,序列变量的声明方式与普通变量略有不同,需要使用关键字`var`或`variable`后跟序列变量的类型。 EasyLanguage内置了很多序列变量,比如收盘价(Close)、开盘价(Open)、最高价(High)、最低价(Low)、成交量(Volume)、时间(Time)等。这些内置序列变量可以被直接使用,而无需声明。

而自定义序列变量,其类型通常为数值类型,如`NumericSeries`或者简单的`Numeric`。 例如:
```EasyLanguage
variables:
AvgClose(0), //自定义序列变量AvgClose,初始值为0
MySeries(0); //自定义序列变量MySeries,初始值为0
AvgClose = Average(Close, 10); //计算10根K线收盘价的平均值,并将结果存储在AvgClose序列变量中
MySeries = AvgClose + 5; //将AvgClose序列变量中的值加上5,并将结果存储在MySeries中
```
上述代码段中,`AvgClose`和`MySeries`都被声明为序列变量,并且它们的值会随着每根K线的变化而更新。 访问历史数据可以使用方括号`[]`运算符。 例如,`Close[1]`表示前一根K线的收盘价,`Close[10]`表示10根K线之前的收盘价。 通过方括号运算符,能够轻松地访问序列变量在不同时间点的值,从而进行复杂的计算和分析。 序列变量还能够被Plot函数用来在图表上绘制线段,直方图等。
序列变量是技术分析的基础。 几乎所有的技术指标都是基于序列变量计算得出的。 例如,移动平均线(Moving Average)的计算需要使用收盘价(Close)这个序列变量,并对其进行平均计算。 相对强弱指标(RSI)的计算则需要用到收盘价的涨跌幅度,同样需要用到序列变量。
```EasyLanguage
Inputs:
Length(14); //RSI指标的计算周期
Variables:
AvgGain(0), //平均上涨幅度
AvgLoss(0), //平均下跌幅度
RS(0), //相对强度
RSI(0); //相对强弱指标
//计算平均上涨幅度
If Close > Close[1] Then
AvgGain = (AvgGain[1] (Length - 1) + (Close - Close[1])) / Length
Else
AvgGain = (AvgGain[1] (Length - 1) + 0) / Length;
//计算平均下跌幅度
If Close < Close[1] Then
AvgLoss = (AvgLoss[1] (Length - 1) + (Close[1] - Close)) / Length
Else
AvgLoss = (AvgLoss[1] (Length - 1) + 0) / Length;
//计算相对强度
If AvgLoss <> 0 Then
RS = AvgGain / AvgLoss
Else
RS = 0;
//计算相对强弱指标
RSI = 100 - (100 / (1 + RS));
Plot1(RSI, "RSI"); //在图表上绘制RSI指标
```
上述代码展示了如何使用序列变量计算RSI指标。 代码中,`AvgGain`、`AvgLoss`、`RS`和`RSI`都是序列变量。 通过访问收盘价`Close`及其历史值`Close[1]`,可以计算出RSI指标的值,并在图表上进行显示。 几乎所有的技术指标,例如MACD,布林线,Stochastic等等,都需要使用序列变量进行计算。
序列变量在自动化交易策略中发挥着至关重要的作用。 自动化交易策略需要能够基于历史数据进行决策,而序列变量提供了访问历史数据的途径。 例如,一个简单的移动平均线交叉策略可能会用到两个移动平均线,一个是短期移动平均线,另一个是长期移动平均线。 当短期移动平均线上穿长期移动平均线时,策略会产生买入信号;当短期移动平均线下穿长期移动平均线时,策略会产生卖出信号。
```EasyLanguage
Inputs:
ShortLength(10), //短期移动平均线周期
LongLength(20); //长期移动平均线周期
Variables:
ShortMA(0), //短期移动平均线
LongMA(0); //长期移动平均线
ShortMA = Average(Close, ShortLength); //计算短期移动平均线
LongMA = Average(Close, LongLength); //计算长期移动平均线
If CrossAbove(ShortMA, LongMA, 1) Then //如果短期移动平均线上穿长期移动平均线
Buy("MA Crossover"); //买入
If CrossBelow(ShortMA, LongMA, 1) Then //如果短期移动平均线下穿长期移动平均线
Sell("MA Crossover"); //卖出
```
上述代码展示了一个简单的移动平均线交叉策略。 `ShortMA`和`LongMA`都是序列变量,它们分别存储了短期移动平均线和长期移动平均线的值。 `CrossAbove`和`CrossBelow`函数用于检测两个序列变量是否发生交叉。 当发生交叉时,策略会产生相应的交易信号。 序列变量在自动化交易策略中可以用来实现各种复杂的交易逻辑,例如追踪止损,突破交易,反转交易等等。
虽然序列变量在EasyLanguage中非常强大,但也存在一些局限性。 序列变量会占用内存空间,如果策略中使用了大量的序列变量,可能会影响程序的性能。 访问历史数据时需要注意数组越界的问题。 例如,如果访问`Close[-1]`,会导致程序出错。EasyLanguage允许访问未来数据,比如`Close[-2]`,但是需要谨慎使用.
在使用序列变量的时候,需要注意以下几点:
初始化: 在声明序列变量时,最好对其进行初始化,以避免出现未定义的行为。
数组越界: 避免访问超出数组范围的历史数据。 使用`If CurrentBar > N then ...` 条件语句可以预防访问不存在的历史数据.
内存管理: 合理使用序列变量,避免过度使用,以提高程序的性能。
数据类型: 根据实际需求选择合适的数据类型。
引用方式: 了解EasyLanguage中传值和传引用两种引用方式。序列变量作为函数参数时,默认是传引用,这会改变序列变量本身,如果函数内部不希望对变量进行修改,请使用传值。
EasyLanguage中除了序列变量外,还有其他类型的变量,例如数值变量和字符串变量。 数值变量(Numeric)和字符串变量存储的是单一的值,而序列变量存储的是一系列的值。 数值变量和字符串变量的值可以被直接赋值,而序列变量的值通常需要通过计算或从历史数据中获取。
例如:
```EasyLanguage
variables:
MyNumber(10), //数值变量 MyNumber, 初始值为10
MyString("Hello"); //字符串变量 MyString, 初始值为 "Hello"
MyNumber = MyNumber + 5; //将 MyNumber 的值加 5
MyString = "World"; //将 MyString 的值改为 "World"
```
`MyNumber`和`MyString`都只存储一个值,而序列变量例如`Close` 则存储了每一根K线的收盘价。 序列变量可以被看作是一个数组,可以访问其中的每一个元素,而数值变量和字符串变量则不能。 序列变量的特性使其非常适合处理时间序列数据,并进行技术分析和自动化交易。
而言,“交易开拓者 序列变量”指的是在TradeStation的EasyLanguage中,用于存储随时间变化的数据的变量。 它们是进行技术分析和开发自动化交易策略的基础。 理解序列变量的概念、声明方式、应用场景和注意事项,能够帮助交易者更好地利用TradeStation平台进行量化交易。
上一篇