始値のみのエントリーでエラー?回避用法
- hamuo
- 2020年4月11日
- 読了時間: 4分
更新日:2020年4月13日
こんにちは。
当サイトの管理人 "はむお" です。
この記事では、始値のみでエントリーする方法、その時に出たエラー&回避策等について
紹介したいと思います。

目次
◇時間足で1回だけのエントリー方法
◇始値でエントリーできないケースと回避策
◇指定時刻の設定だけではNGなのか?
◇始値でエントリーのメリット・デメリット
◇時間足で1回だけのエントリー方法
EAを時間足あたり1回のみの動作(エントリーや決済)とするには、 以下2つの方法が候補になります。(他にもあるかもしれません)
1、時間足の形成時刻を利用する 2、時間足の本数を利用する 簡単ですが例を記載します。 足の形成時刻を使った例:
=================================== datetime Bar_farst_time = 0; ・・・ int start() { if( Bar_farst_time==Time[0] ) { return(0); } else if( Bar_farst_time != Time[0] ) { Bar_farst_time = Time[0]; } ~☆☆☆~
=================================== <Time[]は、その足の形成時刻を格納しています> 動作説明: EA起動時、Bar_farst_timeは、"0"が格納されています。 その足の形成時刻(time[0])とはズレているので、return(0) にはいかず
else へ進みます。
Bar_farst_time に、Time[0](その足の形成時刻)を入れます。 続けて、その下の記述 ~☆☆☆~ へ進みます。
(☆☆☆はエントリーや決済のロジック部分です) 次のtickでは、Bar_farst_timeとTime[0]が同じであるため、 return(0)で抜けます。 新しい足が形成されるまでは、return(0)で抜けるため、 その足では1回だけの動作 となります。 EAを初めて適用した時は、条件(☆☆☆の部分)が合う場合、 一度だけ実行されます。(始値でなくとも実行される) 新しい足の形成後は、始値で実行されます。 時間足の本数(bars)を利用した場合も、上記と同じ考え方で実現できます。

◇始値でエントリーされないケースと回避策
上記の方法で、EAを作成したところ、 エントリー条件は合っているのに、エントリーしない現象が発生しました。 日足で動作させていたEAだったのですが、 原因は、"ロールオーバー" でした。 ロールオーバーの処理の間(サーバー上の時間で0時0分から数分間程)は、 市場CLOSE扱いとなり、注文が通らないようです。・・なぬー( ;∀;)
(エラー番号132が出ていました) 同じような目にあっている方をNetで見つけ、回避方法を参照したところ、 for文を使って、注文が通るまで時間をおいて繰り返し発注する という処理を されているようでした。なるほど! 私も真似しようかと思ったのですが、別の回避方法で試してみることにしました。
~回避策~
試行錯誤の結果、"時間指定" で回避できました。 サーバー上の0時0分 で取引したいのですが、その時刻は弾かれてしまいますので、 そこから5分後の0時5分で取引する としました。 時間足の中で1度だけ、という処理を残したかったので、
以下のような記述を追加しました。
時間指定を追加した例: =================================== extern int EntryHour = 0; //追加部分 extern int EntryMinute = 5; //追加部分 datetime Bar_farst_time = 0; ・・・ int start() { if( Bar_farst_time==Time[0] ) { return(0); } else if( Bar_farst_time != Time[0] ) { Bar_farst_time = Time[0]; if( TimeHour(TimeCurrent()) == EntryHour && TimeMinute(TimeCurrent()) == EntryMinute ) //追加部分 { ~☆☆☆~
===================================
これで、先ほどの処理に加えて、"指定時刻になったら、☆☆☆ が実行される"
ことになります。
また、EAの適用チャートを5分足に変更し、テクニカル上での時間足を日足に変更しました。
(1~2分間、tickが動かない場合もありましたので、1分足のチャートはやめにしました)
今のところ、5分間1度もtickが動かない ということはなさそうでしたので、 5分足で大丈夫かなと思っています。(状況によって15~30分足に変更します)

◇指定時刻の設定だけではNGなのか?
Time[]やBars[]を使わずに、指定時刻の設定だけではNGなのか?を試してみました。
(その時刻になったら、1回だけ動作する ということをやりたいです)
適当な時刻(△時◇分◎秒)を指定したところ、結果、3つポジションを持ってしまいNGでした。その時刻の1秒間に、3回tickが動いた という事だと思います。 早いですねぇ(;´Д`) 時間帯によってはもっと動くのかも。

◇始値でエントリーのメリット・デメリット
・始値のみで動作するEAの場合、過去検証では "始値のみ" で 実行できるため、検証時間がとっても短いです。
最適化の実行時間も短縮されます。
・前の足が確定してからのエントリーとなるため、
例えば日足を使ったEAであれば、一日中チャートを見ている
必要は無くなります。
(相場が急変動するような状況には、注意が必要です)
・素早い値動きに追従することはできませんので、
コンマを争うようなスキャルピングEA等には使えないと思います。

Comments