[EasyLanguage]ストラテジーのコードを読み解く(トレードステーション)
公開日:
:
株式自動売買開発 TradeStation, トレードステーション
目次/もくじ
移動平均線のクロスのストラテジーのプログラミングを見ていきたいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
inputs: FastPrice( Close ) [DisplayName = "FastPrice", ToolTip = "Enter an EasyLanguage expression to use in calculation of shorter length moving average."], SlowPrice( Close ) [DisplayName = "SlowPrice", ToolTip = "Enter an EasyLanguage expression to use in calculation of longer length moving average."], FastLength( 9 ) [DisplayName = "FastLength", ToolTip = "Enter number of bars to use in calculation of shorter length moving average."], SlowLength( 18 ) [DisplayName = "SlowLength", ToolTip = "Enter number of bars to use in calculation of longer length moving average."]; variables: FastAvg( 0 ), SlowAvg( 0 ); FastAvg = AverageFC( FastPrice, FastLength ); SlowAvg = AverageFC( SlowPrice, SlowLength ); { CB > 1 check used to avoid spurious cross confirmation at CB = 1 } if CurrentBar > 1 and FastAvg crosses over SlowAvg then Buy ( !( "MA2CrossLE" ) ) next bar at market; |
思っていたより短いですね。
これがすべてのソースコードです。
これが、inputパラメータの記述です。
1 2 3 4 5 6 7 8 |
FastPrice( Close ) [DisplayName = "FastPrice", ToolTip = "Enter an EasyLanguage expression to use in calculation of shorter length moving average."], SlowPrice( Close ) [DisplayName = "SlowPrice", ToolTip = "Enter an EasyLanguage expression to use in calculation of longer length moving average."], FastLength( 9 ) [DisplayName = "FastLength", ToolTip = "Enter number of bars to use in calculation of shorter length moving average."], SlowLength( 18 ) [DisplayName = "SlowLength", ToolTip = "Enter number of bars to use in calculation of longer length moving average."]; |
移動平均線2本のクロスなので、短期と長期のそれぞれの期間と
計算に使うHLOCを選択します。
ここはインジケーターのときにも触れたので問題はないと思います。
Closeは現在の終値、すなはち現在レートを表します。
一つ前の足を参照する場合はClose[1]です。
MQL4に近いですね。
MQL5より100倍マシだと思います。その後改善されてましになりました。
Open,High,Lowも同様に使えます。
1 2 3 4 5 6 |
variables: FastAvg( 0 ), SlowAvg( 0 ); FastAvg = AverageFC( FastPrice, FastLength ); SlowAvg = AverageFC( SlowPrice, SlowLength ); |
次に移動平均線の値の箇所です。
AverageFCは組み込み関数で、単純平均を行います。
FCはおそらく、fast calculate の略だと思います。
パラメータ
Price 数値 価格、関数および公式のうち、バーのどの値を使用するかを指定します。
Length 数値 考慮するバーの数を設定します。
最後にメインの箇所です。
1 2 |
if CurrentBar > 1 and FastAvg crosses over SlowAvg then Buy ( !( "MA2CrossLE" ) ) next bar at market; |
MQLのようにループ関数(Ontick,Oncalculate,Start,OnStart)の中にメインとなる記述をするわけではありません。
CurrentBarは、現在評価されている足の数を返します。
チャートの各足に番号が割り当てられ、番号は後続の足のそれぞれについて 1 ずつ増分されます。
crosses over は、文字通りクロスオーバーしたらという条件文です。
さすがトレード専用に開発された言語だけありますね。(てか、三人称単数現在も反映するのね)
Cross または Crosses の後には、常に、Above、Below、Over、または Under が続きます。
オーダーはBuyのみで行われるので、プログラム側でロットの変更やオーダー種別の指定はできません。
まだ、なかなかEasyLanguageに慣れるまではいかないと思いますが、
あと何回かサンプルに触れれば、だいたいの雰囲気はつかめると思います。
TicksとVolumeの違い
FXの場合、ティックとボリュームはほぼ同義語ですが、
株の場合はちょっと違います。
Volume アップティックで取引された出来高
Ticks 合計出来高
UpTicks アップティックで取引された出来高
DownTicks ダウンティックで取引された出来高
OpenInt ダウンティックで取引された出来高
インジケーターで一応チェックすると、
1 2 |
Print("tick",Ticks[10]); Print("volume",Volume[10]); |
違いがわかります。
tick 15186679.00
volume 5637100.00
なんでVolumeをアップティックに限定しているのか意味不明です。UpTicksがあるならUpTicksを使えばいいと思うの。
補題 TradeStationの演算タイミング
MetaTraderではバックテストの際に、始値、コントロールポイント、全ティックを選択できますが、
TradeStationの場合は始値の更新タイミングでしか演算できません。
つまり、ブレイクアウトなどの手法を使う場合、
成行注文だと約定レートが大きくずれる可能性があります。(多分)
インジケーターのコード上でプロパティ設定
EasyLanguageのインジケーターの線の太さや色などのプロパティは
基本的にはプロパティ画面で設定します。
しかし、MQLのようにソースコード上での指定も可能です。
ソースコード上にないのに色や太さなどが定義されているのは
少し感覚的に気持ち悪いので、コード上で指定したいと思います。
1 2 3 4 |
SetPlotColor(プロット番号,色); //価格チャートまたはグリッド内の特定プロットの色 SetPlotWidth(プロット番号, 太さ); //指定したプロットの幅 SetPlotBGColor(プロット番号, 色);//特定のレーダースクリーンセルの背景プロット色を変更 SetPlotType(プロット番号, DataType);//通常はレーダースクリーンセル内の、指定したプロットのデータタイプ |
プロット番号は、PlotXのXです。
1~99まで可能です。(なんで0からじゃないの)
DataTypeは
名前 値
ptDate 25
ptDateTime 27
ptDouble 28
ptFloat 29
ptInvalid 3
ptProbability 4
ptString 2
ptTime 26
ptTrueFalse 1
から指定します。
リペイントとは
MetaTraderではインジケーターのEA化をすることがよくありますが、
その際にリペイントがあると比較的問題になります。
リペイントとは一度シグナルを出した後に、そのシグナルを修正したり、消したりすることです。
これをされると、シグナルに応じてエントリーしたのに、
あとでチャートを確認するとシグナルが消滅していてクレームになることがあります。
リペイントをすると過去チャートのチャート分析のときには
そのシグナルがすごい優秀に見えますが、結局は”後だしジャンケン”なので、
何の役にも立ちません。
TradeStationの場合もリペイントがあります。
1 |
NoPlot(Num) |
こいつが戦犯です。
これの恩恵で一度表示したシグナルを消すことができます。
カッコ内の番号はプロットの番号です。ロウソク足の場所の番号ではありません。
ただし、この関数は現在足にしか効かないので、
過去にさかのぼって消すことはできません。
つまり、TradeStationの場合、現在足でのみリペイントが発生する可能性があり、
それだけ警戒すればOKです。
サンプル
1 2 3 4 |
If High < Low of 1 Bar Ago Then Plot1(Low, "GapDown") Else NoPlot(1) ; |
関連記事
-
日本株の個別銘柄でシステムトレード検証&自動売買(ダウンロードあり)
MT4/MT5というとFXでのトレードプラットフォームの印象が強いですが、株のトレードも可能です。特
-
トレードステーションの使い方(初心者)
トレードステーションのチャートの表示方法 TradeStation/トレードステーションは、Met
-
初心者のためのEasyLanguage入門(トレードステーション)
これからトレードステーションのストラテジーを開発するためにEasyLanguageをやってみようとい
-
株の自動売買プログラムを開発する6つのやり方
FX業界ではMT4/MT5のおかげもあり、個人レベルでも自動売買やシステムトレードが盛んにおこなわれ
-
[EasyLanguage]パーフェクトオーダーを作る(トレードステーション)
今回は久々にプログラミングを触ります。 TradeStationはデフォルトで比較的なインジケータ