mt4 (MetaTrader4)使い倒シストレ

メタトレーダー、自作インジケータ、自作EAで完全自動売買。使えるものは何でも使え。
インジケーター、EA(自動売買システム)製作のご依頼はこちらへ
Googolyen FX Factory
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


にほんブログ村 為替ブログ FX システムトレード派へ
--/--/--(--) --:--:-- | スポンサー広告 | Trackback(-) | Comment(-)
External functions definition (外部関数定義)
他のプログラムで定義された外部関数の型は明確に表わされているべきである。
このような定義が不十分だと、コンパイル、リンク、プログラムの実行中にエラーとなる可能性がある。
外部ファイル(.dllや.ex4)の記述と同時に、#importをモジュールへの参照に使わなければならない。

#import "user32.dll"
  int     MessageBoxA(int hWnd ,string szText,string szCaption,int nType);
  int     SendMessageA(int hWnd,int Msg,int wParam,int lParam);
#import "lib.ex4"
  double  round(double value);
#import
外部DLLファイルやコンパイル済みEX4ライブラリから呼ばれる関数の記述でインポートできる。

変数へのポインタはインポートされたdll関数に渡すことができる。
string型のデータは同一のメモリブロック(メモリブロック領域とポインタ、二部位から成る文字列データの内部表現へ蓄えられる) へのポインタとして渡される。
もし、intdouble型のデータを渡す必要がある場合、同一型の1次元配列を変数として参照渡しすればよい。

Example:
#import "some_lib.dll"
  void    PassIntegerByref(int& OneInt[]);
#import
int start()
  {
   int array[1];
//...
   PassIntegerByref(array);
   Print(array[0]);
//...
  }


にほんブログ村 為替ブログ FX システムトレード派へ
スポンサーサイト
Initialization of variables (変数の初期化)
変数は初期値によって初期化でき、明確な初期化が無い場合は、ゼロで初期化される変数もある。
グローバル変数やスタティック変数は同一型の値でしか初期化できない。
ローカル変数は値だけでなく式によっても初期化できる。

グローバル変数やスタティック変数は一度だけ初期化できる。
ローカル変数は同一型のデータを返す関数によって何度でも初期化できる。

Examples:
int    n       = 1;
double p       = MarketInfo(Symbol(),MODE_POINT);
string s       = "hello";
double f[]     = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };
int    a[4][4] = { 1, 1, 1, 1,  2, 2, 2, 2,  3, 3, 3, 3,  4, 4, 4, 4 };
配列要素のリストは中括弧で囲まれなければならない。
初期値を省略した場合、0となる。
もし配列のサイズが定義されていない場合、初期値の個数に応じて定義される。
複次元配列は1次元の要素によって初期化される。
つまり、中括弧の追加は必要ない。
全ての配列(ローカル変数として宣言されたものも含む)は定数だけしか初期化できない。

にほんブログ村 為替ブログ FX システムトレード派へ
Defining extern variables (extern変数)
"extern"はextern変数を定義する。
データ型の前に"extern"を付ければ宣言できる。

Example:
extern double InputParameter1 = 1.0;
extern color  InputParameter2 = red;
int init()
  {
   ...
  }
extern変数はプログラムの入力変数と決まっており、プログラムのプロパティウィンドウから変更できる。
配列をextern変数とすることはできない。


にほんブログ村 為替ブログ FX システムトレード派へ
Global variables (グローバル変数)
グローバル変数は、関数定義と同様の場所で定義する。
つまりブロック内ではない。

Example:
int GlobalFlag=10;   // グローバル変数
int start()
  {
   ...
  }
グローバル変数は全プログラム内からアクセスすることができる。
グローバル変数はそのプログラム内で定義された全ての関数からもアクセスできる。
もし明確に定義されていなければ、グローバル変数の初期値はゼロである。
グローバル変数の初期化は同一型によってのみ行うことができる。
グローバル変数はクライアント端末メモリを読み込んだ後に一度だけ初期化される。

Note:GlobalVariable...()関数を用いてアクセスをしているクライアント端末のグローバル変数と重複してはならない。

にほんブログ村 為替ブログ FX システムトレード派へ
Static variables (スタティック変数)
"static"はスタティック変数を定義する。
データ型の前に"static"を付ければ宣言できる。
Example:
int somefunc()
  {
   static int flag=10;
   ....
   return(flag);
  }
スタティック変数は、固定メモリに記憶され、それらの値は関数から抜けた時も開放されない。
関数のブロック内にあるいくつかの変数(引数を除く)はスタティック変数として定義することができる。
式によって初期化されるようなローカル変数とは異なり、スタティック変数は一致する型の定数によって初期化さる。
もし明確に初期化されていない場合は、スタティック変数はゼロで初期化される。
スタティック変数は"init()"関数を呼び出す前に一度だけ初期化され、そのスタティック変数を宣言した関数から抜けた時も、値を失わない。

にほんブログ村 為替ブログ FX システムトレード派へ
Formal parameters (引数)
関数の引数はローカル変数である。
参照範囲は関数内である。
引数は外部変数や、関数内で定義されているローカル変数と異なる名前でなければならない。
関数ブロック内で引数に他の値を挿入することができる。

Example:
void func(int x[], double y, bool z)
  {
   if(y>0.0 && !z)
      Print(x[0]);
   ...
  }
引数は定数によって初期化できる。この場合、初期値はデフォルト値である。
初期化された変数の次の変数も初期化されなければならない。

Example:
void func(int x, double y = 0.0, bool z = true)
  {
   ...
  }
このような関数を呼び出す際、初期化変数は省略することができ、その変数の値はデフォルト値となる。

Example:
func(123, 0.5);
他のモジュールからインポートされたMQL4ライブラリ関数の変数はデフォルト値によって初期化することはできない。

関数に渡された変数(すなわち関数内で変更されたローカル変数)の値は、外部から見ることができない。
変数群を複数の配列として渡すことは可能であるが、変数を一つの配列として渡す場合、要素の変更をすることはできない。

参照によって変数を渡すことも可能である(参照渡し)。
この場合、これらの変数の変更は呼び出した側の関数内でも変更されている。
配列要素は参照によって渡すことはできない。
変数の参照渡しは同一モジュール内に限られ、ライブラリー群内ではできない。
変数を参照渡しするためには、データ型の前に&を付けなければならない。

Example:
void func(int& x, double& y, double& z[])
  {
   double calculated_tp;
   ...
   for(int i=0; i< OrdersTotal(); i++)
     {
      if(i==ArraySize(z))       break;
      if(OrderSelect(i)==false) break;
      z[i]=OrderOpenPrice();
     }
   x=i;
   y=calculated_tp;
  }
配列も参照渡しができる上に、元の配列の要素を変更することもできる。簡単な変数とは違って、配列をライブラリ関数へ参照渡しすることもできる。

変数の参照渡しはデフォルト値で初期化することはできない。

変数個数の上限は64個である。

にほんブログ村 為替ブログ FX システムトレード派へ
Local variables (ローカル変数)
関数内で宣言された変数はローカル変数である。
ローカル変数は宣言された関数内からしか参照できず、一つのローカル変数は複数の式の結果によって初期化することができる。
関数呼び出しによってローカル変数は初期化される。
ローカル変数は同一関数のメモリ領域に格納される。

Example:
int somefunc()
  {
   int ret_code=0;
   ....
   return(ret_code);
  }


にほんブログ村 為替ブログ FX システムトレード派へ
Variables
変数は使う前に宣言されていないといけない。
重複しない名前は変数の特定に使える。
変数の宣言は変数名と型を用いる。
宣言は文ではない。

基本の型:

Examples:
string MessageBox;
int    Orders;
double SymbolPrice;
bool   bLog;

追加された型:

  • color - RGBを整数で表わしている
  • datetime - 日付と時間を表し、1970年1月1日 0:00からの秒数を符号なし整数で表わしている
Example:
datetime tBegin_Data   = D'2004.01.01 00:00';
color    cModify_Color = C'0x44,0xB9,0xE6';

配列

配列は同じ型のデータをインデックス化し並べたものである。

int    a[50];       // 要素数が50個の整数型の1次元配列
double m[7][50];    // 7つの配列で構成される2次元配列
                    //各配列は50個の要素を持っている
整数だけが配列のインデックスとなりうる。
4次元配列以上は許されない。
配列要素は0番目から始まる。
1次元配列の終端要素のインデックスは配列サイズよりも1小さい数である。
要素数50で構成される整数型配列の終端要素はa[49]と表わされる。
複次元配列でも同様の関係がある:一つの次元は0から次元サイズ-1でインデックス化されている。
例にある2次元配列の終端要素はm[6][49]として表わされる。

もし配列の範囲を超えてアクセスしようとした場合、サブシステムがERR_ARRAY_INDEX_OUT_OF_RANGEエラーを発生させる。
このエラーはGetLastError()関数によって分かる。


にほんブログ村 為替ブログ FX システムトレード派へ
Designed by aykm.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。