MQL4デバッグ
自作のKu-ChartB602を使ってデバッグの流れをやっていきます。
まずMT5用に作ったKu-ChartB602をそのままMT4のエディタにコピペしてコンパイル
TimeTradeServer関数がないのでエラー出てます
そこでTimeCurrent()に変えてやる。エラーは出なくなります。
これで終わりならよかったのですが、現在の足だと#INDとなって
値のすべてが-9223372です。
今のところヒントは一本でも戻ればこのように表示されることです。
Symbolの欄をEURUSDで埋めておきます
値を知りたいなってところにブレイクポイントを、具体的には行数のところでダブルクリックで追加するか右クリックから追加。
四角いマークがそれ。
F5を押すか、Debug→Resumeで始める。
ひとまずEURUSDの値が知りたいので右下のExpressionにEURUSDを追加。
赤い■の右のアイコンで少しずつ進める(ショートカットキーはF11)。
115行目でかならずストップしてしまうようです、
一旦やめてMT4に戻ってエキスパートのタブを見てみます。
115行目でarray out of rangeが出ています。
114と115にArrayResizeでサイズをきっちり指定してやってもう一度デバッグ
エラーは出なくなったけど未だに#INDのままなので
再び怪しいところにブレークポイントを指定。
自作の関数GetValが怪しいので
こんな感じ、Expressionにはv1を入れる。
F11で動かしていってもv1が0のままです、CopyCloseがどうもうまく動いてない様子。
Expressionに調べたい変数をバンバン入れる。
t2がどうも間違っているようです。
自分で作ったのに理解していなかったt2はこれで正常。
この234行目からのInpPeriodの中のif文のT2が間違っていそう。
色々やった結果CopyCloseの関数のオーバーロードのところで失敗してる気がする。
bufv2の配列にうまく値が入っていない。
CopyCloseのみで少しデバッグしてみる必要がありそうです。
そこでスクリプトにコードを書きます。
Expressionのbuf1[0]に注目してください。
Time[0](現在の足)を参照しようとすると値が0となってしまっています。
さすがにこれはMT4の側の問題だと思うのですがCopyCloseでdatetimeとかは(現在の足が未完了の場合)今のところ使ってはいけないようです。
なぜかは深く考えないことにMT5だと正しく動作している。
datetimeにしていたところに0すなわちint型に変えたらちゃんとほしい物が出せます。
この時点で結構ムカついているのですが、まあ怒ってもしょうがないので今のところ問題がないint型で揃えてやることに。
今回のインディケーターとbox.netの使用テスト。
ひとまずDAYのみなおっていると思いますがその他についてはちゃんと動作しておらず。
WEEKとかはあとで直します、とりあえずアップロダ(ストレージサービス)の使用テストと、CopyCloseのスタートポジションがデータタイム型だとどうなるかっていう話とデバッグの流れ解説のための記事です。
追記:Weekモードをとりあえず使うには
251行目をコメントアウトしておけばひとまず動きます。
Offsetは使えません。
それでひとまず想定した動きになると思います。