昨日はさぼってしまったので反省。
気を取り直して作成していく。
EAにて毎Tickごとに注文することができたが、次はローソク足が新しく
作られた時に注文しようと思う。
ローソク足はBars関数にて数量を管理している。
Bars関数にて取得した値を適当な変数(仮barnum)に格納して、
Bars() > barnum の条件を付けてあげれば、
ローソク足が更新されたタイミングで注文できるのでは?
Bars関数にて取得しようとしたが、Barsの戻り値はずっと'0'だったので
ローソク足の本数はBarsで返せないらしい。
インジケータ作成時はBars関数にて全ローソク足の本数を返せていたが、
EA作成時は、Bars関数はなぜか返せなかった。
下記ソースコードにて検証
〇インジケータ作成時
Print(IntToStr(Bars));
→こっちはちゃんとバーの本数を返せてる
〇EA作成時
Print(IntToStr(Bars));
→'0' 固定
しょうがないのでiBars関数にて本数を読み込むことにした。
緑線はEAをスタートさせたタイミング。
見ずらいかもしれないがローソク足が10本新しく形成されてる。
オープンポジションも10になっているのでちゃんと動作してそう。
ここで注意することはタイムフレームを変えてしまうと、ローソク足の数が
変わってしまうので自分で作った注文条件が成立していたら再度注文or
タイムフレーム変更前のローソク足の本数を超えない限り注文されない。
対処方法としてはチャートのタイムフレームを取得して、変更されたら
再度ローソク足の本数をチェックし直せばいいのでは?
→チャートのタイムフレームを変更して、Timeframe関数で戻り値を
調べたら表示されているタイムフレームを返すんじゃなくて
SetCurrencyAndTimeframe関数にて渡した引数を戻すだけだったので
無理そう。