2018年7月30日月曜日

発注ルーチンの考察

発注に関しては戻り値を無視してのOrderSendをよく使用します。
理由は二つです。
①発注の失敗をほとんど見たことがない
②発注に失敗しても次回のティックで発注するだろう

①について
同じEAを同じブローカーでたくさんまわしています。
発注が足りないことがかなりよくあります。
しかし、エキスパートなどにエラーが書き込まれていません。
これはOrderSendが失敗したのではなくティック配信が届いていないと考えられます。

発注の失敗をみたのはAMSERの注文が集中した時くらいです。

②について
一定の条件を満たすと発注するのですが、例えばRSIが30を下回ったらロングでエントリーします。
ここで発注に失敗した時に無抵抗で何もしません。
次のティックがきた時に同じ条件下(RSIが30を下回っている)なら発注すればいいし、条件が変わっていなければ発注しなくてもいいと考えています。

EAによっては発注を失敗(OrderSend由来)した時に再発注したい時があります。


色々な書き方がありますが、発注失敗したら5回繰り返す場合を作成しました。
引数受け取りに見せかけて変数の宣言、代入をしています。


void EntryLong(int cnt=5)
{
if(OrderSend(Symbol(),OP_BUY,1,Ask,5,0,0)==-1&&cnt>0)EntryLong(cnt-1);
}
シンプルですがこの場合必ず関数を作成する必要があります。

今度はwhileを使用します。

void EntryLong2(int cnt=5)
{
while(OrderSend(Symbol(),OP_BUY,1,Ask,5,0,0)==-1&&cnt>0)cnt--;
}

こちらの場合cntを宣言、代入しておけばwhile内で完結しているので関数を作る必要がありません。文字数も節約できます。




余談ですがMZ-721にはHu-BASIC(ハドソン作成マイクロソフト系)とS-BASIC(SHARP系)が付いていました。
マニュアルには両方ともwhileはなかったのですが、Hu-BASICは使用できました。
ハドソンは進んでいましたね~みそらーめんグループまだあるのかな



0 件のコメント:

コメントを投稿