top of page

始値のみのエントリーでエラー?回避用法

  • 執筆者の写真: hamuo
    hamuo
  • 2020年4月11日
  • 読了時間: 4分

更新日:2020年4月13日

こんにちは。


当サイトの管理人 "はむお" です。

この記事では、始値のみでエントリーする方法、その時に出たエラー&回避策等について

紹介したいと思います。


ree
目次

◇時間足で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)を利用した場合も、上記と同じ考え方で実現できます。



ree


◇始値でエントリーされないケースと回避策


上記の方法で、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分足に変更します)



ree


◇指定時刻の設定だけではNGなのか?


Time[]やBars[]を使わずに、指定時刻の設定だけではNGなのか?を試してみました。

(その時刻になったら、1回だけ動作する ということをやりたいです)


適当な時刻(△時◇分◎秒)を指定したところ、結果、3つポジションを持ってしまいNGでした。その時刻の1秒間に、3回tickが動いた という事だと思います。 早いですねぇ(;´Д`) 時間帯によってはもっと動くのかも。


ree

◇始値でエントリーのメリット・デメリット


・始値のみで動作するEAの場合、過去検証では "始値のみ" で  実行できるため、検証時間がとっても短いです。

 最適化の実行時間も短縮されます。

  ・前の足が確定してからのエントリーとなるため、  例えば日足を使ったEAであれば、一日中チャートを見ている  必要は無くなります。  (相場が急変動するような状況には、注意が必要です)

・素早い値動きに追従することはできませんので、

 コンマを争うようなスキャルピングEA等には使えないと思います。


ree


Comments


©2020 by 脱サラリーマンによるFX EA開発ノート

bottom of page