simulator

オートレを解剖する -移動平均線-

バックテストをしていて、ある発見をした。

オートレの移動平均線と自分の移動平均線が一致しない

と思わる現象が発生。

オートレの移動平均線が直接確認できるわけではないので、憶測になるし、

内部の計算方法が詳細に公開されているわけではないので、真実はわからない。

しかし、オートレの移動平均線と自分の移動平均線が違うということだけは、

自信が持ててきた。

自分を含めて、通常は、四本値の本数で移動平均線を計算する。

5分足の25SMAなら、5分足の四本値を作って、その終値を25個足して、その値を25で割る。

ここで、引けの値もこの足としてカウントされるということがミソ。

一方、オートレの移動平均線を間接的に確認すると、

どうやら引けの四本値を含めていないか、5分以下の足からその平均を計算していると思われる。

例えば、1分足から5分足の25SMAを計算するなら、1分足を125本足してその平均を求めるという方法。

これが、引けの値の処理方法で結果として変わってくる。

今後、どのようにバックテストを検討していくかは、もちろん前者の一般的なやり方を採用していく。(オートレの方法ではない)

オートレに実装した場合にずれが生じるのは間違いないが、

自分のメインは岡三RSSだし、ほかのシステムを利用することになっても前者の方が利用しやすいから。

なんで、こんな細かいこと気にしてるの?ってなるかもだけど、

プロバックテスターとしては重要な問題。

繰り返しになるが、オートレの内部処理の真実はわかりません。

simulatorのキーワードマニュアル

このページでは、simulatorで利用するキーワードを説明する

現在用意されいるキーワードは以下である

  • *control_DOW
  • *control_file
  • *control_hold
  • *control_PEEK
  • *control_profit
  • *control_RSI
  • *control_RST
  • *control_simulation
  • *control_SMA
  • *control_term
  • *control_termination
  • *control_values
  • *control_VOLPOT
  • *define_environment
  • *define_entry
  • *define_order
  • *include

以下より、各キーワードの詳細説明

*define_order

オートレ225のバックテスト用に開発。このキーワード1つで1つの注文を定義する。
注文内に複数のand条件がある場合は、1つのキーワード内で定義しておく。
*define_orderは重複して設定可能なキーワードである。
注文が複数ある場合(すくなくとも新規注文と決済注文の2つはあるはず)は、新たにdefine_orderを定義する。 例えば2つの注文がある場合は、define_orderを2つ定義することになる。
注文処理順序は、define_orderの定義順序となる。 条件の処理順序は、条件を定義した順序となる。 条件を指定するオプション(termAa,Ab,Ba,Bb)の番号は、デフォルトでは条件一覧(別紙)に従う。 より正確にはcontrol_termで変更可能(非推奨)。
例)当日価格関連の現在値:termAa=1,termAb=1

キーワード内の規則について
キーワード内のカラム(列)は次の順序で読み取られる
oid bs quan oprice nterms offprc cnctime
2行目以降のカラムは次の順序で読み取られる。2行目以降の読み取り行数はntermsに従う。
termAa termAb termBa termBb termC termD

oid 注文予約のid番号(現在は使われていない)
bs 売買の選択
bs = 11 新規売り
bs = 12 返済売り
bs = 31 新規買い
bs = 32 返済買い
quan 取引枚数
quan = -1 全残数(返済時)
quan .ge. 1 取引枚数=quan. (ただし、現在は1枚のみに対応)
oprice 発注価格の指定。指値と成行を指定。(未開発)
oprice = 1 指値発注
oprice = 2 成行発注
nterms 条件の個数。ここで指定した個数分のtermA,B,C,Dを記述必要がある。

offprc オフセット指値の値。正の値を入力し、買いポジションなら現在値-offprc、売りポジションなら現在値+offprcで指値注文をだす。成行の場合は0以下とする。

cnctime オフセット指値注文した際のキャンセル時間の指定。値はシリアル値を使用。ただし、場が終わると時間にかかわらずキャンセルされる。


termA 「が」を指定。指定方法は条件一覧に従う 例)現在値が termA=111
termB 「の」を指定。指定方法は条件一覧に従う 例)直近60分足高値の
termC 「値」を指定 例)-100
termD 「以上、以下」を指定
termD = 1 以下
termD = 3 以上

*control_EMA

指数平滑移動平均線を制御するキーワード

キーワード内の規則について
キーワード内のカラム(列)は次の順序で読み取られる

gap 寄りの窓を埋める
gap .eq. 0 使用しない
gap .eq. 1 使用する

VM VM(=volume method : 出来高手法)の制御。VMは横軸に出来高を取った場合で計算する。
VM .eq.0 使用しない
VM .eq.1 使用する

VMn 横軸の一単位あたりの出来高数

*control_file

入力や出力のファイル制御に関するキーワード

キーワード内の規則について
1行目のカラム(列)の読み取り
inpfile
2行目のカラム(列)の読み取り
outfile

inpfile 足データのファイル名。足データを読み込むことでバックテストを可能にする。1分足のデータを想定して開発されているが、その限りではない。
ただし、1分足以外の場合は、control_termやconrol_smaを付随して変更する必要がある。
inpfileが実行ファイルと別のフォルダにある場合、windowsでは「’」「’」で囲む必要がある。
outfile 結果の書き出しファイル名。

*control_MACD

MACD(=moving average convergence and divergence)を制御するキーワード

キーワード内の規則について
キーワード内のカラム(列)は次の順序で読み取られる

macdid macdの管理番号

curveA MACDを計算する際のcurveA。計算式は下記参照
curveA .eq.1 control_SMAで定義したcurveを利用
curveA .eq.2 control_EMAで定義したcurveを利用

curveidA curveA内のid番号。

curveB MACDを計算する際のcurveB。計算式は下記参照
curveB .eq.1 control_SMAで定義したcurveを利用
curveB .eq.2 control_EMAで定義したcurveを利用

curveidB curveB内のid番号。

signal signalの利用フラグ。
signal .eq.0 signalを計算しない(MACDとなる)
signal .eq.1 signalを計算する(MACDとならない)。signalの計算は単純移動平均(SMA)を用いる
signal .eq.2 signalを計算する(MACDとならない)。signalの計算は指数平滑移動平均(EMA)を用いる

signalN signal.ge.1の時に有効。signal の計算に使用するN数

MACD=curveA-curveB
signal=SMA(MACD,signalN)

*control_simulation

シミュレーションの基本動作を設定するキーワード

キーワード内の規則について
キーワード内のカラム(列)は次の順序で読み取られる

1行目のカラム(列)の読み取り
nsim icheck osim ostep ostart oend
2行目のカラム(列)の読み取り
contract slip cost

例)
*control_simulation
$ nsim icheck osim ostep ostart oend
1 0 1 1000 1 30000000
$ contract
5.0

nsim シミュレーションの個数(現在は使われない)

icheck 詳細出力のオプション
ichech=1 詳細出力はなし
ichack.ge.1 isim番目の詳細を出力

osim 出力オプション
osim=0 出力なし
osim=1 dtstep間隔で出力
osim=2 セッションごとに出力(合計)
osim=3 セッションごとに出力(小計)

ostep ファイル書き出しするステップ間隔

ostart 書き出しの開始ステップ

oend 書き出しの終了ステップ

contract 約定判定の判定価格。指定の価格に対してcontract分だけ不利な分の価格変動があった場合に約定できたとする。例えば、contract=5とした場合、20000円で買い注文をいれているとき、19995円になれば約定できたとみなす。
contract=0の場合、いつでも指定の価格で理想的に約定できることになる。
contract=0の場合は、とくにスキャルピングにおいてバックテストの結果が非常に良くなることがある。しかし、現実は指定の価格を下回る(上回る)場合に約定できることがおおい。その現象を再現するために導入された機能。推奨はcontract=5。contract=5で勝てるロジックを追求するのが望ましい。

slip (未実装) スリッページの指定。

cost (未実装)手数料の指定。

*contrrol_termination

終了条件を設定するキーワード

nstep 終了するステップ数。読み込んだデータより多い場合は機能しない

dstep コマンドラインに出力するステップ間隔。ファイル出力の間隔とは違う。

duse 4本値のどれでバックテストを行うか
duse=1 始値,高値,安値,終値でエントリーと利確を探索。探索順序は始値,高値,安値,終値
duse=2 高値,安値,終値でエントリーと利確を探索。探索順序は高値,安値,終値
duse=3 安値,終値でエントリーと利確を探索。探索順序は安値,終値
duse=4 終値でエントリーと利確を探索。探索順序は終値

*control_term

発注条件を指示する項目を制御するキーワード。オートレ225のバックテストをするために開発された。

キーワード内の規則について
キーワード内のカラム(列)は次の順序で読み取られる

nterm define_orderで使用するtermの定義個数 term_a カテゴリの定義番号 term_b 値項目の定義番号 category term_aとterm_bの組み合わせの時の使用するカテゴリ番号。以下の中から選択する。          5,6,7,8はcontrol_でその動作を指定する。
1=quote
2=time
3=hold
4=profit
5=value
6=SMA
7=MACD
8=RSI
9=BollingerBand
10=stochastic
11=DMI
cateid categoryで指定したcontrol_*内のid番号。
例えばcategory=5のときcateid=vidを示すことになる
Cofset 必要な場合に指定。オフセットする量
Cofset=0 その瞬間の値または確定前の値。または不要な場合。
Cofset=1 直近または前日
Cofset=2 1本前または2日前
Cofset=3 2本前
Coffse=4 3本前
Cadd 必要になる場合の追加のオプション。
         category=5 の場合、Caddは4本値の種類を示す。
Cadd=1 始値
Cadd=2 高値
Cadd=3 安値
Cadd=4 終値

*control_values

4本値を制御するキーワード

キーワード内の規則について
キーワード内のカラム(列)は次の順序で読み取られる

nval 4本値の定義個数
oval 4本値の出力オプション
oval=0 ファイル出力なし
oval=1 out_values.datを出力
vid 4本値の定義ID番号
peri 四本値の作成期間.例えば1分足を読み込んでいる場合の5分足を作成する場合は、peri=5とする
vsec セッションをまたぐ際の区間の取り扱いオプション
vsec=0 考慮しない
vsec=1 セッションをまたぐときに、4本値を一度区切る
vsec=2 取引日(16:30~翌15:15)をまたぐときに、4本値を一度区切る
vsec=3 営業日(8:45~翌5:30)をまたぐときに、4本値を一度区切る

*include

他のファイルを読み込むためのキーワード。指定したファイル名を追加で読み込む。

*control_PEEK

HL peekの山谷の探索側。
yPEEK=1 谷を探索。
yPEEK=3 山を探索。

vid peek作成に使用する四本値のカーブid番号.

LPEEK 探索時のlaplasinaオプション
LPEEK=0 off
LPEEK=1 on

aPEEK 探索範囲パラメータ。smaの範囲の値

*control_VOLPOT

出来高ポテンシャルを制御するキーワード。
VolPot用に開発。

キーワード内の規則について
キーワード内のカラム(列)は次の順序で読み取られる

nVP oVP oVPstep puse
vpid vptm L1 Lm P1 Pm TS1 TSp

nVP シミュレーション個数

oVP 出来高ポテンシャルの状態出力オプション
.eq.0 出力しない
.eq.1 型式を出力
.eq.2 型式、各サイン、エントリ価格、損切価格、利確価格

oVPstep 出来高ポテンシャルを出力するステップ数。oVP.ge.1のときに有効

puse 利確損切の利益計算方法
puse=1 指定の利確、損切値を損益計算に採用(未実装)
puse=2 決済タイミングでの終値を損益計算に採用

vpid 使用する出来高ポテンシャルの固有番号。*define_volumepotentialで指定する。

vptm 保有期間
vptm=1 セッションをまたがない
vptm=2 セッションをまたぐ(未実装)
L1 最小損切
Lm 最大損切
P1  最小利確
Pm 最大利確
TS1 TS価格(未実装)
TSp TS%(未実装)

*define_VOLPOT

出来高ポテンシャルを定義するキーワード

キーワード内の規則について
キーワード内のカラム(列)は次の順序で読み取られる

vpid vid vptermS vptermE vptermD vidD
dVP dVPa dVPf dVPsma
kvph11 kvph12 kvph13 kvph14 kvph15 kvph16 kvph17 kvph18 kvph19 kvph110
kvph21 kvph22 kvph23 kvph24 kvph25 kvph26 kvph27 kvph28 kvph29 kvph210
vph11 vph12 vph13 vph14 vph15 vph16 vph17 vph18 vph19 vph110
vph21 vph22 vph23 vph24 vph25 vph26 vph27 vph28 vph29 vph210
vph31 vph32 vph33 vph34 vph35 vph36 vph37 vph38 vph39 vph310
vph41 vph42 vph43 vph44 vph45 vph46 vph47 vph48 vph49 vph410
kvph31 kvph32 kvph33 kvph34 kvph35 kvph36 kvph37 kvph38 kvph39 kvph310
vph51 vph52 vph53 vph54 vph55 vph56 vph57 vph58 vph59 vph510
vph61 vph62 vph63 vph64 vph65 vph66 vph67 vph68 vph69 vph610

vpid vpidの番号
vid 出来高ポテンシャルの作成に使用する4本値のカーブ番号
vptermS ポテンシャル開始を指定する。
.ge.1 5日間のデータから開始する場合(未実装)
.lt.0 利用されない
vptermE ポテンシャル終了を指定する。vptermSが0以下の場合、取得本数を指定。
vptermD 基準期間(日)
dVP 分割数
dVPa 平均範囲
dVPf 分割方法
dVPsma 追加の平均個数

vpp1 極小切り捨て割合
vpp2 出来高比a
vpp3 出来高比b
vpp4 出来高比c

kvph11 利用の有無(1の型)
kvph21 極小個数(1の型)
vph11 価格幅率a(1の型)
vph21 価格幅率b(1の型)
vph31 価格幅率c(1の型)
vph41 エントリ極小比(1の型)
kvph31 エントリポジ方向(1の型)
vph51 損切極小比(1の型)
vph61 利確極小比(1の型)

============================

*define_orderに関する補足

「建て後損益/価格差での損益」に関する特殊処理

この項目を選択した場合で、かつ、次を満たす場合は、termCの値をそのまま損益に計算する。これは、固定の利確幅や損失幅(LC)を設けた場合、その価格に到達したときには、その指定価格が損益に加算されることを想定している。

利確値または損失値に到達したかの判断は、1分足の始値、高値、安値、終値の順で判断する。

ここで、始値で条件を満たした場合に限り、termCの値を使わない。損益値は始値と建値の差分で評価する。これは、寄り付きのときのギャップや、瞬間的に窓を開けた場合に対応するようにしている。

ポジションを持っていること

termBに指定がないこと(なしの指定)

termAbが1であること。

ここで、termAbが2の場合は、1分足の始値のみで価格差を判定する。

建て後ピークまたは、建て後ボトムでの判定

建て後ピークと建て後ボトムは、その条件を満たした場合に始値で損益を評価する。この場合、スリッページが発生することがある。

以下、未実装なキーワード

*control_RST

レジスタンス サポート トレンド 法
nRST RST法の個数
oRST RST法の出力オプション
stRST RST法の戦略
stRST=0 no use
stRST=1 RS1のサポートとレジスタンス比率がpRST以上の時を買いの環境認識とする

enRST RST法のエントリー方法
enRST=0 環境認識にすべて従う
enRST=1 ・・・が・・・になったとき
enRST=2 ・・・が・・・になったとき
enRST=3 ・・・が・・・になったとき
enRST=4 ・・・が・・・になったとき

RSi 使用するi番目のPEEK番号

*define_environment

envid id番号
envst 環境認識のストラテジー方法の選択
envst=1 dow理論
envst=2 macd
envst=3 bollinger band

*define_entry

entid id番号
entst エントリータイミングのストラテジー方法の選択
entst=1 dow理論

*control_DOW

ダウ理論に基づく条件判定