メタボリック社長のNewNice戦略
今回はFX システムトレード派ブログランキング現在5位の【MetaTraderでFX自動売買ブログ】さんの12月13日の記事で書かれているメタボリック社長のNewNice戦法の
インジケーター(テクニカル分析)とストラテージ(売買ルール)です。
まずは、インディケーターですが、二つ用意する必要があります。
一つは、Bollinger Bands - Fibonacci Ratios というもので
もう一つは、Schaff Trend Cycleです。
この二つはMT4にはあらかじめの用意が無いため、自力で作るか作られたものをダウンロードするかしないと、使うことができません。
私は、Bollinger Bands - Fibonacci Ratios は作ることができましたが、
Schaff Trend Cycle についてはちょっと難しそうなので、Web検索してダウンロードしました。
中に入っている二つのインディケータを
expertsフォルダの中のindicatorsフォルダの中に入れます。
そして、一度開いてコンパイルしてあげましょう。
(ダウンロードしたものは、mq4ファイルといって人間用のファイルでコンパイルしてあげると、ex4ファイルというコンピュータ用のファイルが作られます。)
あと、Bollinger Bands - Fibonacci Ratios は7本のラインがありますが、一つずつインデックスという番号が割り当てられています。
真ん中のラインが0。その上が1。またその上が2。一番上が3。
真ん中の下のラインが4。その下が5。一番下が6。
となります。
これは、私が勝手に決めたものですが、後でExpert Advisor でルールを作るときに使われる番号なのでとても重要です。
Schaff Trend Cycle のラインは1本なのでインデックスは0でよいようです。
さあ、これらのインディケータを表示させてみましょう!
MT4を開いて、ユロ円1分足を表示させます。
ナビゲーターウィンドウの中の Custom Indicators の中にある
Bollinger Bands - Fibonacci Ratios をチャートにもっていくかダブルクリックで出てきたウィンドウのOKボタンを押せば表示されます。
Schaff Trend Cycle も同様にやってみましょう。
二つが、見当たらない場合はファイルを入れる場所が違っているかもしれません。
indicators という名前のフォルダは2つあるので注意してくださいね。
expertsフォルダの中のindicatorsフォルダの中に入れましょう。
(もしかすると、MT4を再起動する必要があるかもです。)
パラメータは初期化の時点でメタボリック社長のNewNice戦法の値にしてあります。
さて、これで道具がそろったわけです。
今回はCM無しなので、この辺で一旦休憩!
背伸びをしましょ~^^
はい!
次はいよいよ、売買ルール作りです!
私はこれを MetaboNewNice と名づけました。
売買ルールの概要は
・ボラティリティ確認
バンドの一番外側のラインの幅と一度は一本目のラインを割る
・エントリータイミング
下にへばり付いていた線が+5より上がってきたことが確認された後、買い。
(売りの場合は逆で+95)
・利食い損切り幅
利食いは+5、損切りは-10。
これらを MetaboNewNice というExpert Advisor にするために機械的に定義しました。
ちょっと分かり辛いですが、私が作った変数を交えてルールの概要を表すと
・ボラ確認
バンドの一番外側のラインの幅が、「パラメータ変数 BandsHaba」よりも大きくてはならない。
過去「パラメータ変数 BandsHamidePeriod」分の間に一度は一本目のラインを割る。
・エントリータイミング
「パラメータ変数 SchaffHebariPeriod」本前のバーから2本前のバーまでずっとSchaffの値が+1未満で、1本前のバーのSchaffの値が+5より大きい時買い。(売りの時は逆)
といった具合です。
プログラムの中身の説明に移ります。
まずは、
→MetaboNewNice.zip
上から
//パラメータ用の変数
extern int StopLoss =10;
extern int TakeProfit = 5;
extern int Leverage =10;
この辺はいいですよね^^;
extern double BandsHaba=20;
これはボラ確認のためのパラメータ。
後で出てきますが一番外側のラインの幅が BandsHaba より大きくないと取引しません。ってゆう値。
extern string setsumei="以下は2~10の範囲";
これは、パラメータを入力するときの案内なので直接システムには影響しません。
extern int BandsHamidePeriod=10;
extern int SchaffHebariPeriod=5;
これらは、バンドの1本目のラインをはみ出たかどうかを何本前のバーまでを確認するかという値と、
シャフのへばり付きは何本前のバーからかを設定する値です。
次の
int bar;は記憶用の変数です。
さあ、いよいよです!
int start(){
return(0);
}
の{}内を見ていきましょう!
//現在の外側のラインの値
double BBFUper3,BBFLower3;
BBFUper3=iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",3,0);
BBFLower3=iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",6,0);
まずは、現在のバンドの外側のラインの値を代入する小数の変数として、
上は BBFUper3 、下は BBFLower3 という名前にして宣言しました。
それらに、現在の外側のラインの値を代入しますが、ここで
iCustom(・・・) という関数を使います。
これは、expertsフォルダの中のindicatorsフォルダの中にあるインディケータを呼び出す関数です。
カッコ内は( 通貨, 時間足, インディケータの名前, パラメータ, インディケータのインデックス, 時期)
という具合です。しかし、パラメータは省略できるので、今回は入れていません。
仮に
iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",25,3,0)
とすると、
Bollinger Bands - Fibonacci Ratios の中のパラメータ BF_Period が25になるといった感じです。
ここでインデックスにはインディケータで決めたインデックスが入るので、一番上のラインは3、一番したのラインは6ということになります。
次に、
//シグナル
//外側のラインの幅がBandsHabaより大きいとき
if(BBFUper3-BBFLower3>BandsHaba*Point)
{
外側のラインの幅がBandsHabaより大きいときだけシグナルを出す計算をするといった感じ。BandsHabaはピプスで入力されてますので、Pointを掛けてあげてレートの値にしてあげましょう。
//過去10分のインディケータの数値算出
double STC[11],BBFUper1[11],BBFLower1[11];
for (int i=1;i<=10;i++)
{
BBFUper1[i]=iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",1,i);
BBFLower1[i]=iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",4,i);
STC[i]=iCustom(NULL,0,"Schaff Trend Cycle",0,i);
}
シャフの値をSTCという配列、バンドの1本上のラインの値をBBFUper1という配列、バンドの1本下のラインの値をBBFLower1という配列にしました。
配列のインデックスはそれぞれ0~10の11コとなっております。
for文を使いSTC、BBFUper1、BBFLower1のそれぞれにインディケータの1本前のバーの時の値から10本前のバーの時の値を配列にして代入しています。
次に
int BBFcnt=0,STCcnt=0,sign=0;
でバンドのはみ出し回数、シャフのへばり付き期間、シグナルを整数の変数として宣言します。
//買い条件
if(STC[2]<1 && STC[1]>5)
{
for(i=1;i<=BandsHamidePeriod;i++)
{
if(BBFLower1[i]>Close[i]) BBFcnt=BBFcnt+1;
}
for(i=2;i<=SchaffHebariPeriod;i++)
{
if(STC[i]<1) STCcnt=STCcnt+1;
}
if(BBFcnt>0 && STCcnt==SchaffHebariPeriod-1) sign=1;
}
2つ前のシャフの値が1より小さくて1つ前のシャフの値が5より大きいとき、
BandsHamidePeriod 前までのバンドからのはみ出し回数と
二つ前からSchaffHebariPeriod 前までのシャフのへばりつき回数を
カウントします。
バンドのはみ出し回数が0より大きい(一度ははみ出ている)、かつ
シャフが全部へばりつきの場合、sign に1を代入します。
//売り条件
if(STC[2]>99 && STC[1]<95)
{
for(i=1;i<=BandsHamidePeriod;i++)
{
if(BBFUper1[i]<Close[i]) BBFcnt=BBFcnt+1;
}
for(i=2;i<=SchaffHebariPeriod;i++)
{
if(STC[i]>99) STCcnt=STCcnt+1;
}
if(BBFcnt>0 && STCcnt==SchaffHebariPeriod-1) sign=-1;
}
}
売りの条件も同じようにします。^^;
sign は-1にします。
//オーダー
//ロット計算
double mantuka = AccountBalance() / 10000;
int baituka = mantuka * Leverage;
double lots = baituka * 0.1 ;
if(lots<=0.1) lots=0.1;
if(lots>=1000) lots=1000;
//ポジション確認
int CurrentPosition = -1 ;
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt,SELECT_BY_POS);
if(OrderMagicNumber() == 999) CurrentPosition=cnt;
}
//ポジション無しの場合
if(CurrentPosition == -1)
{
if(bar!=Bars && sign==1)
{
//買い
OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Ask-(StopLoss*Point), Ask+(TakeProfit*Point), "Buy", 999, 0, Blue);
bar=Bars;
}
if(bar!=Bars && sign==-1)
{
//売り
OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Bid+(StopLoss*Point), Bid-(TakeProfit*Point), "Sell", 999, 0, Red);
bar=Bars;
}
}
オーダーは今までどおりな感じですが、他のシステムと併用して使えるようにマジックナンバーで区別して、ポジション確認してます。
あとは、手仕舞い条件が無しですね。
ふ~。
これで、一通りできあがりです。
次回は、バンド幅が大きいときにははみ出し条件は無くても良いとか、その後の議論で出ていたトレンド方向のみのエントリーにするとか、精度を高めていきたいと思います!
もし、ここ間違ってる!とか、こうした方がいい!とか、
質問など、コメントしてください。
今回はこの辺で。
最後までお付き合いしてくださってありがとうございますm(..)m
タグ
2007年12月19日|コメント (29)
カテゴリー:MetaTrader EA
コメント (29)
ナイスさんの、コメント欄より、来ました。MQL勉強中です。ためになります、そして、ダウンさせていただきました。ありがとうございまーーす。
投稿者:pi-suke |2007年12月19日 17:16
訂正
MetaboNewNiceのパラメータ説明で、1~10の範囲を2~10に訂正です。
ファイルは訂正後のものです。
はじめまして。pi-sukeさん。
訂正が間に合わなかったみたいです。
よろしければ訂正お願いします。
これからもよろしくお願いします。
投稿者:慶次 |2007年12月19日 17:31
今回のブログの本筋と関係のない質問で申し訳ないのですが、iCustomの引数のパラメータの部分についてお聞きしたいんですが、ここは元のカスタム指標でexternの宣言を複数してた場合は,で区切って宣言した順番に入力すればいいんでしょうか?その場合、必要なのが一番目だけでもやっぱり全て入力しなければいけないんですかね?
それとiBandsの5番目の引数int bands_shiftって何ですか?ご存じでしたら教えてください。
MQL4 Referenceを翻訳サイトをつかって読んでるんですがいまいちわからないことが多いですね。っていうか翻訳サイトをつかった方が逆に訳わかんなくなったりしますから…
投稿者:red sauce |2007年12月19日 23:57
おはようございます。red sauceさん。
「iCustomの引数のパラメータの部分について元のカスタム指標でexternの宣言を複数してた場合は,で区切って宣言した順番に入力すればいいんでしょうか?」
→調べてみましたが、やはり,で区切って宣言した順番に入力すればいいみたいです。
「その場合、必要なのが一番目だけでもやっぱり全て入力しなければいけないんですかね?」
→一番目だけのときは、一つだけ書けばいいみたいです。例えば、インディケータの方に10のパラメータがあって、4つ目を指定したい場合は、4つ目まで書けばいいみたいです。不思議ですね。コンピュータはカンマの数を数えてからパラメータ部分は何個かって事を把握する感じかと。
読み込みの仕方は、よく分かりませんが^^;
結局、一番目から変更したい部分まででいいみたいです。また、不具合があったらおしえてくださいm(..)m
投稿者:慶次 |2007年12月20日 08:38
あ、あと、
「iBandsの5番目の引数int bands_shiftって何ですか?」
→これは、インディケータをどれだけ前にずらすかっていうやつです。例えば、bands_shiftを2にすると、現在の計算されたバンドがバー2つ分、未来に表示されます。ここで、8番目のshiftを10で計算させると、実際は、12個前のバーで計算されたバンドということになります。
実際、ボリンジャの場合は、一つ前に出してみる人もいるようです。
投稿者:慶次 |2007年12月20日 08:52
メタボ社長さんのリンクから来ました。
こんにちは。
自動売買すごいですね。
勉強したいのですが、チンプンカンプンです???
お聞きしたいのですが、
フィルーターを一つくわえたいです。
RCIです。
(MT4ではSpearRankCorr)
http://gaitameotoko.seesaa.net/article/55582270.html#more
「買いの場合」
RCI52が上向き(上昇中)のみ、条件がそろったら、エントリー
「売りの場合」は、その逆
上向き、下向きなど曖昧?なことは可能なのでしょうか?
記述はどのようになるのでしょうか?
あと、ODLでは実際に自動売買ができるようなので、
当日NY終了時間までに、損失が100pips以上になると、
自動売買を中止するということも可能なのでしょうか?
疑問符ばかりで申し訳ございませんが、
よろしくお願いします。
投稿者:幸 |2007年12月20日 09:55
幸さん、こんにちわ。
フィルターに関しては、条件を付け加えるだけで出来ると思います。
記述は、一つ前の値と二つ前の値を比べて、一つ前の方が大きければ上昇って感じです。値の読み込みは、iCustom関数で出来ると思います。
あと、損失は記憶用変数で記憶させて、時間に関するコードと組み合わせれば、可能だと思います。
次回の記事で出来るところまでやってみますね!
投稿者:慶次 |2007年12月20日 15:34
慶次さん、回答ありがとうございます。
うれしいです!!!
勝手なお願いですが、よろしくお願いします。
投稿者:幸 |2007年12月20日 18:02
ご回答ありがとうございます。iCustomのパラメータは不思議なシステムですね。
iBandsの方は8番目のshiftがずらすのだと思いこんでいました。間違える前に教えていただきほんと感謝してます。
メタボさんの手法見てみましたけど勝率が高そうなのはいい感じですね。ただ利確が5PIPSってことはエントリーとイグジットで3PIPSずつ滑ったらシステム上ではプラスでも実利ではマイナスになってしまうんですよね… 自動売買ってそんなには滑らないもんなんですかね?
投稿者:red sauce |2007年12月20日 22:14
red sauceさん、おはようございます。
私は、ODLで取引していますが、スリッページはほとんどないです。
しかし、実際走らせてみるとバシッと決まるところもあれば、負けが続くところもあって、やはりフィルターが必要なようです。時間で区切るかトレンドで制限するかなど。
投稿者:慶次 |2007年12月21日 08:19
メタボさんところからやって参りました。トヨラボさんの本を読んで勉強している身には大変ためになる記事ばかりです。早速ダウンロードさせていただきました。ありがとうございます!
これから、チョコチョコお邪魔しますのでよろしくお願いします。
投稿者:二色テグリ |2007年12月24日 09:45
二色テグリさん、こんにちわ!
私もより良いシステムを見つけるべく勉強中です。
一緒にがんばりましょう!
投稿者:慶次 |2007年12月24日 11:41
EAにはかなり興味があるので勉強になります!
これからは毎日見に来るので、がんばってください!
投稿者:r170 |2007年12月24日 19:33
r170さん、おはようございます。
EAは無限の可能性を秘めていると思います。しかも、無料です!蓄えた知識も奪われることがありません。
これからも、がんばりましょう!
投稿者:慶次 |2007年12月25日 08:10
こんにちわ(^^)ノ
iCustom()、便利ですね!
インジケータの値を得られるのですよね。
そこで質問なんですが、例えば売買ポイントで矢印を表示するインジケータがありますよね?
iCustom()を使って、その矢印の有無を判断する事は可能でしょうか?
矢印が表示されないときは、その時のインジケータバッファの状態はEMPTY-VALUEかな?
と勝手に予想して
if(矢印の変数 != EMPTY-VALUE)
などとロジックを組んだりしてみたんですが、うまくいきませんでした…。
あの矢印の表示を使ってEAのポジションをとるような方法はとれないんでしょうか?
携帯からの書き込みですので、乱文で申し訳ありません。
投稿者:えぎ |2008年2月11日 00:14
自己解決レスです(^^)
先の手法が出来ました。
コメント欄を汚してすいません。
しかしアレですね、iCustom()を使うとバックテストが激遅になりますね(^^;)
投稿者:えぎ |2008年2月11日 07:35
えぎさん
おはようございます。
矢印での売買はどのように書きましたか?
教えていただけたらうれしいです。
バックテストの速度、悩みの一つですね^^;
投稿者:慶次 |2008年2月11日 09:00
MetaTraderに興味があり(初心者)、メタボリック社長のブログを見ていた関係でこのHPにたどりつきました。
『メタボリック社長のNewNice戦略』を試してみようと思い、『Bollinger Bands - Fibonacci Ratios』、『Schaff Trend Cycle』をダウンロード、MetaTraderでインディケータを表示できるようになり、チャート上に表示できました。
ただ、『MetaboNewNice』は、MetaTraderの『Custom Indicators』には表示されるようになったのですが、『MetaboNewNice』をチャート上にドロップしても反応がありません。
(チャート上で右クリック/表示中の罫線分析ツールにも表示されません)
根本的に何か間違ってそうなのですが、よくわかりません。教えていただけないでしょうか?
(MetaboNewNice.mq4は、売買システムなので、『Bollinger Bands - Fibonacci Ratios』とかと使い方が違うのでしょうか?)
投稿者:ぽじー |2008年3月24日 08:47
ぽじーさん
こんにちわ。
MetaboNewNice.mq4は、売買システムなので、インディケータを入れるフォルダの手前のexpertsフォルダに入れてみてください。
ややこしいですが、売買システムとテクニカル指標を分けて保存するようにしましょうね!
投稿者:慶次 |2008年3月24日 10:13
慶次さま
早速の返答ありがとうございます。
こちらで確認したところうまくいきました。
ありがとうございます。
投稿者:ぽじー |2008年3月24日 21:33
初めて書き込み致します。
GWで 初めて メタトレを 知り このサイトに たどり着きました。
すごく 貴重な 情報(技術?)ですね!
素人でも 何とか 簡単なプログラムができるようになりました。有り難うございます。
ところで、こんな 設定ではどうでしょうか?
①買い条件、売り条件共 「シャフ 5、95」 を 「20、80」に 変更
②STOP 6、TAKE 5、BandsHaba 23、BansHamide 11、
MIGのデモでは いい感じでした。
何故か? ODL で行うと Order Send error 130 となりましたが・・・
ブローカーによって MT が 違うのですね?
まだまだ 解らないことばかりなので もし、ODLで デモ OR LIVE できる 方法があれば(口座はあるのですが)どなたか お教え下さい。
これからも 有益な情報 発信がんばってくださいね。
投稿者:GWスタート |2008年6月 2日 19:14
GWスタートさん
おはようございます。
①買い条件、売り条件共 「シャフ 5、95」 を 「20、80」に 変更
②STOP 6、TAKE 5、BandsHaba 23、BansHamide 11
ありがとうございます!試してみますね!
現在ODLでは、ストップ、リミットが10Pipsから有効となっております。
(スプレッド分を考慮してリミット8Pips、ストップ12Pips)
ですので、STOP 6、TAKE 5を実行するには、コード変更でクローズの条件文を加えるとできると思います。
投稿者:慶次 |2008年6月 3日 09:11
早速のアドバイス 有難うございます。
ODLに 聞いても MTについての質問は 受け付けていません。と、冷たくあしらわれ困っていたところでした。
今晩、チャレンジしてみます。
投稿者:GWスタート |2008年6月 3日 14:09
初めて書き込み致します。
EAのことを知りこのサイトにたどり着きました。
想像していたトレード方法に近い方法でしたので、利用させていただいております。
すごく初歩的な質問なのですが、回答いただけますと幸いです。
EAは設定でき、チャート上にもラインが表示されています。
ただ、売買タイミングで、注文画面が出てくるのですが、
「売りボタン」「買いボタン」がグレイアウトしており、
実際に売買もされていないようなのです。
MTは、FXDDで、デモトレードで行っております。
初歩的な質問かもしれないのですが、ご教示いただけますと幸いです。
よろしくお願い致します。
投稿者:匿名 |2010年11月11日 23:44
匿名さん
こんにちわ!
このEAは、レート表示小数点以下3桁5桁表示のブローカーには、未対応ですね^^;
StopLoss、TakeProfit、BandsHaba を10倍にして試してみてください^^
投稿者:慶次 |2010年11月14日 11:00
ありがとうございます!
やってみます!
投稿者:匿名 |2010年11月20日 01:54
うーん、やっぱり駄目なようですね。。。
ストラテジーテスターで、tickでもテストしてみたのですが、
何も取引結果がでていないようです。(通貨はGBP-JPです)
原因はやはりこの点でしょうか。
もし、他にも考えられることがありましたら教えていただけないでしょうか。
>このEAは、レート表示小数点以下3桁5桁表示のブローカーには、未対応ですね^^;
ちなみに、サンプルでついている、MAは1回しか取引されません。
これ自体、少しおかしいな。。。と思っているところです。
すみません、お手数掛けます。
投稿者:匿名 |2010年11月20日 02:12
MTの再セットアップ、EAの再セットアップ。
何度か繰り返していると、、、なぜか直りました。。。
すみません、お騒がせ致しました。
投稿者:匿名 |2010年11月21日 01:07
匿名さん
こんにちわ!
解決されてよかったです^^;
ヒストリカルデータの問題かもしれませんね^^;
投稿者:慶次 |2010年11月21日 11:26


