2006年03月31日
システムの適応化
- 手ぶら
- 18:39
- コメント (3)
- トラックバックする
- カテゴリー:システムトレーディング
前回の「システムの最適化と適応化の違い」の続きです。
実は参考文献がこれです。
いくつかのブログで紹介されていたので、システムトレーダの人なら知っている人も多いかと思います。
ディジタル信号処理の理論を駆使して相場を解析するというかなり異色な文献です。
情報通信系の大学の大学院レベルの内容なので、内容を正確に理解している人はあまりいないと思いますが、TradeStation のソースコードがついていますから意味はわからなくても何とか使うことはできます。
本の内容はあまり公表できませんが、作者のサイトに本の内容の一部が掲載されています。
一言で言うと、MESA(Maximum Entropy Spectral Analysis)という手法で相場のスペクトルを分析して周期(サイクル)を求めようとするものです。
ところで、サイクルというのは何かというと、底から始まったとすれば、天井まで到達して、再び底に戻ってくるまでの時間のことです。
相場は上下の振動を繰り返すので、そういう意味でサイクルという概念は存在しますし、エリオット波動など相場を波形と見なして解析する方法はこれまでもあったので、あながち的外れな考えではないと思います。
でも、これを見てください。
下の図は文献のやり方に従って、サイクルを計算する部分をインディケータとして表示させたものです。
サイクル自身は15から30くらいの範囲で変動していますが、そのサイクルが長いときと短いときが上のチャートの特徴とうまく一致しているかどうかはちょっと悩むところです。
なんとなく乱高下しているところはサイクルが短く、きれいなトレンドが発生している場面ではサイクルが長くなっているかな、という程度です。
相場がきれいなサインカーブを描いていればサイクルは確実にわかるし、予測もできますが、乱高下している相場ではどれが1サイクルなのか、後になってみてもわからないことがよくあります。
また、トレンドの場面では原理的に正確なサイクルは計算できないので、このサイクル自身は売買シグナルとしては直接は使えません。
この本では、サイクルを使って正弦波インディケータなどを開発しているようですが、色々と試した結果、意外に為替はトレンドの場面が多いからなのか、少なくともバックテストで利益が出るシステムは作れませんでした。
結局、このサイクルを一般的なテクニカルインディケータの適応化に使うのが無難なところではないかという結論に達しました。
実際、この本でもRSI、ストキャスティックス、CCIの適応化について簡単に触れてあります。
その他のインディケータでもできそうだということで、やってみたのが下の図です。
別に珍しいインディケータではありません。移動平均に最高値、最安値のレンジ、MACD、ストキャスティックス、ADXなどです。ただ、いずれもパラメータと思われる部分にサイクルを使っています。そういう意味でパラメータフリー、あるいはダイナミックパラメータとでも呼ぶのかもしれません。
と、何だかすごそうに聞こえるかもしれませんが、実際、適応化インディケータは、パラメータを適当なものに固定した場合と比べてもそれほど大きな差はありません。
適応化というのはパラメータが色々と変わりますが、相場に応じて最適に変わっているわけではありません。ただ、全くランダムに変わるよりはましかなという程度です。
でも、個人的には、パラメータが固定されているとどうしても最適化したくなるという悪い癖を抑えることができるので、気分的に楽になります。
そういう気分的な効果だけなので、面倒な割に効果が少ないと言われればその通りです。
そんなところなので、この記事で紹介したMT4用のインディケータは、今のところ公開する予定はありませんが、β版でよろしければこちらのグループに公開していますので、アクセスしてみてください。
http://groups.yahoo.co.jp/group/forex-bigwave/
為替ブログランキング 現在22位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
今日のポジション(EUR/CHF)
今日で3月も終わりです。
今月もマイナスだったかな。AUD, NZD の下降トレンドに乗れなかったので、それ以外はちょっと難しい展開でした。まあ自動売買以外のシステムトレードは始めたばかりなので、これからです。
エグジットは自動だから半自動売買かな。
今日のポジションです。EUR/USD、USD/CAD ストップロスでクローズです。
新規にEUR/CHF ポジりました。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
USD/CAD Long 0.1k 1.1654 Closed at 1.1643
EUR/USD Short 0.1k 1.2098 Closed at 1.2109
EUR/CAD Long 0.5k 1.4053
EUR/CHF Long 0.5k 1.5779
為替ブログランキング 現在23位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
2006年03月30日
FXDD で MetaTrader4
皆さん、どこの MetaTrader4 使ってますか?
たいていの人は開発元である、MetaQuotes からダウンロードしたものを使っていると思います。
他にも MetaTrader4 をプラットフォームとして採用しているブローカーから MetaTrader4 をダウンロードすることができます。
それらは何が違うのでしょうか?
基本的に MetaTrader4 のソフトウェアとしては違いはありません。違うのは、取り扱いペア、取引最小ロット数、為替データそのものです。あとサーバーの安定性も多少違うようです。
DEMOアカウントで使う分にはどこも無料なので、色々と試してみるとよいでしょう。
その中の下のほうに載っている FXDD は、以前 MetaTrader3 しか対応していなかったのですが、最近、DEMO だけですが MetaTrader4 に対応しました。
ダウンロードは、ここからできます。
FXDD は、スプレッドが狭いのがメリットです。取り扱いペアは19ペアです。詳しくはこちらの記事をご覧ください。
為替ブログランキング 現在21位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
MT4入門(7) - カスタムインディケータの作り方(4)
- 手ぶら
- 14:30
- コメントする
- トラックバックする
- カテゴリー:MetaTrader4入門
MetaTrader4入門の第7回目です。
今回の題目は
「カスタムインディケータの作り方(4) - オシレータ系インディケータの作成」
です。
移動平均のようにチャート上のプライスとの関係を表すインディケータはチャート上に表示させますが、プライスと直接関係のないオシレータ系のインディケータはチャートとは別ウインドウに表示させます。
その方法は簡単です。
#property indicator_chart_window
の代わりに
#property indicator_separate_window
と書き換えるだけです。
オシレータ系の中で最も簡単なのはn日前との差を取ったモメンタムでしょう。
ここで、n がパラメータとなるので、前回同様に Mom_Period という外部変数として指定すれば、インディケータのプログラムはこのようになります。

終値 Close[i] と、Mom_Period 日前の終値 Close[i+Mom_Period] との差を取ればいいだけです。
これを適当なチャートにアタッチするとこんな感じになります。
特に問題はありませんが、ここでちょっと [Home] キーを押してチャートの最初に戻ってみます。
最初の方が極端に大きい値になっておかしいですね。これはチャートの最初の部分では、過去のデータをすべて0として計算してしまっているので、差が大きな値になってしまったのです。
このように値がおかしくなる部分は表示させない方法と、そういう部分を最初から計算させないという方法とがあります。簡単なのはおかしいところを表示させない方法で init() 関数中に次のような命令を書いておきます。
SetIndexDrawBegin(0, Mom_Period);
これは、0番目のインディケータをチャートの最初からカウントしてMom_Period 番目から表示するという意味です。Buf0[i]の i の位置とは違うので注意してください。
すると、正しくモメンタムが計算された部分から表示させることができます。
今日はここまで、ではつまらないので、もう一つオシレータのサンプルを作ってみます。
今度はちょっと複雑になりますが、ストキャスティックスです。
その中でも、いわゆるファストストキャスティックスと呼ばれている、各バーの終値が過去nバーのうちの最安値と最高値のレンジの中でどのくらいに位置するのかを表すインディケータです。
過去nバーの最安値、最高値を求める関数もあるのですが、ここでは、if文を使って計算させてみます。

ちょっと変数を宣言する位置が変わっていて混乱する人がいるかもしれませんが、MQL4では、変数の宣言はC言語のように関数のはじめにまとめて書くこともできますが、C++言語のように使う場所で宣言することもできるようです。
個人的には使う場所で宣言する方がわかりやすいと思うのですが、よくわからない人は真似をする必要はありません。
このプログラムでは、HH, LL にそれぞれ、ST_Period の数のバーの間で最高値、最安値を求めています。
最初に HH=0, LL=10000 と具体的な数値を代入していますが、この数には意味はありません。高値、安値を順次更新していくので、最初の高値には十分に小さい値、安値には十分に大きい値を入れておけば、必ず更新されるということです。
if文の説明も詳しいことはまたの機会に回しますが、ここでは、j という変数でバーの位置をずらしていきながら、高値が HH を上回れば、HH を更新、安値が LL を下回れば、LL を更新していき、これを ST_Period の数だけ繰り返すと、 HH, LL にそれぞれ最高値、最安値が計算されていることになります。
そしてその後に
Buf0[i] = (Close[i]-LL) / (HH-LL) * 100;
という式で終値が HH と LL の間のどのくらいの位置にくるかを%で表します。
LL に近ければ0に近づき、HHに近ければ、100に近づきます。
これをチャートにアタッチするとこんな感じになります。
このように%表示されるインディケータではよく、80%以上になったら、とか20%以下になったらという基準レベルを設定する場合が多いですね。
そのようなラインはどうやったら表示されるでしょうか。
ラインを別のインディケータとして書かせる方法もあるでしょうが、ここでは簡単に #property 命令で次のように書くことができます。
#property indicator_level1 20
#property indicator_level2 80
これで、20と80のところにラインが引けます。ついでに最大値と最小値が決まっているときは、次のように書くことができます。
#property indicator_minimum 0
#property indicator_maximum 100
するとチャートの一番下が0、一番上が100となります。
これでちょっとは見やすくなったのではないでしょうか。
今回扱ったサンプルプログラムを Sample4_Ind.mq4, Sample5_Ind.mq4 としてアップロードしておきます。
Download Sample4_Ind.mq4
Download Sample5_Ind.mq4
次回は組込み関数の便利な使い方について説明する予定です。
為替ブログランキング 現在25位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
今週のポジション
1867年3月30日、アメリカがアラスカを買収。
へー、昔はロシアだったんですね。知らなかった。
では、今日のポジションです。欧州系のクロスで大きな動きがありました。ストップロスにかかりクローズです。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
USD/CAD Long 0.1k 1.1654
EUR/JPY Short 0.1k 141.54 Closed at 141.73
EUR/USD Short 0.1k 1.2098
GBP/CHF Long 0.1k 2.2734 Closed at 2.2732
EUR/GBP Short 0.5k 0.6898 Closed st 0.6917
EUR/CAD Long 0.5k 1.4053
為替ブログランキング 現在26位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
2006年03月29日
システムの最適化と適応化の違い
- 手ぶら
- 17:56
- コメント (3)
- トラックバックする
- カテゴリー:システムトレーディング
最近、システムトレーディングに関する記事を書いていませんでした。
というのも、最近手ぶらで為替取引してないんです。
でも、完全なメカニカルトレーディングではありませんが、一応、テクニカル分析に基づいてトレードしてます。
今日のお題は「システムの最適化と適応化の違い」です。
ここでは完全にメカニカルなトレーディングでなくても、テクニカル分析に従って取引することも含めてシステムトレーディングと呼ぶことにします。
まず、「システムの最適化」です。
「最適化」って言葉、何かいい響きですね。完璧っていう感じです。
でも、このブログでも何度も触れていますが、システムの最適化というのは、過去のデータに対して何かを最大化、あるいは最小化することです。通常、最大化したいのは利益で、最小化したいのは損失でしょうね。
で、実際どうやることでしょう。
簡単な例として移動平均のクロスを売買のシグナルとするシステムを考えてみましょう。
例えば、5日と20日の移動平均を使った場合と7日と26日の移動平均を使った場合とでは、売買ポイントが変わるので、当然利益は変わってきます。じゃあ他のパラメータではどうか?ということで、二つのパラメータの組合せを片っ端から試してみれば、利益が最大となるパラメータが見つかるはずです。
この場合、パラメータの組合せが少ないので、簡単にパラメータの最適値が求まります。
果たしてこのシステムは最適なものでしょうか?
もちろん違います。ここで最適化したのはあくまで過去のデータに対してです。将来そうなる保証はありません。
これをいわゆる「カーブフィッティング」と言い、システムの間違った最適化の典型例です。
システムにパラメータがあれば、必ず最適化することができ、たいていの場合、それはカーブフィッティングとなります。
では、パラメータがなければいいのか、ということになりますが、データを処理するのに全くパラメータフリーというシステムもできません。
そこで、パラメータを相場データに合わせて変化させればどうか、ということが考えられます。
簡単な例では、変化が激しい局面では、それに追随させるために、移動平均の期間を短くし、ゆっくり変化する局面では、大きなトレンドを追えばいいので、移動平均の期間を長くするといった感じです。
ほかに、何日間かの変化幅の平均を取り、それを基にパラメータを変化させることも考えられます。
こういう手法を適応化と言います。英語だと Adaptive 何とかという言い方になります。
適応化システムでも現在の相場の状態が正確にわかるわけではないので、当然最適なシステムとは言えません。
しかし、パラメータが変化することにより、利益や損失の度合いを分散させることはできると思われます。
パラメータの組合せの中で利益が出る組合せの方が多ければ、必ずしも利益を最大化させることにはなりませんが、その適応化がうまく機能していれば、変動を抑えて、システムを安定化させる効果は期待できるのではないかと思います。
ちょっと長くなってしまったので、今考えている具体的な適応化の方法については次の記事で紹介します。
為替ブログランキング 現在25位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
今日のポジション(EUR/CAD)
1683年3月29日、八百屋お七、火あぶりの刑となる。
何の話かと思ったら、このお七が丙午(ひのえうま)生れであったことから、丙午生れの女子が疎まれるようになったんだそうです。(本当かどうかわかりませんが)
丙午って何?っていう人も多いでしょうが、最近の丙午の年は1966年です。その年だけ出生数が激減しています。(出生数の資料)
この頃は男女の産み分けもできなかったでしょうから、女子が生まれるのを嫌って出産自体を控えたのでしょうね。次の丙午はその60年後の2026年ですが、その頃までこんな迷信が信じられているかどうか興味あるところです。
では、今日のポジションです。昨日色々動きがありました。
ストップロスでクローズしたポジションが3つ。
EUR/CAD は途転してロングに。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
CHF/JPY Short 0.1k 90.06 closed at 90.02
USD/CAD Long 0.1k 1.1654
GBP/USD Short 0.1k 1.7550 closed at 1.7498
USD/CHF Long 0.1k 1.2920 closed at 1.2989
EUR/JPY Short 0.1k 141.54
EUR/USD Short 0.1k 1.2098
GBP/CHF Long 0.1k 2.2734
EUR/GBP Short 0.5k 0.6898
EUR/CAD Short 0.5k 1.3950 reversed at 1.4053
為替ブログランキング 現在23位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
2006年03月28日
今日のポジション
今日もネタなしです。
今日のポジションですが、USD/JPY ストップロスでクローズしました。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
CHF/JPY Short 0.1k 90.06
USD/CAD Long 0.1k 1.1654
GBP/USD Short 0.1k 1.7550
USD/CHF Long 0.1k 1.2920
EUR/JPY Short 0.1k 141.54
EUR/USD Short 0.1k 1.2098
USD/JPY Long 0.1k 117.34 Closed at 116.56
GBP/CHF Long 0.1k 2.2734
EUR/GBP Short 0.5k 0.6898
EUR/CAD Short 0.5k 1.3950
為替ブログランキング 現在17位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
2006年03月27日
MT4入門(6) - カスタムインディケータの作り方(4)
- 手ぶら
- 13:48
- コメント (1)
- トラックバックする
- カテゴリー:MetaTrader4入門
MetaTrader4入門の第6回目です。
今回は
「カスタムインディケータの作り方(4) - インディケータのパラメータ設定」
と題してお話しします。
これまで簡単な例として4日移動平均のインディケータを作ってきましたが、移動平均はいつも4日というわけではありません。
移動平均を取る期間を変えるのにどうすればいいでしょうか。今までの例のように毎回式を書き換えるのは大変です。
そこで、移動平均の期間を変数にして、その変数を変えるだけで済むようなプログラムを書いてみます。

新たに移動平均の期間を表す MA_Period という変数を宣言し、ここでは仮に4と初期値を代入します。
もう一つ繰り返しを制御するために j という変数を宣言します。
前回、
Buf0[i] = (Close[i]+Close[i+1]+Close[i+2]+Close[i+3])/4; //式(1)
とだけ書いた部分がちょっと複雑になりますが、順番に見てましょう。
for(j=0; j < MA_Period; j++)
の部分は、j が 0 から j < MA_Period の範囲で1ずつ増えていく繰り返しですが、この例では、j=0, j=1, j=2, j=3 と4回の繰り返しを行うことになるので、
Buf0[i] = Buf0[i] + Close[i+0]; //式(2)
Buf0[i] = Buf0[i] + Close[i+1];
Buf0[i] = Buf0[i] + Close[i+2];
Buf0[i] = Buf0[i] + Close[i+3];
というように、終値の値を1個ずつ足していくことがわかると思います。そして、4つの終値を全部足してから
Buf0[i] = Buf0[i] / MA_Period;
のように MA_Period(ここでは4)で割れば、式(1)と同じ結果になるのです。
ここで、for 文の前に
Buf0[i] = 0;
のようにBuf0[i] を初期化してあります。初期化しなくてもうまくいく場合もありますが、式(2)のように、宣言されただけの Buf0[i] の値を使って計算する式では、最初に0が入っているという保証はないので、念のために0の代入を明示しておく方が確実です。
あと、C言語をご存知の方には説明する必要はないと思いますが、
Buf0[i] = Buf0[i] + Close[i+3];
Buf0[i] = Buf0[i] / MA_Period;
のように、左辺と同じ変数に対して加減乗除演算を行う場合、
Buf0[i] += Close[i+3];
Buf0[i] /= MA_Period;
のように += とか /= という演算子を使って簡単に書くことができます。慣れてくるとこのような書き方を使った方が便利かもしれません。
これで、MA_Period の初期値を変えるだけで、移動平均の期間を変えることができるようになりましたが、それでも、このままでは変える度にコンパイルし直さなくてはなりません。
もうちょっと簡単にパラメータを変更する方法として、この変数を init(),start() などの外側、つまり外部変数として宣言する方法があります。書き方としては、関数の外部の位置(どこでもいいのですが、わかりやすく #property 命令の後くらい)に
extern int MA_Period=4;
のように extern という予約語を付けて宣言します。
するとこの変数は、インディケータをアタッチするとき、あるいは、アタッチ後でも、MetaTrader のメニューの [Charts]-[Indicators List] で該当するインディケータを選択して、Edit ボタンを押すと現れるウインドウ上の Input タブに表示されるようになります。
ここで、適当な数値に変更すると、コンパイルしなくても、すぐにチャート上に反映されます。
ここまでの追加を行ったファイルを Sample3_Ind.mq4 としておきます。(Download Sample3_Ind.mq4)
あともう一つ、便利な使い方としてテンプレートの使用をお勧めします。
チャートのスタイルやインディケータを自分用に設定した後に、チャート上で右クリック、あるいは、MetaTrader のメニュー [Charts]-[Templates]で、適当な名前をつけてセーブしておきます。
間違ってそのチャートを閉じてしまった場合や、別のチャートに対して同じスタイル、同じインディケータ、同じパラメータを設定したい場合にテンプレートのロードを行うと、一発で設定を再現してくれるので、いちいち設定をやり直す手間が省けて便利です。
ちなみにチャートのテンプレートが保存されているフォルダーは、MetaTrader をインストールしたフォルダーの下の templates というサブフォルダーです。experts の下にも同じ名前のフォルダーがあるので間違わないようにしてください。

今日はこんなところです。次回はチャートとは別ウインドウに表示させるオシレータ系のインディケータについて説明する予定です。
為替ブログランキング 現在16位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
今日のポジション
3月最後の週が始まりました。今日のポジションです。
変更なしです。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
CHF/JPY Short 0.1k 90.06
USD/CAD Long 0.1k 1.1654
GBP/USD Short 0.1k 1.7550
USD/CHF Long 0.1k 1.2920
EUR/JPY Short 0.1k 141.54
EUR/USD Short 0.1k 1.2098
USD/JPY Long 0.1k 117.34
GBP/CHF Long 0.1k 2.2734
EUR/GBP Short 0.5k 0.6898
EUR/CAD Short 0.5k 1.3950
為替ブログランキング 現在16位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
2006年03月24日
今日のポジション(EUR/GBP,EUR/CAD)
1185年3月24日、壇の浦の合戦、平家滅亡。
私が育った瀬戸内では各地に平家にまつわる伝説が残されています。
その一つに平家蟹というのがあります。甲羅が人の顔に似ているということから滅亡した平家が乗り移ったという伝説があります。
サーチしてみると、結構たくさんのサイトで紹介されています。
さて、今日のポジションです。
今日は新規ポジション EUR/GBP, EUR/CAD 建てました。ちょっと含み益が乗ってきたので、0.5kにしてみました。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
CHF/JPY Short 0.1k 90.06
USD/CAD Long 0.1k 1.1654
GBP/USD Short 0.1k 1.7550
USD/CHF Long 0.1k 1.2920
EUR/JPY Short 0.1k 141.54
EUR/USD Short 0.1k 1.2098
USD/JPY Long 0.1k 117.34
GBP/CHF Long 0.1k 2.2734
EUR/GBP Short 0.5k 0.6898 New
EUR/CAD Short 0.5k 1.3950 New
為替ブログランキング 現在7位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
2006年03月23日
シティバンクから海外送金する時の注意点
海外送金の話の続きです。
昨日、シティバンクで手数料が安くなるといういい話だけしましたが、いくつか注意する点があります。
まず、インターネットバンキングで海外送金する場合、予め送金先を登録する必要があります。
それもオンラインでできる手続きではなく、シティバンクのHPから申込書をダウンロードして、それに記入して郵送しないといけません。
間違いがなければ1週間くらいで登録されるようですが、間違っていた場合、元の申請書が送り返されてきて、書き直して再郵送と、結構時間がかかります。
もう一つ注意する点は、海外FX業者にアカウントを作っても、だいたいはアカウント番号が送金後に発行されるので、最初の送金時には New Account とか書かないといけないのですが、シティバンクでは、新規アカウントは登録できません。
この場合も申請書が送り返されてきて、窓口で送金するのと同じ書類が郵送されてきます。
これを郵送することで送金はできますが、結局、最初の送金は窓口扱いの4000円かかりました。
ただ、これまでアカウント作った海外業者の中で、FXDirectDealer だけが、アカウント作ったときに番号を発行してくれたので、送金先を登録してインターネットから送金できました。
まあシティバンクも使い方によっては便利なところもありますが、色々と制約もあるので、人によって好みが分かれるところかもしれません。
為替ブログランキング 現在7位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
今日のポジション
今日もネタなしです。今日のポジションも変化なしです。
5連敗中のナノロットポジションですが、珍しくUSD/JPY以外含み益が乗ってきています。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
CHF/JPY Short 0.1k 90.06
USD/CAD Long 0.1k 1.1654
GBP/USD Short 0.1k 1.7550
USD/CHF Long 0.1k 1.2920
EUR/JPY Short 0.1k 141.54
EUR/USD Short 0.1k 1.2098
USD/JPY Long 0.1k 117.34
GBP/CHF Long 0.1k 2.2734
為替ブログランキング 現在7位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
2006年03月22日
海外業者への送金方法
海外のFX業者にアカウントを作るのは、海外の銀行口座を作るのに比べれば格段に簡単です。
たいていの業者でオンライン申し込みができ、パスポートなどの身分証明をFAXか、添付ファイルで送ればすぐできます。
ただ、その後資金を送金するのが、国内の送金に比べると面倒です。手数料がかかるという問題もあります。
そういう意味で一番送金しやすいのが、FXCM だと思います。
クレジットカードで1ヶ月に5000ドルまでですが、手数料無料で送金できます。
特にドルで決済できるクレジットカード(日本ではシティカードしか知りませんが)なら、為替手数料もかかりません。
他の業者でも PayPalに対応していれば、クレジットカードで送金できます。ただ、その場合、送金額の3~5%程度の手数料がかかるところが多いようです。
銀行振込はどの業者も対応していますが、これは送金手数料がかかります。ただ、1回あたりの手数料(だいたい数千円)は一定なので、送金額によってはPayPalより安い場合もあります。
ちなみに送金手数料を安くすることもできます。シティバンクを例に取ると、
窓口で手続きすると、4000円
インターネットバンキングで、3500円
100万円以上預けておくと、2000円
1000万円以上預けておくと、なんと無料!
と、無料にすることもできます。まあ1000万円もあれば数千円なんてわずかでしょうけど。
ところで、日本でもFX業者が増えてきていますが、海外はさらに多くて、中には詐欺まがいの業者も多いと聞きます。
色々とFX関連の掲示板で噂を調べたりしますが、はっきりと "SCAM" と書いてある業者はやめた方がいいでしょう。
あと、あまりに条件の良過ぎるところもまず疑った方がいいでしょう。例えば、すべてのペアのスプレッドが2pipsなどです。
私がアカウントを作る際に参考にするサイトの一つに、Forex Street というのがあります。
ここで紹介されていれば絶対というわけではないのですが、少なくとも資金を持ち逃げするような悪質なところは載っていないと思います。
前回ちょっと怪しいかなと紹介したGFX Group SAですが、最近Forex Street にも紹介されているようなので、そんなに怪しくないかと言う感じです。
為替ブログランキング 現在8位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
今日のポジション(EUR/USD,USD/JPY,GBP/CHF)
今日のネタはありませんが、WBCで王ジャパンの優勝よかったですね。
私が子供の頃、ちょうど王選手が世界のホームラン王になるなど活躍していたので、アンチ巨人でしたが、王選手だけは特別でした。再び世界の王になった感じですね。
ここはナボナでも買ってお祝いしたいところですね。(^^)
さて、今日のポジションです。
今日も新規ポジション EUR/USD, USD/JPY, GBP/CHF 建てました。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
CHF/JPY Short 0.1k 90.06
USD/CAD Long 0.1k 1.1654
GBP/USD Short 0.1k 1.7550
USD/CHF Long 0.1k 1.2920
EUR/JPY Short 0.1k 141.54
EUR/USD Short 0.1k 1.2098 New
USD/JPY Long 0.1k 117.34 New
GBP/CHF Long 0.1k 2.2734 New
為替ブログランキング 現在7位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
2006年03月21日
今日のポジション(USD/CAD,GBP/USD,USD/CHF,EUR/JPY)
今日は春分の日ですね。ところで、春分の日とか秋分の日とかは年によって微妙に日が変わりますよね。これは天文学的に仕方のないことなのですが、この計算方法とか暦に関する詳しいサイトがあります。
天文学を相場の予想に使う人もいるくらいですから、何かの参考になるのではないでしょうか。
では、今日のポジションです。0.1kの遊びポジション乱発です。
USD/CAD、ストップロスでリバースしました。
GBP/USD, USD/CHF, EUR/JPY 新規にポジション構築しました。
ちなみにこの遊びポジション5連敗中です。ご参考までに。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
CHF/JPY Short 0.1k 90.06
USD/CAD Long 0.1k 1.1654 Reverse
GBP/USD Short 0.1k 1.7550 New
USD/CHF Long 0.1k 1.2920 New
EUR/JPY Short 0.1k 141.54 New
為替ブログランキング 現在9位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
2006年03月20日
MT4入門(5) - カスタムインディケータの作り方(3)
- 手ぶら
- 21:04
- コメントする
- トラックバックする
- カテゴリー:MetaTrader4入門
MT4入門の第5回目です。
前回ちょっと長くなってしまい、自分で読み直してみても嫌になってしまったので、これからは1回の記事は短めにしようと思います。
今回は
「カスタムインディケータの作り方(3) - インディケータの色と線種を変えよう」
です。
前回インディケータの値を入れておく配列についてお話ししましたが、実は配列を定義して計算結果を代入するだけではインディケータは表示されません。
実際にインディケータを表示させるためには、SetIndexBuffer() という関数で、配列を実際のインディケータに割り当ててやる必要があります。この処理は最初に一度だけやればいいので、init() という初期化関数の中に書くことにします。
SetIndexBuffer(0, Buf0);
この例は、Buf0 という配列を0番目のインディケータに割り当てることを意味します。ここで注意することは、インディケータの番号が1番からではなく、0番目から数えるということです。なので、複数あるときは
SetIndexBuffer(0,Buf0);
SetIndexBuffer(1,Buf1);
SetIndexBuffer(2,Buf2);
:
:
のように最初のパラメータを1ずつ増やしていけばよいのです。
インディケータの色と線種もこのinit()関数の中で指定することで変えられます。
そのための関数として SetIndexStyle() を使います。この関数は5つのパラメータがあります。
SetIndexStyle(index, type, style, width, clr)
それぞれのパラメータの意味は
index : インディケータの番号(0,1,2,3,4,5,6,7)
type : インディケータの種類(DRAW_LINE, DRAW_SECTION, DRAW_HISTOGRAM, DRAW_ARROW, DRAW_ZIGZAG, DRAW_NONE)
style : ラインの種類(STYLE_SOLID, STYLE_DASH, STYLE_DOT, STYLE_DASHDOT, STYLE_DASHDOTDOT)
width : ラインの幅(1,2,3,4,5)
clr : ラインの色(Black, Red, Blue など)
です。
インディケータの種類は色々ありますが、ここでは値を直線で結んでいくDRAW_LINEの場合のみ説明します。
ラインの種類は STYLE_SOLIDが実線でその他が点線です。
ラインのサンプルはこんな感じです。DOT が 点で DASH がちょっと長い線になっています。
ラインの幅は文字通りで、幅をドットで表します。
ラインの色の表し方は数値で表す方法もありますが、色定数として予め割り当てられているものを使う方が便利です。
MetaEditor の Navigator ウインドウの Dictionary タブから Standard ccnstants - Web colors を選ぶと一覧が表示されます。
実際のプログラム中には、
SetIndexStyle(0, DRAW_LINE, STYLE_DOT, 1, Red);
のように書きます。
これは、0番目のインディケータに Red の色で1ドット幅の点線のラインを引くことを表します。
チャート上ではこんな感じになります。
この行を追加したサンプルプログラムを(Sample2_Ind.mq4) としておきます。色々とパラメータを変えてどうなるか確かめてみてください。
プログラムを変えたときは必ずF5を押してコンパイルしてエラーが出ないことを確認してください。
あと、インディケータの表示はコンパイルしただけでは反映されませんので、タイムフレームを変えるか、MetaTrader を再起動するか、インディケータを一旦削除して再度挿入するかなどしてみてください。
今日はこんなところです。次回はプログラムを変えないでパラメータを変える方法などを説明する予定です。
為替ブログランキング 現在7位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
今日のポジション(CHF/JPY)
「今日のポジション」、今日2回目です。CHF/JPY 売りポジション作りました。0.1k なので遊びですが。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
USD/CAD Short 0.1k 1.1574
CHF/JPY Short 0.1k 90.06 New!
為替ブログランキング 現在8位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
今日のポジション(AUD/USD)
1995年3月20日、地下鉄サリン事件
まだ記憶に新しいです。知り合いで事件の数本前の地下鉄に乗った人がいて、人ごとではありませんでした。
では、今日のポジションです。AUD/USDストップロスでクローズしました。次からはストップロスでリバースした方がよさそうです。
USD/JPY Long 70k 117.43
EUR/JPY Long 10k 139.70
GBP/JPY Long 10k 204.50
AUD/USD Long 0.1k 0.7356 closed at 0.7300
USD/CAD Short 0.1k 1.1574
為替ブログランキング 現在8位
「次の記事も読んでみたい!」
と思った方はクリックにご協力ください。↑
2006年03月18日
MT4入門(4) - カスタムインディケータの作り方(2)
- 手ぶら
- 18:03
- コメントする
- トラックバックする
- カテゴリー:MetaTrader4入門
MT4入門の第4回目で、前回の「カスタムインディケータの作り方」の続きです。
「カスタムインディケータの作り方(2) - プログラミングの基礎」
というお題です。基礎ということでちょっと堅い部分もありますが、やっぱり基礎をしっかり勉強しておかないと応用がききませんので、ここは焦らずにお付き合い下さい。
MQL4のプログラムはC言語と同様に関数というブロックを並べることで構成されます。前回のサンプルプログラム(Sample1_Ind.mq4) 中に
int init()
{
}
とか、
int start()
{
}
のような書式が出てきましたが、このかたまりを関数と呼びます。
関数はユーザーが自由に名前をつけて作ることができますが、MQL4では、以下の3つの関数が特別な関数として予約されています。
init()
start()
deinit()
カスタムインディケータで必ず必要なのは、init() と start() です。
start()はインディケータの本体で、init()は初期化のための関数です。
deinit() は後始末が必要なときに使いますが、Sample1_Ind では不要なので使っていません。
では、次に関数の書き方について見ていきます。
関数の中身は基本的にはインディケータの計算なので、
・変数の定義
・計算式の記述
・戻り値の指定
の順に書いていきます。
ますは変数の定義です。
変数を定義するときにはその変数の型を指定しなくてはいけません。
MQL4で使える変数の型としては色々ありますが、ここでは、数を表す型として int とdouble を紹介します。
int は integer の略で整数を表します。
double は実数を表すのですが、なぜ double というのかというと、C言語で実数を表す型として単精度(float)と倍精度(double)というのがあり、その倍精度の方をそのまま使ったのだと思います。
要するに、整数はint、プライスやインディケータの値など小数がつくものは double を使えばいいというわけです。
実際の変数の定義の仕方は
int i;
double x;
などと書くだけでもいいですが、
int i=0;
double x=1.05;
のように初期値を指定することもできます。
定義した後にすぐ具体的な値が入力される場合は定義だけでもいいですが、初期化しないと何の値が入っているかわからないので、できれば初期値を書いておいた方が確実です。
あ、ここで言い忘れましたが、MQL4 では、定義や式の最後にセミコロン ; を書くのを忘れないようにしましょう。これもC言語と同じスタイルです。
ただ、関数のように {} で囲んだときは最後に ; を書く必要はありません。
慣れてもセミコロンはよく忘れることがあるので、コンパイルでエラーが出たときにはエラーの行の前でセミコロンが抜けてないかチェックしてみてください。
コンパイルした後、エラーの行をダブルクリックするとその行に印がつきますが、下の図のように直接セミコロンが抜けているというエラーが出なくて、その次の行でエラーが出る場合もあるので注意が必要です。
次に変数の中でも配列変数について説明します。
配列変数は変数をいくつか並べたものですが、それぞれの変数に対して同じ計算をさせたり、変数をまとめて別の関数に渡したりするときに使います。
関数の中で配列変数を宣言する場合、通常確保する配列のサイズを指定します。例えば、
double x[10];
と書くと、10個の実数の変数を確保したことになります。
但し、実際に使える変数は、x[0] から x[9] までの10個となります。x[10] は使えないので注意してください。
では、ここまで説明したところでサンプルの Sample1_Ind.mq4 に戻ってみます。
start() の関数の中で Buf0[i] というように配列を使っていますが、よく見ると、start() の中で Buf0 の定義を行っていません。通常定義しない変数は使えないので、コンパイルでエラーが出るはずですが、この場合エラーは出ません。
どうしてかというと、関数の外側の #property 命令の後に
double Buf0[];
という形で定義しているからです。
なぜ、こんなところで定義するのかいうと、関数の中と外ではちょっと意味が違うのです。
関数の内部で定義されている変数はその関数の中だけで有効です。言い換えると、同じ名前の変数を別の関数の中で使ってもお互い影響を受けないということです。これは変数の有効な範囲を関数内に限定することで、プログラムの間違いを少なくするためです。
それに対して関数の外部で宣言した変数はそれぞれの関数の中も含めてプログラム全体で有効になります。
サンプルプログラムでは、Buf0 の配列にインディケータの値を計算させて入れるのですが、このようにチャートに表示させる値はプログラム全体で使う必要があるので、外部で宣言するのです。
あと、もう一つ注意する点は、宣言時に Buf0[] のように配列のサイズを指定していない点です。
これはちょっと特殊な指定の仕方ですが、チャート上では、過去に何個のデータがあるかわからないし、時間が経てば次々に増えていくので、予め配列のサイズが決められないのです。
MQL4では、外部で宣言したサイズなしの配列の最初の値、つまり、Buf0[0] は常に一番最新のバーでの値になります。そして、Bu0f[1]は1つ前のバー、Buf0[2]は二つ前のバーでの値ということになります。新しいバーが出ると、同じようなルールで配列の値がすべて置き換わります。
チャート上の始値、安値、高値、終値も同様のルールで、予約された配列変数に格納されます。つまり、最新のバーの始値、安値、高値、終値がそれぞれ、Open[0], Low[0], High[0], Close[0] という配列に入っていて、一つ前のバーは、Open[1], Low[1], High[1], Close[1]、二つ前のバーはOpen[2], Low[2], High[2], Close[2]となります。

このようにチャート上のバーの位置と配列の対応がわかったところでサンプルプログラムを見てみます。
for(i=limit-1; i>=0; i--)
{
Buf0[i] = (Close[i]+Close[i+1]+Close[i+2]+Close[i+3])/4;
}
の部分は繰り返し計算を表します。
変数 i を limit-1 から 1ずつ減らして i>=0 の範囲で {} の中身を繰り返すというものです。i-- というのは i=i-1 という意味です。
これは言い換えると i=0 から limit-1 まで1ずつ増やして繰り返すのと同じことなので、
for(i=0; i < limit; i++)
と書くこともできます。同じく i++ は i=i+1 の意味です。要するに for の後に、(変数の初期値;繰り返す範囲;変数の増やし方)を指定して繰り返しの制御を行っているのです。
この書き方で説明すると、この繰り返しは
Buf0[0] = (Close[0]+Close[1]+Close[2]+Close[3])/4;
Buf0[1] = (Close[1]+Close[2]+Close[3]+Close[4])/4;
Buf0[2] = (Close[2]+Close[3]+Close[4]+Close[5])/4;
:
:
の順に、それぞれのバーで、そのバーから過去に遡った4つのバーの終値を平均しています。いわゆる4バーの単純移動平均です。
こういう例では、i=0 から計算を始めても問題はありませんが、EMAのようにインディケータそのものの過去の値を計算に利用する場合、
Buf0[0] = (Close[0]+Buf[1])/2;
Buf0[1] = (Close[1]+Buf[2])/2;
Buf0[2] = (Close[2]+Buf[3])/2;
:
:
の順番だと、Buf0[0] の計算にBuf0[1]を使っていますが、この時点では Buf0[1] はまだ計算されていません。これはプログラムの記述上間違いではないのでコンパイルではエラーは出ませんが、当然ながら正しい結果にはなりません。コンパイルでエラーが出ないけど結果がおかしいというのが最も間違いを見つけにくいパターンです。
なので、こういう場合があるということも想定して、インディケータの繰り返し計算では、
:
:
Buf0[2] = (Close[2]+Buf[3])/2;
Buf0[1] = (Close[1]+Buf[2])/2;
Buf0[0] = (Close[0]+Buf[1])/2;
となるように、i=limit-1 から始めていく順番の方が間違いがなくてがいいのです。
ところで、limit という変数は、
limit = Bars-IndicatorCounted();
と定義されています。Bars は、Open, Close などと同様に予め定義されている特別な変数で、チャート上のバーの総数を表します。なので、limit=Bar; だけでもいいのですが、レートが変化する度に全部のバーの計算をすると大変なので、IndicatoCounted()という過去の変化しなかったバーの数を返す関数を使って、それをBars から引くことで、変化したバーの部分だけ計算させるようにするのです。
最後にそれぞれの関数の最後に return(0) と書かれていますが、これが戻り値の指定です。この場合、0を戻すので、init()、 start()の値がそれぞれ0となりますが、なぜ0を戻すかということには深い意味はありません。
今日はこんなところです。次回はインディケータの表示の変え方などを説明する予定です。今回よりは実践的になると思います。
この記事、書くのに結構時間がかかります。次回の記事も読んでみたい方は下のクリックにご協力ください。
為替ブログランキング 現在10位
へーっと思った方はクリックにご協力ください↑
2006年03月その他のエントリー
2006年03月31日
2006年03月30日
2006年03月29日
2006年03月28日
2006年03月27日
2006年03月24日
2006年03月23日
2006年03月22日
2006年03月21日
2006年03月20日
2006年03月18日
2006年03月17日
2006年03月16日
2006年03月15日
2006年03月14日
2006年03月13日
2006年03月10日
2006年03月09日
2006年03月08日
2006年03月07日
2006年03月06日
2006年03月05日
2006年03月03日
2006年03月02日
2006年03月01日