インジケーター、EA(自動売買システム)製作のご依頼はこちらへ
Googolyen FX Factory
Googolyen FX Factory
こんにちわっ!
ご無沙汰しております。
ブログの方を大分放置していました。
さてさて唐突ではございますが、
マニアなみなさんはMQL5(ファイブ)の方も少しずつ手を出し始めたりしてますか?
例によってそのリファレンスは英語でした。
なので、それをちょこちょこと日本語に翻訳していきました。
まだ全ページを翻訳したわけではありませんが、
ご利用くだされ。
MQL5 日本語リファレンス
翻訳ミスなどがあれば
こっそりかつ大胆に教えて頂けますと助かります。
宜しくお願いします!
追記 (2010.10.28.2:20)
METAQUOTES社のアジア分社(?)から、上記のMQL5 日本語リファレンスのサイトを
閉鎖するようにとの連絡がありました。
何に問題があったのかはわかりませんが、
詳細が分かり、問題が解決されるまでは
MQL5 日本語リファレンスのサイトを一時閉鎖します。
ご無沙汰しております。
ブログの方を大分放置していました。
さてさて唐突ではございますが、
マニアなみなさんはMQL5(ファイブ)の方も少しずつ手を出し始めたりしてますか?
例によってそのリファレンスは英語でした。
なので、それをちょこちょこと日本語に翻訳していきました。
まだ全ページを翻訳したわけではありませんが、
ご利用くだされ。
MQL5 日本語リファレンス
翻訳ミスなどがあれば
こっそりかつ大胆に教えて頂けますと助かります。
宜しくお願いします!
追記 (2010.10.28.2:20)
METAQUOTES社のアジア分社(?)から、上記のMQL5 日本語リファレンスのサイトを
閉鎖するようにとの連絡がありました。
何に問題があったのかはわかりませんが、
詳細が分かり、問題が解決されるまでは
MQL5 日本語リファレンスのサイトを一時閉鎖します。
いつも大変お世話になっております。
Googolyen FX Factoryのホームページを移転しましたので
ご連絡致します。
新しいアドレスは
http://googolyenfx.com/
です。
こちら
↓
(新)Googolyen FX Factory
ブックマーク等にご登録していらっしゃる場合は、
お手数をお掛け致しますが、変更を宜しくお願い申し上げます。
HPの内容等は
基本的に前と変わっていませんが、
ご依頼頂く際に、
「納期はどのぐらいになるのか?」
と聞かれることが多かったので、
納期目安の項目を追加しました。
あくまでも目安ですので、それよりも早い時もありますし
遅い時もありますが、ご参考にして下さいませ。
今後とも何卒宜しくお願い申し上げます。
Googolyen FX Factoryのホームページを移転しましたので
ご連絡致します。
新しいアドレスは
http://googolyenfx.com/
です。
こちら
↓
(新)Googolyen FX Factory
ブックマーク等にご登録していらっしゃる場合は、
お手数をお掛け致しますが、変更を宜しくお願い申し上げます。
HPの内容等は
基本的に前と変わっていませんが、
ご依頼頂く際に、
「納期はどのぐらいになるのか?」
と聞かれることが多かったので、
納期目安の項目を追加しました。
あくまでも目安ですので、それよりも早い時もありますし
遅い時もありますが、ご参考にして下さいませ。
今後とも何卒宜しくお願い申し上げます。
MQL4では『static』を使用することができます。
このstatic、実はとても便利なものなんです
(便利、便利じゃないの基準は色々あると思いますが、
私は便利と思ってます(笑))。
まずはstaticの使い方について少々。
以下のコードを見てください。
このコードを実行すると、
・counterの値はずっと1のまま
・counter_sの値は1ずつ増加する
となります。
前回この関数を呼び出した時のcount値を覚えておいて、その値に1を足している訳です。
static変数を使えば、その関数を抜けた後も、値を保持することができるのです。
値を保持する為に『グローバル変数を使っていた場面』に使えるんです。
よく見かける場面を見てみましょう。
新足が登場するとtrueを返す関数です。
この関数内で使われているAllBars変数の特徴は以下です。
・AllBars変数はグローバル領域で宣言された変数
・AllBars変数はプログラム全体の中でisNewBar()関数内でしか使われない
・AllBarsは値を保持する為に使われている
ピコーン!
staticが使えます。
そしてstaticを使えば、グローバル変数の数を1個減らすことができますね。
isNewBar()関数をstaticを使って書き換えたコードが以下になります。
たったこれだけですが、グローバル変数を減らすことに成功しました。
これで前回記事にした、グローバル変数乱用の弊害から一つ逃れることができますね。
健康的なソースファイル作りにお役立てください。
このstatic、実はとても便利なものなんです
(便利、便利じゃないの基準は色々あると思いますが、
私は便利と思ってます(笑))。
まずはstaticの使い方について少々。
以下のコードを見てください。
int start()
{
int counter, counter_s;
counter = RunningTimes();
counter_s = RunningTimes_s();
Comment(counter, ", ", counter_s);
}
int RunningTimes()
{
int count = 0;
count++;
return (count);
}
int RunningTimes_s()
{
static int count = 0;
count++;
return (count);
}
このコードを実行すると、
・counterの値はずっと1のまま
・counter_sの値は1ずつ増加する
となります。
前回この関数を呼び出した時のcount値を覚えておいて、その値に1を足している訳です。
static変数を使えば、その関数を抜けた後も、値を保持することができるのです。
値を保持する為に『グローバル変数を使っていた場面』に使えるんです。
よく見かける場面を見てみましょう。
int AllBars;
bool isNewBar()
{
bool res=false;
if (AllBars!=Bars)
{
AllBars=Bars;
res=true;
}
return(res);
}
新足が登場するとtrueを返す関数です。
この関数内で使われているAllBars変数の特徴は以下です。
・AllBars変数はグローバル領域で宣言された変数
・AllBars変数はプログラム全体の中でisNewBar()関数内でしか使われない
・AllBarsは値を保持する為に使われている
ピコーン!
staticが使えます。
そしてstaticを使えば、グローバル変数の数を1個減らすことができますね。
isNewBar()関数をstaticを使って書き換えたコードが以下になります。
bool isNewBar()
{
static int allBars = 0;
bool res=false;
if (allBars!=Bars)
{
allBars=Bars;
res=true;
}
return(res);
}
たったこれだけですが、グローバル変数を減らすことに成功しました。
これで前回記事にした、グローバル変数乱用の弊害から一つ逃れることができますね。
健康的なソースファイル作りにお役立てください。
ちょっとこないだ、FXCM のUK (United Kingdom : 英国)
の口座を開設したので、これから開設しようと思ってる人の
参考になればと思って、開設方法を書いてみます。
両建てが禁止になった関係で
FXCM NY→UKに移ったらしい。
円口座もあって、国内送金だけで入金OKの予定(?)
ちなみに私が開設した時はまだ海外送金のみで、
地方銀行から送金したら9千円も手数料取られた!ムカッ
普通は多分4、5千円だと思う。
OK、それではHere we go
(私は法人口座を開設したので、それに則って説明しますが
個人口座も基本的には同じじゃないかと思う。むしろ簡単かな?)
まずはここへGo!
↓
http://www.fxcm.co.uk/metatrader-apply.jsp
(noアフィリンク)
アメリカに住んでいない人は、
[NON-U.S.RESIDENT SIGN-UP PAGE]へ
口座の種類とかを選択

Choose Trading Account:(円建て口座ならJPY、ドル建て口座ならUSD)
Choose Account Registration Option:(法人ならCorporate、個人口座ならIndividual)
Go→Open an Account

会社名とか、住所とかはまぁいいとして
初めよくわからんかったのは
「Nature of Business」とかいうの。
ハローって(日本デスクに)電話で聞いてみたら、
会社のメインとなる事業内容の事らしい。
あと、Yes or Noで選択する
「Does your business structure meet the criteria of a financial institution?」
とかもよくわからんかったけどNoでいいとの事(?)
銀行情報は後でもいいし、ここで記入しておいてもいい。
Go→continue

次は、個人の住所、国籍、性別、未婚既婚、
免許証の番号等を入れていく。
住所の後に、
「Time at Current Address」
ってのがあって、今の住所に住んでどれぐらいになる?
てことを聞いてるけど、今の住所に住んで3年未満を選択すると
その前の住所も書けって下に入力欄が出てくる。(メンドクサイ)
一番最後の、
「Would you like to add an additional contact person to this account?」
ってのは 「他にも誰かcontact person追加したい?」
ていう意味。
特に必要がなければNoでOK
Go→continue

次は、まず
TRADING EXPERIENCE INFORMATION
でトレード経験を記入する。
株、オプション、商品、先物、etc..
全てNOでもOK
次は、FINANCIAL INFORMATION
で年収とかを記入する。
Total Annual Income:年収
Net Worth (Assets minus Liabilities):資産
Liquid Assets (Quickly Disposable):流動資産
ここには見栄を張って、最大を選択しま、、しないように(笑)
私は法人口座にしたので、ここは
CORPORATE FINANCIAL INFORMATION
となっていて、てっきり会社の売上とかを書くのかと思ってたけど、
電話で聞いたら個人の収入を書いてくださいって言われた。
あと、これ→£
初め何じゃ?と思ったけど
ポンドの事らしい。
だから年収とかはポンド換算にしましょう。
Have you declared bankruptcy within the past 10 years?
10年以内に自己破産した?
Do you have or have you ever had any other account with us?
FXCMに口座をすでに持ってる、もしくは、過去に口座作ってた事ある?
1. A member of any commodity exchange?
commodity exchangeのメンバー?
(commodity exchangeって何??多分商品先物とかの取引関係のメンバーかって事かな?)
2. An employee of a regulatory agency?
調整機関に勤務してる?
Do you have a personal assets portfolio, including cash and/or other financial instruments, of at least €500,000?
少なくとも、50万ユーロ相当の、現金を含む、金融商品等の個人資産ポートフォリオある?
って感じかな。
Go→continue
ここで以下のようなメッセージが出てくる。

内容としては、
「続けるには、ここに書いてあるProduct Noticeを読んで、同意する必要があります。
同意できなければ続けないでね〜」
って感じ。
Go→Proceed(続ける)

次は、Corporate Resolution(取締役会決議)とPersonal Guarantee(個人保証)
を記入する必要があるけど、多分これは
法人口座だけで、個人口座にはない項目だと思う。
うわ〜訳すのめんどくせー
と思ったけど、FXDDに、
ほぼ同じ文章でしかも日本語訳付きのPDFがあった。
ラッキー
このページ
の「法人口座決議書」ってやつ。
これでOK
各項目で「I Accept」を選択して、
Go→continue

さてさてあと少し
ここでは、パスワードとかを設定して
約款とかに同意する。
パスワードは
大文字、数字を含む8文字以上にしてくだされ。
後は秘密の質問&その答え、
どこでFXCMを知りましたか?みたいなのに答える
その下では、
約款等を見て、同意したら"Yes"を選択。
Yes We Can
Go→continue
とここでまた前みたいなメッセージが出る

内容としては、
「続けるには、ここに書いてあるHIGH RISK INVESTMENT NOTICEを読んで、同意する必要があります。
同意できなければ続けないでね〜」
って感じ。
問題なければ
Go→Proceed
後は、内容確認画面が出るので
確認、プリント等をして
SUBMITで完了!
後は本人書類を送ったり、
こまごました事を残すのみ。
まず、初めに行ったページ
↓
http://www.fxcm.co.uk/metatrader-apply.jsp
ここで
STEP2をクリックしてフォームを開く

名前、メールアドレスを記入して
"By clicking "Submit" you〜"のチェックボックスにチェックして
内容をよく読み
下のSUBMITを押す。
後は免許証等のコピーを送るけど、
たぶんメールで、IDファックスカバーシートが添付して送られてきているはず。
これを使ってもいいけど、
私はめんどくさかったから、スキャンした画像ファイルを
メールに添付して送りました。
法人口座開設に必要な書類としては
1.会社の登記簿
2.会社住所証明書(会社名義のもの)
3.会社役員のID
4.会社役員の住所証明書*3
*2.4 住民票または公共料金請求書、銀行口座ステイトメント、携帯電話の請求書(6ヶ月以内の発行日付があるもの)
*3 運転免許証、パスポート、保険証の内一通 (有効期限内のもの)
個人口座の場合、上の3、4にあたる
・免許証等のID
・住所証明書
の2つで良い。
受理されれば、まず
仮IDが送られてくるので、そのIDを記載して入金して
その後本IDとパスワードが送られてくる。
以上!
お疲れ様〜

追伸
最近聞いた話で、
FXCM UKではオーダーを出す時に、ストップ、テイクプロフィットを指定できない、
というよりも指定していたらオーダーが通らないとか。
なにぃぃ!?
の口座を開設したので、これから開設しようと思ってる人の
参考になればと思って、開設方法を書いてみます。
両建てが禁止になった関係で
FXCM NY→UKに移ったらしい。
円口座もあって、国内送金だけで入金OKの予定(?)
ちなみに私が開設した時はまだ海外送金のみで、
地方銀行から送金したら9千円も手数料取られた!ムカッ
普通は多分4、5千円だと思う。
OK、それではHere we go
(私は法人口座を開設したので、それに則って説明しますが
個人口座も基本的には同じじゃないかと思う。むしろ簡単かな?)
まずはここへGo!
↓
http://www.fxcm.co.uk/metatrader-apply.jsp
(noアフィリンク)
アメリカに住んでいない人は、
[NON-U.S.RESIDENT SIGN-UP PAGE]へ
口座の種類とかを選択
Choose Trading Account:(円建て口座ならJPY、ドル建て口座ならUSD)
Choose Account Registration Option:(法人ならCorporate、個人口座ならIndividual)
Go→Open an Account
会社名とか、住所とかはまぁいいとして
初めよくわからんかったのは
「Nature of Business」とかいうの。
ハローって(日本デスクに)電話で聞いてみたら、
会社のメインとなる事業内容の事らしい。
あと、Yes or Noで選択する
「Does your business structure meet the criteria of a financial institution?」
とかもよくわからんかったけどNoでいいとの事(?)
銀行情報は後でもいいし、ここで記入しておいてもいい。
Go→continue
次は、個人の住所、国籍、性別、未婚既婚、
免許証の番号等を入れていく。
住所の後に、
「Time at Current Address」
ってのがあって、今の住所に住んでどれぐらいになる?
てことを聞いてるけど、今の住所に住んで3年未満を選択すると
その前の住所も書けって下に入力欄が出てくる。(メンドクサイ)
一番最後の、
「Would you like to add an additional contact person to this account?」
ってのは 「他にも誰かcontact person追加したい?」
ていう意味。
特に必要がなければNoでOK
Go→continue
次は、まず
TRADING EXPERIENCE INFORMATION
でトレード経験を記入する。
株、オプション、商品、先物、etc..
全てNOでもOK
次は、FINANCIAL INFORMATION
で年収とかを記入する。
Total Annual Income:年収
Net Worth (Assets minus Liabilities):資産
Liquid Assets (Quickly Disposable):流動資産
ここには見栄を張って、最大を選択しま、、しないように(笑)
私は法人口座にしたので、ここは
CORPORATE FINANCIAL INFORMATION
となっていて、てっきり会社の売上とかを書くのかと思ってたけど、
電話で聞いたら個人の収入を書いてくださいって言われた。
あと、これ→£
初め何じゃ?と思ったけど
ポンドの事らしい。
だから年収とかはポンド換算にしましょう。
Have you declared bankruptcy within the past 10 years?
10年以内に自己破産した?
Do you have or have you ever had any other account with us?
FXCMに口座をすでに持ってる、もしくは、過去に口座作ってた事ある?
1. A member of any commodity exchange?
commodity exchangeのメンバー?
(commodity exchangeって何??多分商品先物とかの取引関係のメンバーかって事かな?)
2. An employee of a regulatory agency?
調整機関に勤務してる?
Do you have a personal assets portfolio, including cash and/or other financial instruments, of at least €500,000?
少なくとも、50万ユーロ相当の、現金を含む、金融商品等の個人資産ポートフォリオある?
って感じかな。
Go→continue
ここで以下のようなメッセージが出てくる。
内容としては、
「続けるには、ここに書いてあるProduct Noticeを読んで、同意する必要があります。
同意できなければ続けないでね〜」
って感じ。
Go→Proceed(続ける)
次は、Corporate Resolution(取締役会決議)とPersonal Guarantee(個人保証)
を記入する必要があるけど、多分これは
法人口座だけで、個人口座にはない項目だと思う。
うわ〜訳すのめんどくせー
と思ったけど、FXDDに、
ほぼ同じ文章でしかも日本語訳付きのPDFがあった。
ラッキー
このページ
の「法人口座決議書」ってやつ。
これでOK
各項目で「I Accept」を選択して、
Go→continue
さてさてあと少し
ここでは、パスワードとかを設定して
約款とかに同意する。
パスワードは
大文字、数字を含む8文字以上にしてくだされ。
後は秘密の質問&その答え、
どこでFXCMを知りましたか?みたいなのに答える
その下では、
約款等を見て、同意したら"Yes"を選択。
Yes We Can
Go→continue
とここでまた前みたいなメッセージが出る
内容としては、
「続けるには、ここに書いてあるHIGH RISK INVESTMENT NOTICEを読んで、同意する必要があります。
同意できなければ続けないでね〜」
って感じ。
問題なければ
Go→Proceed
後は、内容確認画面が出るので
確認、プリント等をして
SUBMITで完了!
後は本人書類を送ったり、
こまごました事を残すのみ。
まず、初めに行ったページ
↓
http://www.fxcm.co.uk/metatrader-apply.jsp
ここで
STEP2をクリックしてフォームを開く
名前、メールアドレスを記入して
"By clicking "Submit" you〜"のチェックボックスにチェックして
内容をよく読み
下のSUBMITを押す。
後は免許証等のコピーを送るけど、
たぶんメールで、IDファックスカバーシートが添付して送られてきているはず。
これを使ってもいいけど、
私はめんどくさかったから、スキャンした画像ファイルを
メールに添付して送りました。
法人口座開設に必要な書類としては
1.会社の登記簿
2.会社住所証明書(会社名義のもの)
3.会社役員のID
4.会社役員の住所証明書*3
*2.4 住民票または公共料金請求書、銀行口座ステイトメント、携帯電話の請求書(6ヶ月以内の発行日付があるもの)
*3 運転免許証、パスポート、保険証の内一通 (有効期限内のもの)
個人口座の場合、上の3、4にあたる
・免許証等のID
・住所証明書
の2つで良い。
受理されれば、まず
仮IDが送られてくるので、そのIDを記載して入金して
その後本IDとパスワードが送られてくる。
以上!
お疲れ様〜
追伸
最近聞いた話で、
FXCM UKではオーダーを出す時に、ストップ、テイクプロフィットを指定できない、
というよりも指定していたらオーダーが通らないとか。
なにぃぃ!?
EAやScriptを自作される方は、Order関数群を使っておられるはずです。
for文内でポジションのクローズ処理を書くのが、一般的ではないでしょうか。
以下の2コードを見てください。
コードA
コードB
2つのコードではfor (...)部分が違うだけです。
Aではiの値が1ずつ増加(インクリメント)しています。
Bではiの値が1ずつ減少(デクリメント)しています。
このコードは、
『複数ポジションを持っていた場合に、全てのポジションをクローズする』
という処理を行っているように見えます。
しかし、
実はコードAでは全てのポジションをクローズすることはできません。
iがインクリメントしているか、デクリメントしているか
たったこれだけの違いで現われてくる問題なんです。
具体的に解説します。
今、3つのポジションを持っていると仮定しましょう。
3つのポジションにおける情報は以下の通りとします。
○コードB
まずi = 2(OrdersTotal() - 1)によってポジションcが選択され、ポジションcが決済されました。
決済された後のポジションの状態は以下になります。
その後iはデクリメントされi = 1となります。
i = 1によってポジションbが選択され、…以下略
と、i = -1になるまで以上の操作が繰り返され、めでたく全クローズが完了します。
○続いてA
i = 0によってポジションaが選択され、ポジションaが決済されました。
決済された後のポジションの状態は以下になります。
その後iはインクリメントされi = 1となります。
i = 1によってポジションbが…あれれ?
i = 1によって選択されるのはポジションcですね。
これでは最終的にポジションbが残ってしまうことになりますね。
ポジションが決済される度に、ポジション番号は再割り振りされるみたいで、
その影響でコードAでは全クローズが完了しないのです。
クローズ処理をしないのであれば、コードAでも問題ありませんが、
クローズ処理をする、しないに関わらず、コードBのように書いた方がいいと思います。
for文内でポジションのクローズ処理を書くのが、一般的ではないでしょうか。
以下の2コードを見てください。
コードA
int start()
{
int i, magic;
magic = 111;
for (i = 0; i < OrdersTotal() - 1; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
continue;
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic)
continue;
if (OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, 3);
else if (OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, 3);
}
}
コードB
int start()
{
int i, magic;
magic = 111;
for (i = OrdersTotal() - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
continue;
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic)
continue;
if (OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, 3);
else if (OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, 3);
}
}
2つのコードではfor (...)部分が違うだけです。
Aではiの値が1ずつ増加(インクリメント)しています。
Bではiの値が1ずつ減少(デクリメント)しています。
このコードは、
『複数ポジションを持っていた場合に、全てのポジションをクローズする』
という処理を行っているように見えます。
しかし、
実はコードAでは全てのポジションをクローズすることはできません。
iがインクリメントしているか、デクリメントしているか
たったこれだけの違いで現われてくる問題なんです。
具体的に解説します。
今、3つのポジションを持っていると仮定しましょう。
3つのポジションにおける情報は以下の通りとします。
呼び名 | ポジション番号(iの値によって選択) | チケット番号 | タイプ |
ポジションa | 0 | 100 | BUY |
ポジションb | 1 | 101 | SELL |
ポジションc | 2 | 102 | BUY |
○コードB
まずi = 2(OrdersTotal() - 1)によってポジションcが選択され、ポジションcが決済されました。
決済された後のポジションの状態は以下になります。
呼び名 | ポジション番号(iの値によって選択) | チケット番号 | タイプ |
ポジションa | 0 | 100 | BUY |
ポジションb | 1 | 101 | SELL |
その後iはデクリメントされi = 1となります。
i = 1によってポジションbが選択され、…以下略
と、i = -1になるまで以上の操作が繰り返され、めでたく全クローズが完了します。
○続いてA
i = 0によってポジションaが選択され、ポジションaが決済されました。
決済された後のポジションの状態は以下になります。
呼び名 | ポジション番号(iの値によって選択) | チケット番号 | タイプ |
ポジションb | 0 | 101 | SELL |
ポジションc | 1 | 102 | BUY |
その後iはインクリメントされi = 1となります。
i = 1によってポジションbが…あれれ?
i = 1によって選択されるのはポジションcですね。
これでは最終的にポジションbが残ってしまうことになりますね。
ポジションが決済される度に、ポジション番号は再割り振りされるみたいで、
その影響でコードAでは全クローズが完了しないのです。
クローズ処理をしないのであれば、コードAでも問題ありませんが、
クローズ処理をする、しないに関わらず、コードBのように書いた方がいいと思います。