豊嶋久道の「メタトレーダー実践日記」
|
「FXメタトレーダー実践プログラミング」第3刷 03月24日
おかげさまで「FXメタトレーダー実践プログラミング」も第3刷が近日中に発行されます。
今回、本書で修正点がありますので、ご報告いたします。
修正箇所は2箇所です。
222ページ8行目の
// 注文待ち時間(秒) extern int MyOrderWaitingTime = 10;
の部分を削除して、223ページ7行目に
// 注文待ち時間(秒) int MyOrderWaitingTime = 10;
として挿入します。
これは、サンプルプログラムの MyLib.mqh と MyLib.mq4 の変更になりますが、特に致命的な不具合があるわけではありません。
修正の理由を簡単に説明します。
そもそも MyOrderWaitingTime という変数は、218ページで説明してあるように、オーダー送信時にエラーでループが無限に繰り返されるのを防ぐために、ループを抜けるための最大待ち時間を秒単位で指定するものです。
初期設定では10と設定されているので、10秒間エラーが続くと、ループから抜けるようになっています。
この設定は頻繁に変えるものではありませんので、初期設定のままで問題なければそのまま利用されて結構です。
元のプログラムでは、MyOrderWaitingTimeの値をチャートに挿入したエキスパートプログラム(EA)のプロパティから変更しても、それが実際に反映されないという不具合があります。
実は、ライブラリープログラム中で利用される外部変数の値はEAのパラメータとして直接は変更できないのです。
なので、修正版では、その不具合を避けるために、MyOrderWaitingTime がEAのパラメータには現れずに、ライブラリープログラムの中だけで使えるようにしたのです。
ですから、変数 MyOrderWaitingTime の値を変更したい場合は、MyLib.mq4の
// 注文待ち時間(秒) int MyOrderWaitingTime = 10;
の部分を直接変更することになります。
このように実際には不具合を修正したわけではないのですが、増刷では、改訂箇所が大幅に増えると面倒なので、必要最低限の修正だけを行いました。
もし、MyOrderWaitingTime などライブラリープログラム中で利用される外部変数の値をEAのパラメータとして変更して使いたい場合、以下のように別の関数を作るなどいくつかの手順が必要になります。
その流れを簡単に説明します。
まず、MyLib.mq4 の中に
void SetMyOrderWaitingTime(int t) { MyOrderWaitingTime = t; }
という関数を追加します。そして、その関数を MyLib.mqh の #import ブロック中に
void SetMyOrderWaitingTime(int t);
として追加します。この関数はパラメータ t の値を MyOrderWaitingTime に代入するだけのものです。
そして、この MyLib.mqh を #include 命令で読み込んだEAで SetMyOrderWaitingTime() を実行すると、MyLib.mq4 中の MyOrderWaitingTime を変更させることができます。
実際には、EAのプログラム中で
extern int WaitingTime = 10;
などと宣言し、その中の init() 関数中に
SetMyOrderWaitingTime(WaitingTime);
と書いておけば、EAのパラメータとして変更した WaitingTime の値が MyLib.mq4 中のMyOrderWaitingTime に設定されることになります。
ちょっとややこしいのですが、興味のある方はご参考にしてください。
コメント投稿
メタトレーダー4のダウンロード 03月10日
「FXメタトレーダー入門」では、MetaQuotes社のサイトからメタトレーダー4をダウンロードするよう説明しています。
ところが、最近のMetaQuotes社のサイトでは、メタトレーダー4をダウンロードできるページが探しにくくなっています。
ダウンロードサイトは色々なところからリンクされているのですが、次のページがわかりやすいんじゃないかと思います。
MetaQuotes社が提供しているメタトレーダー4のオフィシャルサイトです。
http://www.metatrader4.com/
オレンジ色で「Free download」というボタンがあるので、それをクリックしてダウンロードしてください。
コメント投稿
↑ページのトップへ
|
|
|
|