俺にも執筆活動させろボケ

MQL4デバッグ

 

自作のKu-ChartB602を使ってデバッグの流れをやっていきます。

まずMT5用に作ったKu-ChartB602をそのままMT4のエディタにコピペしてコンパイル

f:id:nemui3900:20141024195735p:plain

TimeTradeServer関数がないのでエラー出てます

そこでTimeCurrent()に変えてやる。エラーは出なくなります。

これで終わりならよかったのですが、現在の足だと#INDとなって

値のすべてが-9223372です。

f:id:nemui3900:20141024200048p:plain

今のところヒントは一本でも戻ればこのように表示されることです。

f:id:nemui3900:20141024200307p:plain

 

デバッグを使う前にツールオプションから

f:id:nemui3900:20141024200642p:plain

Symbolの欄をEURUSDで埋めておきます

 

f:id:nemui3900:20141024200721p:plain

値を知りたいなってところにブレイクポイントを、具体的には行数のところでダブルクリックで追加するか右クリックから追加。

四角いマークがそれ。

 

F5を押すか、Debug→Resumeで始める。

ひとまずEURUSDの値が知りたいので右下のExpressionにEURUSDを追加。

f:id:nemui3900:20141024201422p:plain

赤い■の右のアイコンで少しずつ進める(ショートカットキーはF11)。

115行目でかならずストップしてしまうようです、

一旦やめてMT4に戻ってエキスパートのタブを見てみます。

f:id:nemui3900:20141024201653p:plain

115行目でarray out of rangeが出ています。

114と115にArrayResizeでサイズをきっちり指定してやってもう一度デバッグ

f:id:nemui3900:20141024202144p:plain

エラーは出なくなったけど未だに#INDのままなので

再び怪しいところにブレークポイントを指定。

自作の関数GetValが怪しいので

f:id:nemui3900:20141024202620p:plain

こんな感じ、Expressionにはv1を入れる。

F11で動かしていってもv1が0のままです、CopyCloseがどうもうまく動いてない様子。

Expressionに調べたい変数をバンバン入れる。

f:id:nemui3900:20141024203112p:plain

t2がどうも間違っているようです。

自分で作ったのに理解していなかったt2はこれで正常。

この234行目からのInpPeriodの中のif文のT2が間違っていそう。

f:id:nemui3900:20141024211000p:plain

色々やった結果CopyCloseの関数のオーバーロードのところで失敗してる気がする。

bufv2の配列にうまく値が入っていない。

CopyCloseのみで少しデバッグしてみる必要がありそうです。

そこでスクリプトにコードを書きます。

f:id:nemui3900:20141024212226p:plain

Expressionのbuf1[0]に注目してください。

Time[0](現在の足)を参照しようとすると値が0となってしまっています。

さすがにこれはMT4の側の問題だと思うのですがCopyCloseでdatetimeとかは(現在の足が未完了の場合)今のところ使ってはいけないようです。

なぜかは深く考えないことにMT5だと正しく動作している。

f:id:nemui3900:20141024212746p:plain

datetimeにしていたところに0すなわちint型に変えたらちゃんとほしい物が出せます。

この時点で結構ムカついているのですが、まあ怒ってもしょうがないので今のところ問題がないint型で揃えてやることに。

f:id:nemui3900:20141024213250p:plain

 

 今回のインディケーターとbox.netの使用テスト。

ひとまずDAYのみなおっていると思いますがその他についてはちゃんと動作しておらず。

WEEKとかはあとで直します、とりあえずアップロダ(ストレージサービス)の使用テストと、CopyCloseのスタートポジションがデータタイム型だとどうなるかっていう話とデバッグの流れ解説のための記事です。

 

追記:Weekモードをとりあえず使うには

251行目をコメントアウトしておけばひとまず動きます。

Offsetは使えません。

それでひとまず想定した動きになると思います。

f:id:nemui3900:20141024224848p:plain