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) ### 秒を足の本数に変換する[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); // 約定時刻からの足の本数 ```2018/6/20 追記[PeriodSeconds()](https://docs.mql4.com/common/periodseconds) を使用する方法に書き換えました。