2018年5月9日水曜日
[MQL4] オーダー約定時刻からの足の本数を求める方法
### オーダー約定時刻からの時間を求める
オーダー約定時刻からの時間は [OrderOpenTime()](https://docs.mql4.com/trading/orderopentime) と [TimeCurrent()](https://docs.mql4.com/dateandtime/timecurrent) の差分で求められます。
なお、OrderOpenTime() を実行する前には [OrderSelect()](https://docs.mql4.com/trading/orderselect) で対象の Order を指定しておく必要があります。
```mq4
// OrderSelect() は実行済みとする
long diff = TimeCurrent() - OrderOpenTime();
printf("%lld", diff); // 約定時刻からの秒
```
この値は**秒**で求められます。
> 参考
>
> [[MQL4] datetime を long にキャストすると 1970/1/1 からの秒になる | Strategy of C](https://strategyofc.blogspot.com/2018/05/mql4-datetime-long-197011.html)
この時、土日に入っている場合は [TimeCurrent()](https://docs.mql4.com/dateandtime/timecurrent) が正確ではない可能性があるので注意が必要です。
> 参考
>
> [[MQL4] TimeCurrent() は土日の間は更新されない | Strategy of C](https://strategyofc.blogspot.com/2018/05/mql4-timecurrent.html)
### 秒を足の本数に変換する
2018/6/20 追記
[PeriodSeconds()](https://docs.mql4.com/common/periodseconds) を使用する方法に書き換えました。
[PeriodSeconds()](https://docs.mql4.com/common/periodseconds) で先の値を割れば、足の本数になります。
~~[Period()](https://docs.mql4.com/check/period) は現在のチャートの時間軸を**分**で返すので、 `Period() * 60` で先の値を割れば、足の本数になります。~~
```mq4
long diff = TimeCurrent() - OrderOpenTime();
int num_bars = (int)(diff / PeriodSeconds());
printf("%d", num_bars); // 約定時刻からの足の本数
```