本ブログは、MetaTrader を利用して、EA プログラムを自作紹介するサイトです。
決して儲かるシステムを紹介するものではありませんのであしからず・・・
もし、記事中に嘘偽りを発見された方、ご連絡頂けると幸いです。
なお、過去に作成した EA プログラムの作り方はこちらになります。

Loop_Entry : 同じ指値エントリーを繰り返し実行するプログラムです。
estTurn : 高値(安値)で反対売買を実行するプログラムです。

2010年4月26日月曜日

iMA() の使い方

早速、トレンド察知用のプログラムロジックを考えてみたいと思います。

まずは移動平均線の情報を取得する方法を調べてみます。

移動平均線の情報は iMA() を使うことで取得でき、例えば、20 時間分の移動平均値の終値を取得するには次のように記載します。

iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);

NULL:チャート上で表示されている通貨を使う
0:チャート上で表示されているローソク足の時間枠を使う
20:移動平均値を計算するために利用するローソク足数
0:画面にグラフ表示する際のシフト値
MODE_SMA:移動平均値の計算方法で MODE_SMA は単純移動平均で計算
PRICE_CLOSE:移動平均値を出す際に利用する価格で PRICE_CLOSE は終値を指す
0:現在のローソク足から何本前の移動平均値を取得するか指定

今回は「XX 回移動平均値を超えたら」という判断が必要になるため、iMA() の一番最後のパラメーターを順次変更しながら過去 XX 回分の移動平均値を取得することになります。

つまり、最後の 0 の部分を過去 XX 回分指定できるように次のように変数指定にし、必要回数分回すようにします。

y=10;
for(x=0; x<y; x++)
{
iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,x)
}

上記は、x の値が 0(現在のローソク足)から 10(過去 10 個分)までローソク足の移動平均値を取得します。

2010年4月25日日曜日

トレンド察知ルール

前回からトレンド形成を察知する手段がないか、無い知恵を絞りながら移動平均線をジィーーーーーと眺めていて気づいたのは、「トレンド形成中は平均線より 上か下にローソク足が続けて存在する」という事ぐらいでした。

#誰でも思いつく当たり前のことですが・・・

あと、 ジーーーーーと眺めている時に思ったことは、「せめてトレンドが形成されている期間に1回でもいいから取引して利益が出せれば・・・」くらいです。

今 の私に考え付くことはこれで精一杯です・・・
なので、この2つの思いつきに沿ったプログラムのルールを考えてみることにします。

ま ずトレンド形成を察知する手段として「移動平均線よりローソク足が続けて存在」をもう少し具体的にしたいと思います。

図の赤枠の期間がトレンドが形成されている状態だと思いますが、この期間を見てみると移動平均算出期間が長い平均線ほど、ローソク足が平均線の上下に存在し続けています。

例えば赤枠の期間中、 5 時間線はトレンドの途中でローソク足が平均線をまたがってしまうけど、20 時間線は 1 度もローソク足が平均線をまたぐことはありません。

そのため、

1.安値が移動平均線(20時間)を上回っているローソクが XX 回続いたら買いトレンド発生
2.高値が移動平均線(20時間)を下回っているローソクが XX 回続いたら売りトレンド発生

をルールとしたいと思います。

# XX 回の部分は実際にプログラムを作ってバックテストで調整してみようと思います。

2010年4月14日水曜日

トレンド発生を知るにはどうすれば

今日は昼食に坦々麺を食べたんですが、めっちゃ辛かったです。

メニューに辛いと書いてあったので、分かってて注文したのですが予想以上の辛さで、汗と涙が止まりませんでした。

今、ちょっとお腹痛いです・・・

------------------------------------------------------------------------

さて、前回の EA の事は忘れ、新たな EA でも作ろうかと思います。

とは言っても、前回の EA で課題だった「トレンドを形成した場合」の対処方法として、特にいい方法が思いつかなかったのでボリンジャーバンドを利用しましたが、トレンドが発生して いるかどうかを知る手段は何かないのでしょうか?

もしかしたら何かよい統計手法ロジックやチャット分析ツールがあるのかも知れませんが、知識の無い自分には思いつきません。

パッと思いつくのは「移動平均」くらいしかないので、とりあえずチャートに表示して眺めながら何か良いルールが無いか考えてみます。

ちなみに、MetaTrader のチャート上に「移動平均」を表示するには、ナビゲータウィンドウから<罫線分析ツール>-<Moving Average>を右クリックで選択し<チャートで表示>をクリックすると表示されます。

下の図は、終値について 5時間、10時間、15時間、20時間の移動平均を表示したものです。


何か思いつかないか、じぃーーーーーーっと眺めてみます。

2010年4月13日火曜日

結果は微妙です

estTurnプログラムにボリンジャー値を利用したルールを追加し、前回と同様の条件でバックテストを行ってみました。

結果は、一応利益が出たようですが、予想通り極端に注文回数が減ってしまいました。


もう少し注文回数を増やしたいなと思い、テスト条件を5分足で行ってみたところ、今度は利益がマイナスになってしまいました・・・



どんな局面でも利益をだせる EA ではなさそうです。どうやら、estTurn プログラムはお蔵行きですかね・・・

また、新しいルールを考えて見ます。

2010年4月12日月曜日

ボリンジャールール組込み完了

今日の夕食はチンジャオロースーでした。
私が作れる数少ないレパートリーです。

気が向いた時にたまに作るのですが、子供達には結構評判よいです。

といっても、野菜切ってレトルトのソースと絡めるだけなので、殆ど料理の腕は関係ありませんが・・・

----------------------------------------------------------

さて、バックテストでイマイチの結果だった estTurnプログラムの勝率を上げるためにボリンジャーバンドを使ったルールを追加してみます。

プログラムの書き方は「直近50足分の高値(安値)と比較」する方法と大して変わりません。

次のように現在価格とボリンジャーバンド値を if で比較するだけです。(売り注文するための条件の場合)

if(Bid>iBands(NULL,0,20,3,0,PRICE_HIGH,MODE_UPPER,0))
{
注文する・・・
}

あとは、どこに上記内容を記述するかですが、「直近50足分の高値(安値)と比較」した後に、高値(安値)を指している場合のみにボリンジャー値の比較をする方法で良いかと思います。

結果、次のようになりました。


テスト結果は・・・

2010年4月11日日曜日

追加のルールにボリンジャーを利用

夕べも麻雀ゲームに夢中でした。
気がついたら朝の4時・・・

ハマリ過ぎないように気をつけます。

----------------------------------------------------

テストした estTurnプログラムの結果チャートを眺めていると、"トレンドが形成されている時"に負けが込んでいるみたいです。

例えば下の図のような時です。

トレンドが形成されている時の注文を抑える事ができれば、もう少し勝率も上がるかな。

ということで、"トレンドが形成されている"ということをどのように察知すればよいか考えたのですが、よい案が浮かびません・・・

そこで、以前調べたボリンジャーバンドを利用してみたいと思います。

追加ルールとしては、

・ボリンジャーバンドの20日における高値3σ(安値3σ)を超えていたら注文する

です。

先ほどと同じチャート上でボリンジャーバンド3σを表示してみると次のようになります。

これなら、ダラダラとトレンドが形成されている時に注文をすることはないのではないかと思います。

#ただ、極端に注文数が減る気もしますが・・・

とりあえずプログラムを修正してみます。

2010年4月10日土曜日

テスト結果

夕べは麻雀でした。
といってもオンラインゲームですけど・・・

最近麻雀を覚えたんですが、結構ハマッテしまってます。

細かいルールや点数計算など、まだまだ分からない部分はありますが、それなりに楽しめます。

寝不足が続きそうです。

--------------------------------------------------------------

さて、前回までで一応当初に考えたルール通りのプログラムは完成したと思いますので、コンパイルして早速テストしてみたいと思います。

MetaTrader におけるバックテストの見方は、こちらこちらを参照ください。

とりあえず、ここ3週間分位のデータでテストしてみました。

テストの条件は、こちら。

結果は・・・


残念ながら、世の中そんなにあまくはありません。

期間を長くして再テストしてみましたが、続ければ続けるほど負けが込む感じですね・・・

折角作ったプログラムなので、もう少し結果を調べて対策を考えルールを追加してみたいと思います。

2010年4月9日金曜日

プログラム完成

前回、High と iHight を利用することで、直近50足分の最高値(最安値)は得られるようになりました。

最後の仕上げです。

直近50足分の最高値(最安値)と現在価格を比較し反対売買のタイミングに利用します。

現在価格は Bid で買値が得られます。そのため、if を使って比較し最高値を超えたら売り注文を出すために次のように記述します。

if(Bid>High[iHighest(NULL,0,MODE_HIGH,50,1)])
{
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,・・・
}

逆 に、最安値の場合には、Ask で売値が得られるため次のように記述します。

if(Ask<Low[iLowest(NULL,0,MODE_HIGH,50,1)])
{
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,・・・
}


これで、一応プログラムは完成です。

#ついでに、マジックNoを定数化しました。

次回、テストしてみます。

2010年4月4日日曜日

直近50ローソク足で最高値

今日は朝から子供達の部屋掃除を手伝いました。

新学期を迎えるにあたり、机の中や使わなくなった教科書などの整理、ついでに布団も古くなったので粗大ごみに出す準備など結構腰にきました・・・ 

年ですかね・・・

--------------------------------------------------------------

さてさて、前回までのプログラムで最初に決めたルールのうち次の部分が完成しました。

・注文は成行注文
・注文時に指値決済+35 ポイント、逆指値決済-25ポイントを指定
・チャートは15分足
・取引通貨はAUD/JPY
・決済されるまでは次の注文を入れない

残りは「直近50足分で最高値(最安値)をつけたら、反対売買で注文」の部分になります。

まずは「直近50足分で最高値(最安値)」という部分について調べてみたいと思います。

高値を調べるには、High[0] を使えば分かります。(安値はLow[0])

ただし、High[0] は表示されているチャートの現在のローソク足における高値が分かるだけで、直近50足分で最高値かどうかは分かりません。

High[0] の数字の部分を増やしていき、次のように50足分の高値を調べることは可能です。

High[1]:1個前のローソク足における高値
High[2]:2個前のローソク足における高値
High[3]:3個前のローソク足における高値

High[50]:50個前のローソク足における高値

面倒です・・・

そこで、便利な iHighest() を使いたいと思います。

iHighest() は「最高値をたたき出した足が何本前にあるかを調べてくれる」とっても便利な関数です。

使い方は、iHighest(NULL,0,MODE_HIGH,50,1) となり、それぞれの内容は次の通りです。

NULL:通貨ペアを指定(NULLを指定するとチャートに表示されている通貨)
0:時間足を指定(0はチャートに表示されている時間足)
MODE_HIGH:調べたい値を指定(MODE_HIGHは高値)
50:過去何本の足を調べるかを指定
1:現在の足から数えて何本前の足から調べるかを指定

つまり、次のように High[] と ihighest() を組み合わせて使います。

High[iHighest(NULL,0,MODE_HIGH,50,1)]

同様に、最安値を調べるには次のようになります。

Low[iLowest(NULL,0,MODE_LOW,50,1)]

これで、「直近50足分の最高値(最安値)」が得られました。

2010年4月3日土曜日

同時注文は回避できたと思います

では前回の続きで、同じプログラムで保有中のポジションがあるかどうかを調べる方法を書いてみます。


①でトレードプールにあるポジションの数を取得し、j に保持しておきます。

③でトレードプールにあるポジション情報を取得していますが、OrderSelect()では1回につき1つのポジション情報しか取得できないので、②のfor()を使って①で調べたポジションの数だけ、OrderSelect()を繰り返しながらポジション情報を取得します。

OrderSelest()の使い方については、こちらをご覧ください。

ポジション情報を取得した後に、④の OrdermagicNumber()を使って、マジックNoが"12345"と同じかどうか調べています。
同じであれば、return(0)にてプログラムを終了しています。

これで、同じプログラムで同時に注文を行ってしまう現象は回避できると思います。

2010年4月2日金曜日

ルール追加

さて、注文し続けるのを止めるために「決済されるまでは次の注文を入れない」というルールを追加しようと思います。

決済前のポジションを保有しているかどうかは、OrdersTotal()で判断できます。

ただし、OrdersTotal()はポジションの数を調べるもので、他のプログラムで注文したものまでカウントしてしまいます。

そのため、本プログラムで注文したポジションだけを調べるためにマジックNoを利用します。

前回記載した注文内容に、マジックNo("12345")を追記します。

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+25*Point,Bid-35*Point,NULL,12345,0,Aqua);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-25*Point,Ask+35*Point,NULL,12345,0,DeepPink);

これで、注文したポジションに"12345"のマジックNoが付与され、後で識別することができるようになります。

次に現在保有中のポジションを調べます。

保有中のポジションは、トレードプールと呼ばれる場所に保持されていますので、次の手順で保有ポジションのマジックNoを調べます。

1.トレードプールのポジション数を調べます
2.OrderSelect()を使いトレードプールからポジションの情報を順番に取り出します。
3.ポジションの情報を取り出したら、OrderMagicNumber()でマジックNoを確認します。
4.マジックNoが"12345"ならば、注文せずに終わります。

次回、上記手順をプログラミングしてみます。

2010年3月31日水曜日

まずは注文部分を記載

今日の夕食はピザでした。
ピザにはビールがぴったり!!
ついつい、食べすぎちゃいました・・

----------------------------------------------------

さて、簡単ですがルールは決めましたので、早速 EA 作りたいと思います。

まずは、MetaEditor を起動し、メニューより-にて新規に EA を作成します。

EA の名前は・・・、「estTurn」とでもしましょうか。

とりあえず、注文処理部分を記述してみます。

注文ルールは、「成行」で「指値決済+35ポイント」「逆指値決済-25ポイント」でしたので、OrderSend()を使って記述します。

まずは、売り注文から。

OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+25*Point,Bid-35*Point,NULL,0,0,Aqua);

記述内容を解説すると、

Symbol():チャート上の通貨
OP_SELL:売り注文
0.1:取引数量(1000通貨)
Bid:現在の売値(成行)
3:スリッページ
Bid+25*Point:逆指値決済額
Bid-30*Point:指値決済額
NULL:コメントなし
0:マジックNo
0:注文キャンセル時間
Aqua:チャート上の注文矢印色

になります。

あと、買い注文も次のように記述しておきます。

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-25*Point,Ask+35*Point,NULL,0,0,DeepPink);

これで、売りと買いの注文ができるようになりました。



もちろん、これだけでは”限度額いっぱい注文を繰り返してしまいます”ので、注文数を制御する記述を次回追加します。

2010年3月29日月曜日

単純なルールで作ってみます

さて、久しぶりにブログ再開したものの、何しようかな・・・

リハビリを兼ねて、簡単なルールを考えてEA作ってみます。

まず、 ルールですが、

・直近50足分で最高値(最安値)をつけたら、反対売買で注文
・注文は成行注文
・注文時に指値決済+35 ポイント、逆指値決済-25ポイントを指定
・チャートは15分足
・取引通貨はAUD/JPY

てな感じでいきたいと思いま す。

チャートイメージで表すとこんな感じです。


利益がでるかどうかは作ってからのお楽しみです。

2010年3月28日日曜日

再開しようかな・・・

久しぶりに自分のブログサイトを見たら、最後に投稿してから1年も経過していました・・・

今となっては、なぜ投稿しなくなったのかも思い出せない。

やっぱり長続きしない性格なのか?

まあ、そんなに気にしなくてもいいか。

最近、自分の中でFXトレード熱が再燃してきたので、このブログも再開してみようと思います。

参考になりました? よろしければご協力ください。

にほんブログ村 為替ブログへ 人気ブログランキング【ブログの殿堂】