zyx40さんのルール検証
今回は、自動売買チャンピオンシップ2007で第5位に入賞し
3ヶ月弱で$10000を約3.7倍にしたzyx40さんが元にしたEAを見ていきましょうか!
(2007.12.27 記事訂正しました)
なんだか、ロシア語が書いてありますが^^;
早速、上から見ていきましょう!
extern int TakeProfit_L = 40; // Уровень тейкпрофит в пунктах
extern int StopLoss_L = 133; // уровень стоплосс в пунктах
extern int TakeProfit_S = 27; // Уровень тейкпрофит в пунктах
extern int StopLoss_S = 200; // уровень стоплосс в пунктах
extern int TradeTime=18; // Время входа в рынок
extern int t1=7;
extern int t2=2;
extern int delta_L=9;
extern int delta_S=10;
extern double lot = 0.1; // Размер лота
extern int Orders=1; // максимальное количество одновременно открытых позиций
extern int MaxOpenTime=138;
パラメータですね。
ロング(買い)とショート(売り)の利幅と損切り幅を作ってます。(ロシア語部分は各パラメータの説明です)
TradeTime は、時間の設定です。(このEAは、ODLの時間に合わせてあるようです。)
t1,t2はいつのバーなのかを、設定するものです。
delta_L,delta_Sは、変動ピプスのようです。
lotはロット数。
Ordersは、一度に持つポジションの数のようです。
MaxOpenTimeで、ポジション保持時間を制限します。
各パラメータは、コードを見ていくと役割が分かってきますので、次に進みましょう。
int ticket,total,cnt;
bool cantrade=true;
double closeprice;
double tmp;
記憶用の変数を宣言してます。
これらも後にでてくる、大事な変数です。
次から、自作の関数を宣言しています。プログラマーさんが書いたものを見ると、よく見かける形なのですが、こうすることで処理速度を速めてるのだと思います。(推測ですが^^;)
int OpenLong(double volume=0.1)
// функция открывает длинную позицию размером лота=volume
{
整数の性質を持った OpenLong(小数値) という関数を作ります。カッコ内は volume という初期値0.1の小数変数を宣言しています。
その下の説明では、
//ロット数=volume の買いポジションを持つ関数
としてあります。
次に
int slippage=10;
string comment="20/200 expert v2 (Long)";
color arrow_color=Red;
int magic=0;
として、この関数の中だけで使う変数を宣言しています。
SendOrder のカッコ内のもののようですね!commentには v2 の文字がありますが、
バージョン更新の前のままのものかと思います。
そして、
ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss_L*Point,Ask+TakeProfit_L*Point,comment,magic,0,arrow_color);
としています。
ここで、OrderSend という関数の性質なのですが、「カッコ内で指定したものをオーダーする」ということと、「オーダー先のサーバーから割り当てられた注文番号を返す」というものがあります。
ここでは、注文を出しつつ、ticket という整数変数に注文番号を代入しています。
(もし、エラーなどで注文が成立しなかった場合は、【-1】という整数が代入されることになります。)
OrderSend のカッコ内は、ほとんど変数で指定されています。
ここで、volume が出てくるのですが、これは、自作の関数OpenLong(volume) を使ったときに取得するものです。
例えば、プログラム中に
・・・
OpenLong(0.6);
・・・
といった感じで書かれた場合は、小数変数 volume に0.6を代入して
OpenLong(volume)を宣言した{}内をおこなうという手順になります。
次に
if(ticket>0)
{
として、注文番号が割り当てられた時に実行することを書いてあります。
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
return(0);
}
となっています。
ここで、OrderSelect という関数の性質なのですが、「カッコ内で指定したものを選択する」ということと、「無事選択できたら true 、選択できなかったら false になる」というものがあります。
ここでは、二つ目の true か false になるということを利用しています。(,MODE_TRADESを省略しても同じ意味になります)
また、ここではプログラミングの構文みたいなものが使用されています。
それは、
if(bool型)
{
true(真)の場合、実行するコード
}
else
{
false(偽)の場合、実行するコード
}
といったものです。if文のカッコの中に==や>などがないのが特徴的ですね。
なので、
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
return(0);
}
は、注文番号ticketのものをちゃんと選択できたら、
この関数(OpenLong)内の実行は、これでおしまいといった感じです。
次に
else
{
Print("OpenLong(),OrderSelect() - выдал ошибку : ",GetLastError());
return(-1);
}
}
は、先ほどのfalseになったときの実行コードですね。
ここで、Print()というものが、でてきます。これは、()内のものを操作履歴に書き込むというものです。
複数書き込むには、カンマで区切って書いてあげます。また、文字を書き込みたいときは【"】で挟んであげます。
この場合は、OpenLong(),OrderSelect() - выдал ошибку : という文字と、GetLastError()という関数でどんなエラーが生じたのかを書き込みます。
文字の部分は、OpenLong()関数内のOrderSelect()関数で発せられたエラーは:っと言った感じです。
その後、return(-1);で、OpenLong()関数は-1ですよという処理をしてこの関数の実行は終了しています。エラーが出た関数は-1にするといった習慣なのでしょう。
次に
else
{
Print("Error opening Buy order : ",GetLastError());
return(-1);
}
}
として、Ticket が0より大きくない時に実行するコードが書いてあります。
ここでも、先ほどと同じ感じですね。買いのオーダーの時のエラーは:~ といった感じですね。そして、return(-1);で終了です。
最後の}でOpenLongの関数の実行は終わりです。
プログラム中に
OpenLong(小数値);
と書くだけで、
int OpenLong(double volume=0.1)
{
}
の事を実行するわけですね!
次に、
int OpenShort(double volume=0.1)
として、今度は売りオーダーの関数を作るわけです。
やりかたは、OpenLong の時と同じ感じですね。説明は省略です^^;
そのあとの、int init() と int deinit() は空っぽですね。前処理、後処理は特におこなっていません。
さあ、いよいよint start() の中身です!
ですが、今回の記事はこの辺で。
次回は、int start() の中身からです。
皆様の応援のおかげでランキング上位に!ありがとうございます!
みんなの応援クリックが活力になっております。
これからも、よろしくお願いいたしますm(..)m
→FXシステムトレード派
→rank応援クリック
タグ
2007年12月26日|コメント (13)
カテゴリー:MetaTrader EA
コメント (13)
すいませんメタトレーダー初心者ですが
EAはどこのファイルにダウンロードして
どのように起動させるのか解りません
初心者のくだらない質問ですが
よろしかったら教えてください
投稿者:信長 |2007年12月26日 18:51
信長さん、こんばんわ。
記事の中で説明すべきでしたね。ゴメンなさい。
普通にMT4をダウンロードした場合は、MT4のフォルダがマイコンピュータ→ローカルディスクC→Program Filesの中にあると思います。
そのMT4のフォルダの中にexpertsというフォルダがあり、その中に入れて下さい。
その後MetaEditorで、ダウンロードしたmq4ファイルを開いて見てください。コードが見れると思います。
そこで、コンパイルボタンをクリックすると同じexpertsフォルダ内に同じ名前のex4ファイルが作られます。
これでMetaTraderで使えるようになります。
また、わからないところがあったら聞いて下さいね。
投稿者:慶次 |2007年12月26日 21:06
うーん、これは
191位の500117 autoforexさんのコードですよね?
投稿者:匿名 |2007年12月27日 12:13
そうみたいですね。
教えてくださって、ありがとうございます。
さっそく、訂正しますm(..)m
投稿者:慶次 |2007年12月27日 14:23
やり方わかりました
丁寧に教えてくださりありがとうございました
投稿者:信長 |2007年12月27日 22:06
ランキングから来ました。
とても勉強させていただきました!
次の記事も楽しみにしてます。
投稿者:jpyuser |2007年12月27日 22:24
信長さん、おはようございます。
信長さんのおかげで【完全自動売買への道のり】の記事を増やすことができました。ありがとうございます。
ps
名前がいいですね。MT4でもトップトレーダーになれそうです。
私は、傾き通します^^;
投稿者:慶次 |2007年12月28日 08:06
jpyuserさん、おはようございます。
次の記事はいよいよ戦略部分です。
作成中なのでもうしばらくお待ちくださいね!
投稿者:慶次 |2007年12月28日 08:09
慶次さん、MetaboNewNiceRCIを作っていただきありがとうございました。
お礼の連絡がおそくなってすみません。
>RCIとの相性は若干薄いのではといったところです。
そうですか~。残念です。
今、私が思っていることは、平均移動線を見てトレンド方向のみにのる方法です。
100日、300日平均移動線とボリンジャー20日線が同じ方向のみエントリー。
エントリー位置は価格が20日移動線に触れてシャフが規定値だったらエントリーです。
いわゆる押し目買いだと思います。
20日線の角度により、エントリーするか見送りか決める。
これって、簡単に作れますかねえ?
自分で作ろうと考えたみたものの、チンプンカンプンでした?
エントリー回数はすくないかもしれませんが、
複数通貨エントリーすれば、回数は増えるかも?
なお、エントリー判断の20日線の角度の数値は後から変えられるようにできればうれしいです。
いつも、お願いばかりですみません。
投稿者:幸 |2007年12月28日 10:07
慶次さん、前回はアドバイスを有難うございました。私なりに調べてみたのですがやはり慶次さんのおっしゃられる通りOSのメモリーが原因のようです。本当に本当にいろいろありがとうございます。慶次さんのブログがMT4を前向きにきわめようしている皆さんの強い味方になっているみたいでとてもうれしいです。またこれからも勉強させて下さい。宜しくお願いします。
投稿者:MIKI |2007年12月28日 11:37
>幸さん
こんにちわ。
MetaboNewNiceはボラが重要みたいですね。
バンド幅40以上で時間枠を指定だとうまくいくパターンがありました。
今回の幸さんの戦略は年明けにやってみますね。
>MIKIさん
こんにちわ。
私も、USDJPYの過去のデータを取り込んだMT4のUSDJPYのバックテストでは、たまにメモリ不足になります。そんなときは、30分ほど何も触らずにほったらかしにすると計算が終わっているときがあります。(エラー画面がでたら計算されませんが^^;)
また、困ったことや分からないことがあったら何でも聞いてくださいね!
投稿者:慶次 |2007年12月28日 17:05
お世話になります。MT4がんばって勉強中です。ところで教えていただきたいことがありますがMT4フォーラムのForex TSDですが
ログインするためにメンバー登録をしたいのですがPassword記入のところでけられて登録出来ません。ログイン方法を教えていただけないでしょうか。
投稿者:wan |2008年1月10日 01:37
wanさん、おはようございます。
Password記入をユーザーネームと違うもので半角英数字6文字前後を使用してみてください。私はそれで登録できました。
それでもダメな場合、Password記入のところでどのような注意がでるか教えていただけますか?
投稿者:慶次 |2008年1月10日 08:28


