mt4 (MetaTrader4)使い倒シストレ

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


にほんブログ村 為替ブログ FX システムトレード派へ
--/--/--(--) --:--:-- | スポンサー広告 | Trackback(-) | Comment(-)
yahooブリーフケースが有料に
今まで何気なく使っていたyahooブリーフケースが有料になるそうです。

何でもYahoo! BB会員かYahoo!プレミアム会員とかにならないと
使えなくなるそうです。

という訳で、Yahooプレミアム会員に登録しました。
しかし有料か…



それでそれに伴って、Yahooブリーフケースのリンク先等を変更しました。

もし記事中のリンク先等が切れていたらご一報下さいませ。
前のブリーフケース内は、2月の2日か3日ぐらいに全部なくなってしまうみたいです。


後、左のリンクにあるyahooブリーフケースも前とは違うリンク先です。

いないとは思いますが、ブリーフケース自体をお気に入り等に入れている方がいましたら
変わっていますのでお気をつけ下さい~。


にほんブログ村 為替ブログ FX システムトレード派へ
スポンサーサイト
グローバル変数を使わずに健康的に
グローバル変数を、皆さんは多用していらっしゃいまっか?もうかりまっか?

これはほとんどのプログラミング言語に言えることですが、
必要以上のグローバル変数を使うことは、あまりお薦めできません。


それはこちらの説明に書いてありますので、文章で語ることは割愛します(文字での説明が面倒臭いわけではないですよ?(笑))。
その他にもグローバル変数多用の弊害については、様々なサイトに載っていると思うので、一度調べてみてはいかがでしょうか(文字での説明が面倒臭…(略))。

さて、文章で語るよりも、具体的にMQL4プログラムで説明しましょう。
以下のコードを見てください。


/**
* グローバル変数乱用サンプル
* 特に何をするでもなく…
*/
//--- Global variables
double Ma1;
double Ma2;
double Ma3;
double Ma4;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
Comment("");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
Ma1 = iMA(Symbol(), Period(), 14, 0, MODE_SMA, PRICE_CLOSE, 0);
Ma2 = iMA(Symbol(), Period(), 21, 0, MODE_SMA, PRICE_CLOSE, 0);
Ma3 = iMA(Symbol(), Period(), 14, 0, MODE_EMA, PRICE_CLOSE, 0);
Ma4 = iMA(Symbol(), Period(), 21, 0, MODE_EMA, PRICE_CLOSE, 0);

SetMA();

Comment(Ma1, "\n", Ma2, "\n", (Ma1 - Ma3), "\n", (Ma2 - Ma4), "\n");
return(0);
}

//+------------------------------------------------------------------+

void SetMA()
{
Ma1 = iMA(Symbol(), Period(), 21, 0, MODE_SMA, PRICE_CLOSE, 0);
Ma2 = iMA(Symbol(), Period(), 14, 0, MODE_SMA, PRICE_CLOSE, 0);

Ma3 = iMA(Symbol(), Period(), 21, 0, MODE_EMA, PRICE_CLOSE, 0);
Ma4 = iMA(Symbol(), Period(), 14, 0, MODE_EMA, PRICE_CLOSE, 0);
}


私はこのようなプログラムを見ると、鬱になってしまいますが、みなさんはいかがでしょうか?
グローバル変数は、どの関数からも参照(アクセス)することができます。
この例では、start、SetMAの2つの関数で、グローバル変数Ma1~Ma4を参照しています。

今は短いプログラムなので動作を理解するのは簡単ですが、
非常に長く、グローバル変数が乱用されているプログラムを理解するには、多くの労力と時間を要します。


またグローバル変数を利用すると、関数の再利用性が落ちてしまいます。
例えば、他のMQL4プログラムでSetMA関数を利用したい場合、SetMA関数本体とSetMA関数内で使われているグローバル変数を全て記述しなければなりません。
関数はプログラム内で独立性が高ければ高いほど、再利用性が高まるのです。




①プログラムの動作を理解するのに時間と労力がかかる
②プログラム(関数)の再利用性が落ちる


以上の2点を考慮した場合、上記のプログラムは以下のように記述したほうがいいと思います。

int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
Comment("");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
double Ma1, Ma2, Ma3, Ma4;

Ma1 = iMA(Symbol(), Period(), 14, 0, MODE_SMA, PRICE_CLOSE, 0);
Ma2 = iMA(Symbol(), Period(), 21, 0, MODE_SMA, PRICE_CLOSE, 0);
Ma3 = iMA(Symbol(), Period(), 14, 0, MODE_EMA, PRICE_CLOSE, 0);
Ma4 = iMA(Symbol(), Period(), 21, 0, MODE_EMA, PRICE_CLOSE, 0);

SetMA(Ma1, Ma2, Ma3, Ma4);

Comment(Ma1, "\n", Ma2, "\n", (Ma1 - Ma3), "\n", (Ma2 - Ma4), "\n");
return(0);
}

//+------------------------------------------------------------------+

void SetMA(double &ma1, double &ma2, double &ma3, double &ma4)
{
ma1 = iMA(Symbol(), Period(), 21, 0, MODE_SMA, PRICE_CLOSE, 0);
ma2 = iMA(Symbol(), Period(), 14, 0, MODE_SMA, PRICE_CLOSE, 0);

ma3 = iMA(Symbol(), Period(), 21, 0, MODE_EMA, PRICE_CLOSE, 0);
ma4 = iMA(Symbol(), Period(), 14, 0, MODE_EMA, PRICE_CLOSE, 0);
}




ただ、どうしてもグローバル変数を使わなければならない状況もあると思います。
そういう場合はグローバル変数を必要最小限に抑える努力をしてみましょう。
その創意工夫がプログラミング力の向上になると考えています。



健康的なソースファイル作りにお役立てください。

にほんブログ村 為替ブログ FX システムトレード派へ
変数名には文字数制限がある
普段MQL4を使っていると、ふと思うことが色々あります。
その内の一つを今日はご紹介します。

「ちょー長い変数名って使えるんかいな…」


早速実験してみました。


int start()
{
int UWA = 0;
int UWAA = 0;
int UWAAA = 0;
int UWAAAA = 0;
int UWAAAAA = 0;
int UWAAAAAA = 0;
int UWAAAAAAA = 0;
int UWAAAAAAAA = 0;
int UWAAAAAAAAA = 0;
int UWAAAAAAAAAA = 0;
int UWAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;
int UWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = 0;

}

このソースをコンパイルしてみると、見事にエラーに。

「too long variable name : 変数名が長すぎだよー」

どうやら32文字以上の変数名は宣言できないようですね。


補足:「#define」も32文字の制限があるようです。




にほんブログ村 為替ブログ FX システムトレード派へ
あけましておめでとうございます!
皆様あけましておめでとうございます!
遅いか(笑)

昨年は大変お世話になり誠にありがとうございました。

本年も何卒宜しくお願い申し上げます!


本年が皆様にとって幸多き一年になりますよう
心よりお祈り申し上げております。


                   googolyen




ウッシッシ
ushi.gif


これでも牛のつもりだ(笑)

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