VQとVQ_EAと商材紹介^^;
今回は、VQ(Volatility Quality)というインディケータの紹介です!
私は、FXのインディケータなどをとてもよく研究されている方から教えてもらい、知りました。
ダウンロードはこちら→VQのページ
『VQ_EA』というのがEAで、『VQ』というのがインディケータです。
それぞれのフォルダに入れましょう!
(ダウンロード先参考記事→ダウンロードしたものを使う)
インディケータの完成度、EAの完成度ともに抜群だと思います!
が、
・・・
重たいです^^;
これは、インディケータの計算部分で時間がかかっているのだと思います。
これでは、検証作業がなかなか進みません。
そこで、VQの計算部分だけを抽出し、シンプルなEAを作りました。
EAのみで、計算するので検証もスムーズにできます。
バックテスト用のEA(ex4ファイル)ダウンロードはこちら↓
→VQSimpleForTest.zip(ex4ファイル)
さらに、このサインにPipShaker(改)を搭載したものを作りました!
バックテスト用のEA(ex4ファイル)ダウンロードはこちら↓
→VQSimpleDePSforTest.zip(ex4ファイル)
これで、VQの検証効率が飛躍的にアップしました!
商材紹介終了しました^^;
では、このへんで。
タグ
2008年7月15日|コメント (6)|トラックバック (0)
カテゴリー:MetaTrader EA
PipShakerOne
今回は、PipShakerの単発版、PipShakerOneというEAを作ってみました!
PipShakerの最初のエントリ(日時と売り買い)をパラメータで決定、その後PipShaker作動し、ポジションがなくなれば終了。
といった感じです。
→PipShakerOne.zip(ex4ファイル)
パラメータ
第一取引設定
Date1 最初のエントリの時間
buy0sell1 最初のエントリの売りか買いか
(「買い」は0、「売り」は1を入力)
最少単位での設定
MaxLotSize 最大ロット数
LotSize 最初のエントリのロット数
LotIncrement 買い増し時、売り増し時のロット増加数
MaxTotalLots 1方向の合計ロット数の上限
ProfitTarget 目標利益(単位は口座通貨と同じ)
Spacing ポジショニング用スペース(単位:ピプス)
移動平均線設定
TrendTimeFrame 平均線の時間足(1・5・15...)
TrendPeriods 平均線の計算期間
EA設定
comment コメント
MagicNumber マジックナンバー
trailingpips トレイリングストップ(単位:ピプス)
stoploss 損切り値(単位:ピプス)
使用上の注意
EA作動開始から、移動平均線の計算期間分は買い増し売り増しを行なわないので、開始からエントリの間に余裕を持たせてください。
基本的な動き
価格から一番遠いポジションを利益が出ているポジション全体で相殺する感じです。
ポジションが一つになったら、トレイリングで追っかける感じです。
いろいろ試してみてください。
でわ、このへんで。
タグ
2008年5月26日|コメント (11)|トラックバック (0)
カテゴリー:MetaTrader EA
PipShakerV4誕生!!
PipMakerはポジション同士のチームワークで利益を上げていきます。
これは、最大の特徴で強みですが、場合によっては弱点でもあります。
弱点をカバーするために、保有可能ポジション数を少なくすると、
かえってチームワークが機能しなくなり利益が出ません。
なので、ある程度ポジション数は保有できるように、資金量が必要です。
ですが、Micro Lot(0.01ロット)単位なら、必要資金も10分の1になるのでPipMakerを使うには向いているかと思います。
今回は、PipMakerを改造して、『PipShaker』というものを作ることに成功しました!
Micro Lot最少単位での取引(1999~2007)
9年間での最大ドローダウンが$651.55なので、Micro Lotでも最低資金数十万円は必要のようですね!
さらに、年末の仕掛け的な動きにダマされることが多いようなので、
12月はお休みする『PipShakerV4』を作りました。
リスクを大きめにとって複利での1年ごとのバックテスト結果↓
早速、デモ開始です。
でわでわ。
タグ
2008年4月16日|コメント (12)|トラックバック (0)
カテゴリー:MetaTrader EA
PipMakerを改造
今回は、PipMakerを改造したもののバックテストをアップしたいと思います。
改造した点
トレンド方向へ動いた時の無駄を無くす等、細かなところを効率化しました。
(トレイリングなど)
常にポジションを持っているのではなく、出来るだけ損切りをしなくてすむような状況を狙い撃ちして、ポジションをとるようにしました。
(フィルタをつけました)
パラメータは同じで、最少ロットでテストしました。
まだまだ、良くなりそうですね!
もう少し、研究を続けたいと思います!
また、PMsimpleのパラメータを説明しますね。
MaxLotSize 最大ロット数
LotSize 最少ロット数
Lotincrement 増加ロット数
ProfitTarget 目標利益
TrendProfitTarget トレンド方向の目標利益
Spacing 買い増し売り増しするときの必要ピプス
TrendSpacing トレンド方向のSpacing
TrendTimeFrame 移動平均の使用時間足
TrendPeriods 移動平均の計算期間
といった感じです。
PipMakerV9-1には、ポジションサイジングなどのパラメータがありますがややこしくなってしまいますので、
無くしました^^;
でわこのへんで。
タグ
2008年4月 7日|コメント (15)|トラックバック (0)
カテゴリー:MetaTrader EA
聖杯EAの原石の原石!?PipMaker
前回紹介しました、PipMakerですが、エラーが出てしまうといった報告がありました。
まだ、原因が分かってませんが、PipMakerV9-1のいろいろな機能を削って骨の部分だけのものを作りました。
→PMsimple.zip(mq4ファイル)
また、報告お願い致しますm(..)m
タグ
2008年3月28日|コメント (20)|トラックバック (0)
カテゴリー:MetaTrader EA
聖杯EAの原石!!PipMaker
http://www.forex-tsd.com/expert-advisors-metatrader-4/8126-pipmaker-v1-price-action-based-ea.html
で、無料公開されているEA、PipMakerV9-1をデモ取引で試してみました!
→PipMakerV9-1.zip(mq4ファイル)
ものすごい勢いで残高が増えて行きます。
デモで体験してみてください!
バックテスト結果を見ると、時々塩漬け状態になるポジションが発生しますが、他のポジションで相殺する感じですね。ポジション同士のチームワークで勝ち続けるシステムです。なので、ある程度の残高が必要になります。
しかし、相殺できないときがありドローダウンが大きくなりすぎると破産します。
そうならないために、掲示板ではいろいろなバージョンがありますが、PipMakerV9-1にランダムエントリーでも利益を出すあのトレイリング(日足ベース14日ATRの三倍のストップ)を付け加えてみました!
2000年から2007年のUSDJPY1分足(データはMeta Quates)でのバックテストのグラフです。
(1分足なのでModelling Qualityは25%です)
※
http://codebase.mql4.com/en/2595
のような1分足のバックテストの特異性を利用したものではないです^^;
8年間で数回(数年に1度の割合)、数ヵ月分の大きな損失が発生しました。
まだ、コードをしっかりと解読していないので、なんともいえませんが、
ほとんどの通貨ペア、時間足で有効なので、
ポジションサイズ、塩漬けの相殺方法または損切り方法次第で最強の聖杯になると思います。
今後、PipMakerのコード解読、戦略研究をしていきたいと思います!
でわ、このへんで。
ありがとうございます。
タグ
2008年3月26日|コメント (31)|トラックバック (0)
カテゴリー:MetaTrader EA
Multi_Lot_Scalperの改造
今回も、Multi_Lot_Scalperの解読のつづきです。
前回作ったものを、少し改良しました!
→MetatoreLotScalperV2.zip(mq4ファイル)
今回の改良点
このシステムは、資産が多ければ多いほど有利なシステムなので、
ロット数を少なめにするようにしました。(ドル口座での計算です)
手仕舞いしたバーでは取引しないようにし、
資産のパーセンテージで利食い、損切りできるようにしました。
手仕舞いしたバーでも取引するバージョン
→MetatoreLotScalperV4.zip(mq4ファイル)
パラメータで
ProfitPer
は含み益が資産の何%に達したら利食いするという値。
LossPer
は含み損が資産の何%になったら損切りするという値です。
Pips
は何ピプス損失方向に動いたらナンピンするという値です。
xlot
はナンピン時のロット数を、前回の何倍にするかという値です。
シグナルの部分はそのままなのでフィルタをつけるなどして試してみてくださいね。
シグナルはMACDなので、フィルタはストキャスなどのオシレーター系が良いかと思います。
今回は、コードの説明は無いですが、気になる部分などありましたらコメントしてくださいね!
でわ、手短ですがこのへんで^^;
応援お願い致します!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング
タグ
2008年1月27日|コメント (10)|トラックバック (0)
カテゴリー:MetaTrader EA
NewNice戦略トレンド編
今回は、ブログ読者様の幸さんのアイデアをMetaboNewNiceに付け加えてみましょう!
幸さんのアイデア
①100日、300日平均移動線とボリンジャー20日線が同じ方向のみエントリー。
②20日線の角度により、エントリーするか見送りか決める。
ここで、 ②の20日線の角度というのは、表示中のチャートの縦幅によって変わってしまうので、20日線の増減で計るようにしましょうか。
使うコードは、
まずは、パラメータ
extern double MA20upPips=0.1;
extern double MA20downPips=0.1;
として、20日線が一つ前のバーで何ピプス以上動いたらシグナルを出すのかという条件の数値です。
次に
//トレンド用の計算
double ma1001=iMA(NULL,0,100,0,MODE_SMA,PRICE_CLOSE,1);
double ma1002=iMA(NULL,0,100,0,MODE_SMA,PRICE_CLOSE,2);
double ma3001=iMA(NULL,0,300,0,MODE_SMA,PRICE_CLOSE,1);
double ma3002=iMA(NULL,0,300,0,MODE_SMA,PRICE_CLOSE,2);
double ma201=iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",0,1);
double ma202=iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",0,2);
double ma20updown=(ma201-ma202)/Point;
です。
上から、100日線の一つ前の値と、二つ前の値、300日線の一つ前の値と、二つ前の値、
ボリンジャーの真ん中の線の一つ前の値と、二つ前の値。
そして、ボリンジャーの真ん中の線が何ピプス動いたかを計算します。
ここで、ma20updownの値がプラスなら増、マイナスなら減ということになりますね。
これを、買い条件の前あたりに記入して計算してもらいましょう。
そして、
//買い条件
if(STC[2]<5 && STC[1]>5 && ma1002<ma1001 && ma3002<ma3001 && ma20updown>MA20upPips)
{
と
//売り条件
if(STC[2]>95 && STC[1]<95 && ma1002>ma1001 && ma3002>ma3001 && -1*ma20updown>MA20downPips)
{
というように前回の条件に&&を使って足してあげましょう。
売り条件の最後の-1*ma20updown>MA20downPipsは
MA20downPipsよりma20updownのほうが大きく減った場合、という意味ですね。
トレンド方向のみのエントリーのコードは以上を付け足せばOKです。
→MetaboNewNiceTrend.zip(mq4ファイル)
今回私がバックテストした結果、有効なパラメータ、通貨や時間足などを見つけることができませんでした。
もし、有効なものが見つかりましたら教えてくださいね^^;
でわ、今回はこの辺で。
応援ありがとうございます!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング
ps
メルマガはじめました!
有益情報を配信したいと思います。
メルマガ読者限定プレゼント企画も考えています。
よろしくお願いいたしますm(..)m
タグ
2008年1月 6日|コメント (5)|トラックバック (0)
カテゴリー:MetaTrader EA
zyx40さんのルール検証3
今回は、zyx40さんのルール検証の続きです。
通貨ペアEURUSDで一時間足(H1)で
zyx40さんのパラメータ
TakeProfit_L=40;
StopLoss_L=134;
TakeProfit_S=26;
StopLoss_S=216;
TradeTime=18;
lot=4;
Orders=3;
MaxOpenTime=168;
を固定し t1, t2, delta_L, delta_S を調べてみました。
(ODLの過去データで検証)
→zyx40-2007-10-12.zip(Excelファイル)
やはり、zyx40さんのアイデア部分がないため、同じ動きのものはないようですね^^;
今回はチャンピオンシップのため、大きめのリスクで運用されたと思います。
なので、レバレッジ10倍という条件で2007年のデータで最適化をしてみました。
パラメータ
Leverage=10;
TradeTime=18;
Orders=3;
は固定です。
→Zyx40F.zip(mq4ファイル)
→zyx40-2007.zip(Excelファイル)
結果から、
取引回数 100回以上
最大ドローダウン 20%以下
というフィルタをかけると7つほどデータが残りました。
プロフィットファクター上位は
TakeProfit_L=44,
StopLoss_L=85,
TakeProfit_S=5,
StopLoss_S=166,
t1=18,
t2=11,
delta_L=15,
delta_S=15,
MaxOpenTime=36,
と
TakeProfit_L=5,
StopLoss_L=50,
TakeProfit_S=5,
StopLoss_S=114,
t1=9,
t2=1,
delta_L=2,
delta_S=18,
MaxOpenTime=82,
でした。
傾向としては
利食い幅は買いの方が大きい
損切り幅は売りの方が大きい
値動き幅は買いの方が敏感
というような感じです。
これは、2007年は値上がり状態だったので当然ですね。
パラメータが多い分、カーブフィッティングになり易いですが、
ある程度の将来の値動きが予測できる場合は有効かもしれません。
そこのところは、裁量が必要かと思います。
今回はこの辺で。
次回は、MetaboNewNice戦略研究について書こうかと思ってます。
皆様の応援のおかげで→FXシステムトレード派1位になっております!
応援ありがとうございます!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング
タグ
2008年1月 3日|コメント (4)|トラックバック (0)
カテゴリー:MetaTrader EA
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)|トラックバック (0)
カテゴリー:MetaTrader EA
NewNiceにフィルタをつける
前回の記事で、RCIのフィルターを付け加えたいという意見がありましたので、
改良したものを、書いていきたいと思います。
その前に、
応援お願いします!→rank応援クリック
今回は、MetaboNewNiceRCI という名前にしました。インディケータは
SpearmanRankCorr というものを使います。
2つともZipフォルダに入れてあるので、それぞれ所定の場所に保存し、コンパイルしてください。
今回の変更点は、RCIのフィルターを付け加えたのはもちろんですが、
ボラティリティ確認のためのバンド幅の初期値を少し広めにとったことと、
へばりつきの定義を少し和らげたこと。
ドル口座、円口座を選べるようにしたことと、同時に複数の通貨を取引できるようにポジション確認に通貨の区別も加えたこと。
そして、付属として、本日のある時間までに残高が設定した金額を割ったら取引しないといったストップシステムを付け加えました。(これについては、まだ少し使いづらい部分があるので細かいところはそれぞれ改良してください。)
という感じです。
では、さっそくコードをみていきましょう!
パラメータには
extern int RCIPeriod=52;
と
extern string setsumei2="【time】時までに残高【border】を割ったらストップ";
extern bool StopSystem=false;
extern int time=23;
extern double border=0;
というのが加えられました。
フィルタ用のRCIの計算期間を設定できるようにしました。
あとは、付属のストップシステムの設定用ですね。必要がない場合は、
StopSystemをfalseのままにしておきましょう。
続いて、int start()の中身です。
if(StopSystem== true && TimeHour(TimeCurrent())<time && AccountBalance()<border) return(0);
は、もしStopSystemがtureで現在時刻が time 未満で残高が border 未満ならプログラム終了という感じです。timeを24にした場合は時間に関係なく残高が border 未満ならプログラム終了。仮に、timeを12にしたときは現地の午前中だけ有効なシステムになる感じです。
次に、
//RCIの値
double RCI1=iCustom(NULL,0,"SpearmanRankCorr",RCIPeriod,0,RCIPeriod,0,1);
double RCI2=iCustom(NULL,0,"SpearmanRankCorr",RCIPeriod,0,RCIPeriod,0,2);
でiCustom関数を使ってRCIの1コ前と2コ前の値を引き出します。
インディケータのパラメータがRCIPeriod,0,RCIPeriod,と3つあるのは、
一つ目は、そのまま計算期間なんですが、3つ目は計算期間の最大値が入ります。
デフォルトでは30になっているのでそれ以上を計算できるように、3つ目も変更するようにしました。
次に、
//買い条件
if(STC[2]<5 && STC[1]>5 && RCI1>RCI2)
として、RCIが上昇のときという条件も加えました。
そして、
for(i=2;i<=SchaffHebariPeriod;i++)
{
if(STC[i]<5) STCcnt=STCcnt+1;
}
というようにシャフが5未満ならへばりついているとみなしています。
売り条件も同様に変更しました。
そして、
//ロット計算
double mantuka;
if(USD1JPY2==1) mantuka = AccountBalance() / 10000;
if(USD1JPY2==2) mantuka = AccountBalance()/Ask / 10000;
int baituka = mantuka * Leverage;
double lots = baituka * 0.1 ;
if(lots<=0.1) lots=0.1;
if(lots>=1000) lots=1000;
として、ドル口座か円口座を選べるようにしました。ただし、円口座の場合はドル円やユロ円などに限ります。ユロドルなどを取引する場合は、別途MarketInfo関数で計算するコードが必要です。
最後に
OrderSelect(cnt,SELECT_BY_POS);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == 999) CurrentPosition=cnt;
として、このMetabo戦略を複数通貨同時に取引できるようにしました。
個人的な感想として、RCIとの相性は若干薄いのではといったところです。
また、いい方法があったら教えてくださいm(..)m
応援お願いします!
→FXシステムトレード派
ps
最近、優良ルールVolAveが絶好調\(^0^)/
→VolAve
タグ
2007年12月21日|コメント (0)|トラックバック (0)
カテゴリー:MetaTrader EA
メタボリック社長の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日|コメント (23)|トラックバック (0)
カテゴリー:MetaTrader EA
20/200 expert v3
自動売買チャンピオンシップ2007で第5位に入賞し
3ヶ月弱で$10000を約3.7倍にしたzyx40さんが元にしたEAです。
関連するブログ記事を下記のタグをクリックして頂く事でまとめてご覧頂けます。
タグ
2007年10月29日|コメント (0)|トラックバック (0)
カテゴリー:MetaTrader EA
MaDo
特定のパターンを狙い撃ちするシステムです。
取引頻度は少ないですが効率よく稼いでくれます。
| 期間 | トレード回数 | 勝率(%) | 利益率(%) |
| 2007.10 | 1 | 100 | +0.45 |
| 2007.11 | 2 | 50.00 | -19.82 |
| 2007.12 | 5 | 100 | +11.09 |
2008年からMaDoV2(改良版)とVolAveを1つにまとめ、
VAWMというEAしました。
結果は右サイドに表示するようにしました。
タグ
2007年10月29日|コメント (0)|トラックバック (0)
カテゴリー:MetaTrader EA
VolAve
Volume と Average の融合システムです。
やはり出来高は値と密接な関係があるようです。
| 期間 | トレード回数 | 勝率(%) | 利益率(%) |
| 2007.10 | 26 | 69.23 | +1.46 |
| 2007.11 | 20 | 75.00 | +2.58 |
| 2007.12 | 18 | 72.22 | +3.05 |
2008年より、MaDoV2(MaDoの改良版)とひとつにまとめ、
VAWMというEAにしました。
結果は右サイドに表示するようにしました。
タグ
2007年10月29日|コメント (2)|トラックバック (0)
カテゴリー:MetaTrader EA
Docro
移動平均線を Do cross したら、取引するということで『Docro』と命名。^^;
18移動平均線を使ったシステムで売買条件を少し付け加えたものです。
USDJPY1時間足使用
| 期間 | トレード回数 | 勝率(%) | 利益率(%) |
| 2007.10 | 12 | 66.67 | +0.39 |
| 2007.11 | 13 | 61.54 | -1.57 |
| 2007.12 | 10 | 70.00 | +0.59 |
2007年は8月につまづいた感じになり5%ほどの利益しか出ませんでした。しばらく、デモの方で様子を見ようかと思います。
タグ
2007年10月29日|コメント (0)|トラックバック (0)
カテゴリー:MetaTrader EA
HeikinSample
完全自動売買への道のりで作ってきたシステムを最適化して出した成績はこちら。
まずまず安定したシステムになりました。
しかし、こちらを見てください。
前の4年間のデータと比べると、かなりパフォーマンスが落ちています。
これは、この4年間にぴったり合うようにパラメータを変えたために起こるものです。(カーブフィッティングという)
実際のパフォーマンスは2007年以降のバックテストとデモ取引の成績で良し悪しを判断しましょう。
このようにできたシステムを数ヶ月デモ取引をしましょう。
成績優秀ならば使えるシステムの一つとして考えてもよいのではないかと思います。
デモ取引している間に、さらに良いシステムを作るようにしましょう。
タグ
2007年10月22日|コメント (0)|トラックバック (0)
カテゴリー:MetaTrader EA














