- ホーム
- Expert Advisor Builder。
- タグクラウド
Expert Advisor Builder。
posted by SBT at 2005-12-17(土) 22:48
MetaQuotes LanguageはC言語と非常によく似た仕様であるため、多種多様に渡るトレーディングシステムの作成が可能ですが、プログラミング経験のない人にとっては敷居が高いものでした。
そこで、そういったプログラミング経験がない人でも簡単にトレーディングシステムを作成できるように Expert Advisor Builder を制作・公開しました。
(同様のクライアントサイドアプリケーションとして、scorpion氏によるZeroCode Beta 1がありますが、そのサーバーサイドアプリケーション版・MetaTrader 4対応版のような位置付けとなります。)
ちょっとしたルールの検証、MetaQuotes Languageの学習等にお使いください。 Expert Advisor Builderの使い方について、簡単に説明します。
1.Logicsで買い(Buy logics)・売り(Sell logics)・買い決済(Close(Buy) logics)・売り決済(Close(Sell) logics)から、ルールを作成したい項目の Addをクリックします(作成したルールを削除する場合にはDelをクリックします)。
2.クリックした項目にルールを設定するためのフォームが表示されます。
3.表示されたフォームの左から順に論理演算子・インジケーター(左辺)・比較演算子・インジケーター(右辺)を選択します(論理演算子は、各項目の一つ目のルールに関しては無視されます)。
4.インジケータを選択するとそのインジケーターのパラメーターを設定するフォームが表示されます。
5.表示されたフォームにパラメーターを入力します。
6.同様に繰り返して必要な項目のルールを設定していきます。
7.注文に関する設定をOrderで設定します。
8.Complete!ボタンをクリックすると、完成したトレーディングシステムのソースコードをダウンロードすることができます。
ルールの設定(Logics)について、簡単に説明します。
・基本的に、インジケーターフォームで選べるものはMetaTrader 4に標準で搭載されているインジケーターです。
・標準で搭載されていないインジケーターはCustom Indicatorを選択して、手動でインジケーターの名前(拡張子を除くファイル名)とパラメーターを入力してください。
・主要なカスタムインジケーターは、インジケーターフォームに追加してあります。
・カスタムインジケーターを使うには、インジケーターの.ex4ファイルがC:\Program Files\MetaTrader 4\experts\indicators\になくてはなりません(MetaTrader 4を C:\Program Files\MetaTrader 4\にインストールしている場合)。
・Close・Hihg・Low・Openは、それぞれ終値(または、現在の価格)・高値・安値・始値となります。
・数値を直接入力したい場合にはNumber/Variableを選択してください。
・パラメーターの設定フォームに表示される項目は、通常、MetaTrader 4(Terminal)でインジケーターを表示する際に設定する項目と同様のものです。
・MetaTrader 4(Terminal)に存在しないパラメーターとしてSymbol・Timeframe・ModeとShiftがあります(Modeは一部のインジケーターのみ)。
・Symbolでは、インジケーターの計算に使用する通貨ペア(銘柄)を選択します。
・Timeframeでは、インジケーターの計算に使用する時間軸を選択します。
・Symbol・Timeframeともに、Expert Advisorを添付したチャートの通貨ペア(銘柄)・時間軸を使用する場合にはCurrentを選択します。
・Modeでは、複数の線を持つインジケーターの場合に、ルールに使用する線の種類を選択します。
・Shiftでは、どの時点のインジケーターの値をルールに使用するかを入力します。
・Shiftで0を入力すると、現在のインジケーターの値をルールに使用します。
・Shiftで1を入力すると一つ前の期間(バー)のインジケーターの値をルールに使用します。
・同様に、入力した数値分前のインジケーターの値をルールに使用することができます。
注文に関する設定(Order)について、簡単に説明します。
・SignalModeでは、どの時点でシグナル(注文)を出すかを選択します。
・Each Tickモードでは、レートが変わるごとにシグナルの判定を行います。
・Complete Barモードでは、バーが完成し終わった時にのみシグナルの判定を行います。
・Each Tickモードの場合でも、同じバー内でシグナルが発生するのは一度のみです。
・同様に、Each Tickモードの場合でも、同じバー内で買い・売り・決済のシグナルが同時に(または、複数回)発生することはありません。
・ただし、例外として、決済の後の買いシグナル・売りシグナルは即座に発生します(これは途転注文に対応するためです)。
・Lots・Slippage・StopLoss・TakeProfit・TrailingStopには、それぞれロット数・スリッページ幅・損切り幅・利食い幅・トレイリングストップ幅を入力します。
・プルダウンメニューのある項目では、それぞれUseとNon-usでその項目の使用・不使用を選択できます。
ダウンロードしたファイルは下記の要領で使用することができます。
1.ダウンロードしたファイルをC:\Program Files\MetaTrader 4\experts\にコピーします(MetaTrader 4を C:\Program Files\MetaTrader 4\にインストールしている場合)。
2.MetaTrader 4(Terminal)のメニューからツール->MetaQuotes Language Editorを選択し、MetaQuotes Language Editorを起動します。
3.MetaQuotes Language EditorのメニューからFile->Openを選択し、ダウンロードしたファイルを読み込みます。
4.メニューからFile->Compileを選択し、ソースファイルをコンパイルします。
5.リアルタイムにトレーディングシステムとして動作させる場合には、MetaTrader 4(Terminal)のナビゲーターウィンドウのExpert Advisorsから、コンパイルしたエキスパートアドバイザーを選択します(動作しない場合には、メニューからツール->オプション->Expert Advisorsを選択し、Enable Expert Advisorsにチェックを入れてください)。
5.ストラテジーテスターで検証を行う場合には、メニューから表示->Strategy Testerを選択し、テスターウィンドウのセッティング->Expert Advisorからコンパイルしたエキスパートアドバイザーを選択します。
なお、Expert Advisor Builder自体は高度な実装方法とは言えず、リロード処理も頻発しますが、なるべくストレスを抑えるような動作にしたつもりです。
最低限の入力チェックしか行っていないため、ルールの追加・インジケーターの選択・パラメーターの入力等の際には十分に注意してください。
Expert Advisor Builderや出力されたスクリプトに関するバグ・ご要望(特にEach Tickモードの動作)等ありましたら、フィードバックしてもらえれば、出来る限りは反映していきたいと思います。
Expert Advisor Builderを使用したトレーディングシステムの作成方法については、今後、取り上げていく予定です。
最後に、Expert Advisor Builderを使用したことによる如何なる損失についても、作者はその責任を負うものではありません。
仕組みを理解することなくシステムを運用することは極めて危険ですので、Expert Advisor Builderで作成されたトレーディングシステムは検証目的のみで使用されることをおすすめします。
各自、ご自身の判断と責任の下に使用される様、お願いします。
コメント
Posted by ASD at 2005-12-25(日) 06:35
初めましてSBTさん。 今までシステム売買をやってみようと思いながらもプログラミングで四苦八苦していたところに今回Expert Advisor Builderを見つけまして、早速使わせていただきました。 設定の仕方などはとても分かりやすく使いやすかったのですが、コンパイルした後に作成される○○.ex4が作成されずMetaTrader 4に実装出来ません。 試しに、サンプルのMACDのやつでコンパイルしたら作成されました。 すみませんが、どうか改善方法をお教えお願いします。
Posted by ド・ジッター at 2005-12-25(日) 13:28
MASDさん こんにちは。 先にコメントしたド・ジッター ですが私のやり方でよろしければご参考になさって下さい。 MT4へダウンロードまではよろしいでしょうか、先ずMetaEditorを開いて新規作成(Expert Advisor program)で好きな名前でファイルを作ります。 次に先ほどダウンロードしたYour Expert Advisorファイルを開きます。 この内容をすべてコピーし新規作成したファイルに貼り付けてコンパイルすると使える様になりました。 もっと簡単な方法があるかも知れませんが、取り合えず使えるようになりましたのお試しください。また有益な使い方などありましたら皆で共有したいですね。
Posted by SBT at 2005-12-25(日) 15:01
>ド・ジッターさん 初めまして。 S.B.Tサンタからのささやかなプレゼントでしたが、喜んでいただいてよかったです。 複雑な処理はできませんが、工夫次第でそれなりのものは作れると思います。 インジケータによるマークアップ等のちょっとした検証用のスクリプトの作成にも使えると思うので、どんどんご利用ください。 >ASDさん 初めまして。 コンパイルできないということですが、バグでした(改行コードがWindows用になってなかった)。 コピー&ペーストしながら動作確認をしてたので気付きませんでした…ごめんなさい、直しておきました。 すでに保存したファイルは、MQLエディターにファイルの内容をコピー&ペーストするか、改行コードを指定できるテキストエディター等で(改行コード: LFで)開いて、 文字コード: SHIFT-JIS 改行コード: CR+LF として上書き保存するとコンパイルできるようになります。 追記: すれ違いになってしまった。 ド・ジッターさん、ありがとうございます。 ASDさん、既にダウンロードしてしまったファイルはそのようにしてお使いください。 お手数をおかけします m(__)m
Posted by ASD at 2005-12-25(日) 20:12
>>SBTさん、ド・ジッターさん 有難うございました。 これでシステム売買に向けて一歩を踏み出すことが出来ます。
Posted by ド・ジッター at 2005-12-25(日) 22:07
>>S.B.Tサンタさん,MASDさん また早とちり、ドジってしまいました。 私の方法でもだめだったんですね。 気を取り直して早速いろいろ試してみたいと思います。
Posted by ASD at 2005-12-26(月) 03:04
度々すいません。 早速、試してみたのですが、コンパイルは成功したのですが、ストラテジーテスターでの検証が出来ません。 スタートは押せるのですが、内容を見てみると一度も取引をしていないみたいで、取引回数が0になっています。 度々お手数おかけして申し訳ないのですが、改善方法を宜しくお願いします。
Posted by SBT at 2005-12-26(月) 14:16
>>ド・ジッターさん いえいえ、ド・ジッターさんの方法でもできるので全然問題ないですよ。ありがとうございました。 >>ASDさん こちらこそ度々ごめんなさい、バグでした。 カスタムインジケーターに対応させた際に、余計なとこまでいじってしまっていたようです、直しておきました。 他にバグがないか、もう一度、全体を見直してみます。 おかしなところや気になる動作がありましたら、ご報告いただけると助かります m(__)m
Posted by ASD at 2005-12-26(月) 23:55
>>SBTさん 有難うございます。検証することが出来ました。 これからExpert Advisor Builderを使わせて戴き色々と検証させて貰おうと思います。
Posted by たかさん at 2006-04-03(月) 19:13
はじめまして。今回このサイトを知り大変うれしく思います。
さて,カスタムインジケーターで作成したあとコンパイルしたときに1カ所だけひっかかってしましました。その部分をコピー致しますのでご検討ください。
以下の3行目で '12'-wriable not defined
と表示されてしまいます。
内容
double Var1 = iMA(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Var2 = iMA(NULL, 0, 36, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy1_1 = iMA(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy1_2 = iMA(NULL, 0, 36, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell1_1 = iMA(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, 0, 36, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseBuy1_1 = iMA(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseBuy1_2 = iMA(NULL, 0, 36, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseSell1_1 = iMA(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseSell1_2 = iMA(NULL, 0, 36, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
なぜか全角に変換されていたことに気付き直しましたら,コンパイルできました。ここがもしかしたら,バグになってるかもしれません。ご確認いただければ幸いです。
Posted by SBT at 2006-04-04(火) 00:40
はじめまして、たかさん。 こちらで同じような感じの設定で試してみました。 直接入力できるパラメーターについては加工してないのでたぶん全角になることはないと思うんですが、ちょっと再現できませんでした(入力値のチェックは手抜きでしてません)。 再現できるようでしたら、詳しい設定値を教えていただければありがたいです。 EA Builderは基本部分を5?6日で作ったもので粗があるかもしれません ^^;
Posted by たかさん at 2006-04-04(火) 05:12
早速レスありがとうございます。まだ,使い始めて1日目(*_*),他の方法でも入力してみて試したらまたご報告したいと思います。 さて,もう一つ質問なのですが, trailing stop というのは,どういう意味なのでしょうか?私プログラミングと英語が全くの素人故,基本的な質問で申し訳ないのですが,教えていたただ蹴れば幸いです。 なお,1日経った今現在,カスタムインジケーターで作成したした方はまだ,注文がでていません。もともとサンプルについてきているmoving averageはヒット(注文)が入っている状況です。
Posted by たかさん at 2006-04-04(火) 06:40
たびたびすみません。もう一つお聞きしたいことがあります。 バックテストを行い,その結果表[optimization results]の中の左端にある"pass"はどのような意味なのでしょうか。よろしくお願いいたします。
Posted by たかさん at 2006-04-04(火) 07:55
さらにもう一つお聞きしたいことがあります。 ツール?ヒストリセンターからデータをダウンロードできたのですが,MACDのバックテストをやっても結果が表示されません。これはどのように解決したらよろしいのでしょうか?何度もすみません。
Posted by SBT at 2006-04-04(火) 07:59
Trailing stop=トレイリングストップ(トレーリングストップ)で、ストップ(=逆指値)注文を引きずることの意になります。 たとえば買い持ちの場合で相場が上昇しているときに、相場の動きに合わせて損切りのためのストップ注文を引き上げていくことを言います(引き上げられたストップ注文が買値を越えると、以降、利益(ストップレート-買値)確保のためのストップ注文になる)。売り持ちの場合はこの逆ですね。 Googleなどで検索してみるとわかりやすい解説もいくつか見つかると思うので、よかったら探してみてください^^; トレイリングストップには色々な方法があるんですが、EA Builderでは現在のレートとストップ注文の差(pips)が、常に設定したpipsを保つような仕様になっています。 つまり、EA Builderのトレリングストップを使うと、常に買値-設定pips、売値+設定pipsの位置にストップ注文が置かれる(移動する)ようになります(たしかそうなってるはずです^^;)。 あと、Passの方ですが、これはストラテジーテスターで最適化テストをしたときの、パラメーター(の組み合わせ)ごとの検証結果の通し番号です。 ストラテジーテスターの「Expert properties」から設定をして「Optimization」にチェックを付けて検証(Start)すると、設定に基づいて自動的にEAのパラメーターを変えながら検証をしてくれるんですが、それの結果の通し番号になります。右の方の「パラメーターの入力」欄にパラメーターの組み合わせが表示されます。 ほとんど使ったことはないんですが、パラメーターを色々変えながら最適な設定値を探したいときに、それを自動で行ってくれるのでなかなか便利な機能ですね。
Posted by SBT at 2006-04-04(火) 08:12
かぶってしまいましたね。 ヒストリカルデータをダウンロードする必要はないはずですが、テストするときに一度、ストラテジーテスターの「ファイルの更新」にチェックを付けてStartすると、自動的にデータを取ってきてくれますよ。 で、テスターですが、たまに検証ができなくなることがあるみたいですね。通貨ペアやモデルを変えてみて試すとできるかも(?)。あとはMT4を再起動してみるとか、でしょうか。ちょっと原因がわかりません^^;
Posted by たかさん at 2006-04-04(火) 22:32
いつも丁寧なご説明ありがとうございます。初心者の私にもわかりやすく解説してくださり大変助かります。
Posted by たかさん at 2006-04-05(水) 05:24
メニューについての質問です。 今Interbank FX のmetaTraderを使っているのですが,ツール->オプション->Expert Advisorsの中のメニューの意味をそれぞれ教えていただけますしょうか?なぜか,自動売買ができずにいます。Enable Expert Advisorsにチェックを入れていなかったためであることが,前レスでやっと把握したのですが,そのほかのメニューの意味も知りたいので,お手数を(また)かけますがよろしくお願いいたします。
Posted by たかさん at 2006-04-05(水) 19:40
またまたお聞きしたいのですが…。 いくつかの通貨ペアのグラフを開いているとします。それぞれ,移動平均なりMACDなりの自動売買をスタートさせているとします。metaTraderでは,カレントシートのみ自動売買するのでしょうか?というのも選んだ6ペアを設定し1日動かしていても,全然自動売買を開始してくれません。もちろん帽子マーク?=スタートマークをONにしてあります。あと,例えば「ドル円」のシートを2つ開いて,一つは移動平均,もう一つをMACDで自動売買させようとすることは可能なのでしょうか?
Posted by SBT at 2006-04-06(木) 00:39
Expert Advisorsのオプションは、上から順に次のような意味になります。 ・Enable Expert Advisros(?) エキスパートアドバイザーを有効にする(エキスパートアドバイザーを動かすときはチェックが必要) ・Disable experts when the account ? アカウントが変更されたときはエキスパート(アドバイザー)を無効にする(通常はチェック不要) ・Disable experts when the profile ? プロフィールが変更されたときはエキスパート(アドバイザー)を無効にする(通常はチェック不要) ・Allow live trading エキスパートアドバイザーによるトレードを許可する(エキスパートアドバイザーを動かす場合はチェックが必要) ・Ask manual confirmation エキスパートアドバイザーがトレードを行う際に確認を求める(全自動で動かす場合はチェック不要) ・Allow DLL imports DLLの呼び出しを許可する(通常はチェック不要) ・Confirm DLL function call DLLファンクションコールに確認を求める(通常はチェック不要) ・Allow external experts imports 外部のエキスパート(アドバイザー)の呼び出しを許可する(通常はチェック不要) 古い&かなり手抜きですが、 http://sufx.core.t3-ism.net... に一部説明してるので、こちらも参考にしてみてください。 MTのエキスパートアドバイザー(EA)は、基本的に「EAを添付したチャートの通貨ペア・時間軸(日足・1時間足等)で動作」します。 これはEAの組み方次第で指定もできますが、特殊なEAを除いては、添付したチャートの設定が適用されるように組まれているはずです(でないと通貨ペア・時間軸限定でしか動作しないEAになります)。 なので、通常は複数のチャートに添付してもそれぞれのチャートでそれぞれのEAが動作するはずです。 同様に、同じ通貨ペアで別々のEAを動かすことは可能ですが、これもEAの組み方次第なので「EAによって動作が変わってくる」と思います。 付属のMACD Sampleはそこそこ条件がきびしめなので、適用する時間軸にもよりますが1日だと売買が実行されない可能性はあると思います。 どのEAを使われているのかがわからないのでわかりませんが、アップローダーにでもアップしてもらえれば、どういったものかはわかると思います^^; http://sufx.core.t3-ism.net...
Posted by たかさん at 2006-04-06(木) 08:52
いつもながら大変大変参考になりました。ありがとうございました。
Posted by たかさん at 2006-04-06(木) 13:57
今日も質問を一つお願いします。 http://sufx.core.t3-ism.net... にあります,変数はどんな役割を果たしているのでしょうか。これを使わなくても,自動売買はできるのでしょうか。 今日もまたよろしくお願いいたします。
Posted by SBT at 2006-04-07(金) 00:21
変数(Variables)は要望があって後から追加したものなので、ちょっとわかりづらかったですね。 たとえば、21日移動平均線を変数(Variables)の「Var #1」に定義(設定)したとします。 その後、買い・売り・買い決済・売り決済ロジックのプルダウンメニューから「Number/Variables」を選び、「Var #1」ボタンを押すと「Var1」と入力されます。 これだけで、この部分は先ほどの「Var #1」で定義した21日移動平均線と同じ意味を持ちます。 同様に、一度定義した変数(Variables)は何度でも使うことができます。 つまり、変数(Variables)を使うと、同じ設定のインジケーターを何度も使う場合にいちいちパラメーターを設定しなおす必要がなくなる、ってことですね。 面倒を省くためだけの機能なので、当然、使わなくても何も問題ないですよ。
Posted by たかさん at 2006-04-07(金) 00:26
はい,詳しく説明いただきましてありがとうございます。これで,これからいろいろ試してみたいと思います。本当にありがとうございました。感謝します。
Posted by やま at 2006-04-08(土) 09:27
複数の通貨ペアで同時にポジションを持つことは可能でしょうか? ポジション数の制限を増やすと同じペアで複数ポジションを持ってしまいます。 技術が無いもので何か良い方法ありますか?
Posted by SBT at 2006-04-08(土) 13:23
やまさん、こんにちは。
複数ペアで同時に売買することは可能だとは思いますが、試したことがないのでわかりません。
思いついたことを、以下、EA Builderの吐き出すEAを例として書いてみます。
(行番号はおおよその行です。)
143: //Buy
144: if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
145: if(Total < 1) {
165: //Sell
166: if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
167: if(Total < 1) {
145,167 行の 1 が全ペア合計の最大ポジション数になるので、適度な数に変えてください。
ただ、これだけだと同じペアだけで複数のポジションを持ってしまう場合があるので、ペアごとのポジション数をチェックする必要があります。
72: //Check position
73: for (int i = 0; i < Total; i ++) {
74: OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
75: if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
売買を行う前に 72 行以下の部分で決済・トレイリングストップのために保有ポジションのチェックを行っています。
1つのポジションしかチェックしていないので 74 行を複数ポジションに対応させます。
74: OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
EAを添付しているチャートと同じペアのポジションがあると 75 行以下のブロックが実行されますが、この前後にペア(EA)ごとにポジション数をチェックする(フラグを立てる)ための代入式を挿入します。
71: int PairTotal = 0; //チェック用変数初期化
76: PairTotal = 1; //EAを添付しているペアのポジションがあればフラグを立てる
ポジションが決済された場合には、フラグを元に戻す必要があります。
88: if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
115: if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
ポジションを決済する部分である 88,115 行の下にフラグを戻すための代入式を挿入します。
89: PairTotal = 0;
116: PairTotal = 0;
決済・トレイリングストップが行われると 72 行以降の for ループを強制的に抜けるようになっているので、
4カ所ある for ループ内の break; を continue; に変えます。
(ループの頭に戻す。)
あとは売買する際にフラグが立っていなければ売買するようにします。
一番最初の 145,167 行を次の様に変えます。
(Total < 1 の部分は最初に変えた全ペア合計のポジション数に読み替えてください。)
145: if(Total < 1 && PairTotal == 0) {
167: if(Total < 1 && PairTotal == 0) {
全ペア合計の最大ポジション数未満で、かつ同ペアのポジションがない場合にのみ売買するようになるはずです。
76行目を、フラグを立てるのではなく、値をインクリメント(増加)するようにして 145,167 行で PairTotal の値を限定すれば、ペアごとの最大ポジション数も決められるはずです。
が、注文関係の関数はあまり使わない&実際に試したことがないのでこれで本当にできるかは定かではありません。
これでできそうな気がする、といった感じです --;
(もしかしたら、チェック用にグローバルな変数・配列を使わないとダメかも?
あるいは OrderComment() を使ってコメントで管理するとか?)
マーケットが動き出したらちょっとテストしてみます。
こういったテストはオフラインでできないのが大変ですね。
自分自身、試行錯誤でやってる部分がありますので・・・。
Posted by やま at 2006-04-08(土) 20:17
丁寧な回答ありがとうございます! 簡単にコードを変えることができました。 私も来週からデモで実際に売買するか試してみます。
Posted by たかさん at 2006-04-10(月) 15:49
こんにちは。 上記の「やま」様のデモはいかがでしたでしょうか。私もコードを変えようとしたのですが,手元にエディタもなく,最後まで変えることができませんでした。 もし,作動するようでしたら,アップロードをお願いしたいのです。もし無理なようでしたら,変更したプログラムをいただきたいのですが。よろしくお願いいたします。
Posted by SBT at 2006-04-11(火) 00:57
やまさん、複数ペアの同時売買は上記のもので大丈夫そうですね。 だいぶごちゃごちゃしたソースになってるのでこれでできそうかな、って感じでしたが、これでできたみたいです(笑 インクリメントするようにすれば、そのままピラミッディングもできますね。 たかさん、複数ペアでの同時売買(各ペア1ポジションのみ)に対応したEAについては、EA Builderに組み込みましたのでこちらを利用してみてください。 「Complete!」ボタンで複数ペア対応版のEAが出力されるようになってます。
Posted by たかさん at 2006-04-11(火) 07:58
さっそくありがとうございます。今日使ってみようかと思います。 ところで以前教えていただきました「Number/Variable」選ぶとValueという部分が出てくるのですが,これは別段使わなくても大丈夫なのでしょうか? あと,complete!ボタンで生成したプログラムは,そのまますべて新しい画面にかぶせてコピーしても大丈夫なんですか?それとも,NEWで作成して中に書いてある部分を残して(その下に)貼り付けたらよろしいのでしょうか? よろしくお願いいたします。
Posted by やま at 2006-04-11(火) 11:17
今日の取引見たら、ちゃんと複数ポジション作ってくれてました。大変助かります。 ライブ口座でも運用し始めました。 これからもEAB利用させていただきます。 ありがとうございました。
Posted by SBT at 2006-04-11(火) 12:24
>たかさん 「Number/Variable」は数値を直接入力したい場合に使います。 数値を使う必要がない=インジケーターだででロジックを組む場合には必要ないですよ。 新しく作成したEAを上書きすると古いEAは消えてしまうので、必要ならばMQLエディタの「New」から新規するようにしてください。 既存のEAを複数ペア対応にするには、古いEAの中にあるVariable Begin?Varible EndとSignal Begin?Signal Endの部分を残して、その他の部分を新しいものに張り替えます。 よくわからない場合には、お手数ですが始めから作り直すか、↑にあるように古いEAを書き直されたほうが早いかと思います。 >やまさん ひょっとしたらもっと複雑なことをしなくてはいけないかと思いましたが、あれでよかったみたいだすね。 自分自身も動作の確認がとれてよかったです ^^
Posted by たかさん at 2006-04-11(火) 15:07
ありがとうございます。 実は,動作しないんです。サンプルの移動平均は動作し,それとは別の通貨ペア4種類をこのExpert Advisor Builder であてがってみました。時間は5分で設定し,罫線もExpert Advisor Builder の設定と同じようにして,見た目でもクロスしているのが分かるようにしました。でも,なぜか,動作しません。どこがおかしいのか見当が付きません。再インストールした方がよいのでしょうか?もちろん,aliveにするなどの設定はきちんとやっているのですが。コピーして貼り付ける方法が悪いのでしょうか?とりあえずNEWでできたファイルの中を全部消して,Expert Advisor Builder で作ったプログラムを全部コピーして貼り付けています。そのあと,コンパイルさせてできあがり,とういう感じで作ったのですが…。
Posted by たかさん at 2006-04-11(火) 19:39
再インストールをしたらなんか1通貨だけ売買しました。このあと様子を見てみます。いろいろすみません。
Posted by たかさん at 2006-04-12(水) 21:14
やはり動作しません。理由が分からないのです。上記に書いたようにやっていたのですが,何か誤りがありますでしょうか?もし,原因が分からないときには,使用して(動いている)ファイルをいただけますでしょうか?
Posted by SBT at 2006-04-13(木) 09:27
どういった売買ルールを設定されてるのかがわからないのでなんとも言えませんが、 買い 12MAと36MAのゴールデンクロス 売り 12MAと36MAのデッドクロス 利食い・損切り・トレイリングストップ全てなしで、ゴールデンクロス・デッドクロスのみで売買する途転型のEAをアップローダーにアップしておきました。 http://sufx.core.t3-ism.net... EA Builderの吐き出すソースファイルは汎用性を持たせてあるため、途転など細かい部分で意図しない動作をすることがあるかもしれませんが、練習用・検証補助用ということでその辺は多めに見てくださいね。
Posted by たかさん at 2006-04-13(木) 19:39
ありがとうございます!!!早速試してみたいと思います。
Posted by たかさん at 2006-04-13(木) 20:43
動きました!動きました!うれしいです。ありがとうございます。
さて,プログラムを印刷して比較したら,違うところがありました。動作しないはどうしてなのでしょうか?以下に違うところ(発見できたのは4カ所です)を記しましたので分析をお願いします。なお,EA Builderの入力画面に従ってにゅうりょくしたつもりなのですが…。よろしくお願いいたします。
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_OPEN, Current + 0);
double Buy1_2 = iMA(NULL, 0, 34, 0, MODE_SMA, PRICE_OPEN, Current + 0);
double Sell1_1 = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_OPEN, Current + 0);
double Sell1_2 = iMA(NULL, 0, 34, 0, MODE_SMA, PRICE_OPEN, Current + 0);
double CloseBuy1_1 = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseBuy1_2 = iMA(NULL, 0, 34, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseSell1_1 = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseSell1_2 = iMA(NULL, 0, 34, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
if (CloseBuy1_1 == CloseBuy1_2) Order = SIGNAL_CLOSEBUY;
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
if (CloseSell1_1 == CloseSell1_2) Order = SIGNAL_CLOSESELL;
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 == Buy1_2) Order = SIGNAL_BUY;
if (Sell1_1 == Sell1_2) Order = SIGNAL_SELL;
Posted by SBT at 2006-04-14(金) 09:19
上記の4カ所の部分が、EA Builderで設定した売買ルールによって変わります(逆に言えば、MQLの知識が必要ですが、この部分だけ変えればEA Builderを使わなくても他のEAを作ることができます)。 上記のたかさんのEAですが、人間の理解できるルールをMT4の理解できる記述に直す際にやりがちな典型的なミスがいくつかあるようです。 まず、上記のEAは、 買い: 14MAと34MAが重なっているとき(買いポジションの決済も同様) 売り: 14MAと34MAが重なっているとき(売りポジションの決済も同様) とMT4に理解されます=そう理解させるための記述がされています。 つまり、「買い」も「売り」も「買いの決済」も「売りの決済」も全て「14MAと34MAが重なったとき」という同じルールでシグナルを出すことになっています。 これでは売り買いを決めようがなく、これはロジックのミスと言えます(仮にこのルールが成立しても、エントリーに関しては後から書かれたもの=SIGNAL_SELLの売りシグナルしか発生し得ません)。 それと、それ以前にこの間違ったルール自体も成立することはほぼありません。 「重なる」というのは人間の目から見た場合であって、上記のEAの場合、MT4から見ると14MAと34MAの数値が一致したときにのみシグナルがでます MT4の内部ではインジケーターの数値は小数部を伴って記録されています(118.451232...等)。 MA=移動平均線はレートを加工(平均)した結果ですので、14MAの数値と34MAの数値が小数部を含めて完全に一致することはまずありません(= での比較は、左辺と右辺が完全に一致した場合のみ成立します)。 よって、そもそもこのルール(式)自体がほぼ成立し得ないのでシグナルも出ない、ということになります。 プログラミングの経験等がないと、このあたりの考え方がわかりにくいと思いますが、下記の記事で考え方を書いてますので参考にしてみてください。 http://sufx.core.t3-ism.net... http://sufx.core.t3-ism.net...
Posted by たかさん at 2006-04-14(金) 13:43
いろいろありがとうございます。わからないながらも,少し勉強になりました。また,質問等ありましたらば,よろしくお願いいたします。
Posted by qp at 2006-04-26(水) 10:27
こんにちは!質問があります。 上記の説明に『3.表示されたフォームの左から順に論理演算子・インジケーター(左辺)・比較演算子・インジケーター(右辺)を選択します(論理演算子は、各項目の一つ目のルールに関しては無視されます)。』がありますが意味が全くわかりません。どんな意味なのですか?御教授お願いします。
Posted by SBT at 2006-04-26(水) 14:48
qpさん、こんにちは! わかりやすいようにEABの[Buy logics]の設定部分を前提として書きますね。 例えば、「A>B」という条件と「C>D」という条件が「両方とも」成立している場合にのみ買いポジションを持つには、EABでは論理演算子として次のように「AND」を設定します。 Buy logics Buy #1: [AND] [A] [>] [B] Buy #2: [AND] [C] [>] [D] (Buy #n: の後の[]内が左から論理演算子・左辺・比較演算子・右辺です。A・B・C・Dは実際にはインジケーター名になります。) 「A>B」という条件と「C>D」という条件の「どちらか」が成立している場合に買いポジションを持つ場合には、論理演算子として次のように「OR」を設定します。 Buy logics Buy #1: [AND] [A] [>] [B] Buy #2: [OR] [C] [>] [D] EABでは、一つ前の条件(この場合#2から見ると#1)に対して、買いの成立条件が「両方とも」(AND)なのか「どちらか」(OR)なのかを設定することになります。 #1の場合には、それより前の条件がありませんので、Buy logics・Sell logics・Close(Buy) logics・Close(Sell) logicsのそれぞれの#1に関しては「AND」や「OR」の設定は無視されることになります。 つまり、論理演算子についてはそれぞれ#2以降についてのみ設定するようにすればよいということです。 わかりやすく書こうと思ったんですが、逆にわかりにくくなってしまいましたかね・・・?
Posted by qp at 2006-04-27(木) 01:59
解説、ありがとで?す。
Posted by qp at 2006-04-28(金) 09:12
ん?????・・・スタート押しても、反応しない?...
Posted by qp at 2006-04-28(金) 09:59
一目均衡を例に売買ルールは適当にして詳しく設定手順を教えてほし?んですけど・・・(泣く STBさんなら答えてくれますよね、ね!
Posted by SBT at 2006-04-28(金) 15:35
基本的には全て、買い=Buy・売り=Sell・買い決済=Close(Buy)・売り決済=Close(Sell)からルールを設定したいところのAddをクリックしてルールを設定する、という同じ流れでできますよ。 一目均衡表の場合には、ドロップダウンメニューからIchimoku Kinko Hyouを選んでください。パラメーターの項目はMT4と同じなのでMT4での設定を参考にしてみてくださいね。 ちなみに基準線・転換線等はModeの項目で選べます(ローマ字なのですぐわかると思います)。
Posted by qp at 2006-04-29(土) 09:24
システムの作成・整理のとこ読んだら解りました。ってか真上にあるじゃん^^; これ読まないと何がなんだかチンプンカンプンですた。対応、ありがとうございます。 また、なにかありましたら宜しくおねがいします。
Posted by qp at 2006-04-29(土) 11:49
サンプルの数値そのまんま入力しましたが・・・エラーがでるのは、、、なぜ?
Posted by タカハシ at 2006-05-01(月) 19:21
こんばんわ。 以前指標のメールアラート機能を提唱しましたタカハシです。 やはり開発には相当時間がかかってしまうでしょうか。
Posted by SBT at 2006-05-01(月) 22:33
>qpさん 入力値のチェック等は手抜きをしてるので半角で入力するようにしてください。 入力例は以下の記事等が参考になるかと思います(ちょっと前のバージョンですが基本的には同じです)。 http://sufx.core.t3-ism.net... http://sufx.core.t3-ism.net... http://sufx.core.t3-ism.net... http://sufx.core.t3-ism.net...
Posted by SBT at 2006-05-01(月) 22:53
>>タカハシさん
ごめんなさい、ちょっと他のことで忙しかったもので機能として追加できないでいます。
メールを送ること自体はそんなに難しくないので、以下を参考にご自分でいじってみてください。
91: if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
92: OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
119: if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
120: OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
160: Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
182: Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
(およそ)92行目が買いの決済、120行目が売りの決済、160行目が買い、182行目が売りの処理になります。
それぞれメールを送りたい処理の下に以下の行を追加すればできます。
SendMail("タイトル", "内容");
タイトルと内容には日本語は使えませんので英数字のみで書いてください。
SendMail("[Alert] Buy signal", "Current rate is " + DoubleToStr(Close[0]));
等とすればレートを内容に含めることもできます。
メールの設定は(英語表記にして)Tools -> Optinons -> Emailの設定が使われます。
Testで送信できない場合は上記の行を追加してもメール送信できませんので、使えるSMTPサーバーを色々試してみてください。
Posted by タカハシ at 2006-05-02(火) 01:05
早々のご返信ありがとうございます。 残念ながら自分ではとてもできそうにありません。 メール自体はテストで送られるようになって入るのですが。 気長にお待ちしております。 よろしくお願いいたします。
Posted by タカハシ at 2006-05-02(火) 01:19
すみません。 一応自分でチャレンジしてみます。 現在の環境ですが、Meta Traderを5つインストールしている状況です。 それはさておき、RSIの14日で70を超えたとき、30を割ったときにシグナルメールを出す、という感じにしたいです。
Posted by SBT at 2006-05-02(火) 02:14
タカハシさんのルールに合うと思われるアラート用のEABの設定ファイルをアップローダーに上げておきました。 http://sufx.core.t3-ism.net... EABの「Logics」のところから読み込んで、「Complete!」で.mq4ファイルをダウンロードしてみてください。 その.mq4を↑の要領で修正してもらえれば早いと思います。 買い処理の部分が30を割ったとき、買い決済処理の部分が70を越えたときに対応しますので、↑で言う92、160行目前後にSendMailを追加してみてください。 それと、これはEAなので買いのみですが実際にトレードを行うので、リアルアカウントで動作させないように注意してください。 メールアラートのみを行うMQLを作れるツールというのもおもしろいかもしれませんね。 少し手が空いてきたのでそのうち機能追加したいと思いますので、もうちょっと待っててください。
Posted by タカハシ at 2006-05-02(火) 04:05
了解いたしました。 とりあえずチャレンジし、機能追加お待ちしております。 EABで気になった点ですが、仮に通貨や時間軸を指定しない場合、どのような処理がなされるのでしょうか。 初期のEABでは解説を見てみますと指定はなかったようにできているように思えるのですが。
Posted by qp at 2006-05-02(火) 11:22
度々すいません。。。
Symbol、Timeframeの項目に入力しないでコンパイルしたらエラーがでませんでした。
しかし、一目均衡に関してテストしてみるとコンパイルしてエラーは出ないがテスターでのスタート後、検証を一度もおこなっていません。
検証してみたデータを掲載しておきます。
どこがおかしいのですか?
double Buy1_1 = iIchimoku(NULL, 0, 5, 0, 0, MODE_TENKANSEN, Current + 1);
double Buy1_2 = iIchimoku(NULL, 0, 0, 26, 0, MODE_KIJUNSEN, Current + 1);
double Buy2_1 = iIchimoku(NULL, 0, 5, 0, 0, MODE_TENKANSEN, Current + 0);
double Buy2_2 = iIchimoku(NULL, 0, 0, 26, 0, MODE_KIJUNSEN, Current + 0);
double Sell1_1 = iIchimoku(NULL, 0, 5, 0, 0, MODE_TENKANSEN, Current + 1);
double Sell1_2 = iIchimoku(NULL, 0, 0, 26, 0, MODE_KIJUNSEN, Current + 1);
double Sell2_1 = iIchimoku(NULL, 0, 5, 0, 0, MODE_TENKANSEN, Current + 0);
double Sell2_2 = iIchimoku(NULL, 0, 0, 26, 0, MODE_KIJUNSEN, Current + 0);
Posted by SBT at 2006-05-02(火) 23:24
>>タカハシさん 通貨や時間軸を指定しない場合=Currentを指定した場合、添付したチャートの設定が使われます。 例: ドル円の1時間足チャートにEAを添付した場合、EAはドル円の1時間足チャートで動作します。 通貨や時間軸を指定すると、添付したチャートの設定とは無関係にEAで指定した通貨・時間軸で動作します。 >>qpさん 一目均衡表の好転・逆転(基準線と転換線のクロス)によるEAでしょうか? おそらくパラメーターの指定が間違えていると思います。 通常、一目均衡表は本来の概念からして、転換線として9日(本)、基準線として26日(本)、先行スパンBとして52日(本)の期間を取ります。 もし、通常の一目均衡表を利用したいのであれば下記のように修正することで上手く動作するようになると思います。 iIchimoku(NULL, 0, 5, 0, 0 ?(略)? -> iIchimoku(NULL, 0, 9, 26, 52 ?(略)? iIchimoku(NULL, 0, 0, 26, 0 ?(略)? -> iIchimoku(NULL, 0, 9, 26, 52 ?(略)? もし、あえて意図的に本来の一目均衡表と違うものを指定しているのであれば、まずはその設定で一目均衡表を表示して確認してみると原因がわかりやすいかと思います。
Posted by qp at 2006-05-03(水) 01:21
返答、ありがとです。 でも・・・解らず、出来ず、頭爆発。。。 一目の基準線と転換線のクロスをSBTさん、チョチョ?イと書いて頂きませんか?図々しいのは承知の上、お願いします。
Posted by タカハシ at 2006-05-03(水) 01:59
ありがとうございます。 添付したチャートの設定が使われるとのことですが、直前に開いていたMeta Traderのチャートが基準になるということでしょうか。 たびたび初歩的なことすみません。
Posted by SBT at 2006-05-03(水) 05:15
>> qpさん ↑の部分だけを変えればいいはずですが、元のMQLソースがどうなってるのかがわからないのでなんとも言えないかもです。 qpさんの作成されたEABの設定ファイル(.eab)かMQLファイル(.mq4)をアップローダーの方にでもアップしてみてください。 その方がご自分でもどの部分が間違えているのかの確認もしやすいかと思いますので…。 http://sufx.core.t3-ism.net... >>タカハシさん 直前というか、そのときに表示しているチャートの設定が使われるんだと思います。 なので、EAを添付しているチャートの時間軸等を途中で変えると、EAが使う時間軸も途中で変わってしまうと思うので注意する必要があるかもです(ちょっと確認不足ですが)。 それと、メール送信機能ですがEABの吐き出すEAに機能として追加しておきました。 デフォルトではメール送信機能はオフになっています。 EAを添付するときのオプションあるいはEAのプロパティ(Inputタブ)で「SignalMail」という項目を「True」にすると、売り・買い・売り決済・買い決済のときにメールを送信するようにしてみました。 通貨ペア名とレートと売り・買い・決済のみの内容ですが、こんな感じでよかったでしょうか?
Posted by たかさん at 2006-05-03(水) 10:10
こんにちは。 http://sufx.core.t3-ism.net...にアップしましたインディケーター(NEW_a_1)を,ecpert advisorに移植することはできますでしょうか?お手数をおかけしてしまいますが,できればプログラムを組んでみて頂きたいのですが。よろしくお願い致します。
Posted by qp at 2006-05-03(水) 15:19
一目、ようやく出来ますた?!! 毎度、質問攻めで申し訳ないのですが、また何点かあります。 ・テストする際、時間軸を長く設定することは可能なのでしょうか。1分足で1ヶ月くらいしか検証できないので ・ストップロスを付けた後、ドテン売買するにはどんなシナリオをEABに反映させればよいのでしょうか。 ・EAB内のorderのところにトレイリングストップがありますが、USEにしていても反応していないのは何故なのでしょうか。 よろしくお願いします。。。
Posted by SBT at 2006-05-03(水) 23:45
>>たかさん ちょっと見てみましたが、EABで下記のようにCustom Indicatorとして設定すれば、これを使ったEAが作成できるかもしれません(未確認ですがおそらく可能です)。 Buy#1: [AND] [Custom Indicator] [<>] [Variable/Number] Left: Name: NEW_a_1 Mode: 0 Right: Value: 0.0 Sell#1: [AND] [Custom Indicator] [<>] [Variable/Number] Left: Name: NEW_a_1 Mode: 1 Right: Value: 0.0 >>qpさん ・通常、ストラテジーテスターではサーバーから読み込めるデータしか使用できません=サーバーから読み込める1分足データは1ヶ月ほどまでということになります。それ以上のデータを使用したい場合には1分足データを自分で用意してヒストリカルセンターにインポートする必要があります。 ・EABではストップロス直後の途転には対応していませんので、何らかの決済ルールは設定する必要があります。 ストップロスを決済ルール(Close(Buy)、Close(Sell))で設定されてるのでしたら、売り決済ルール(Close(Sell))=買いルール(Buy)、買い決済ルール(Close(Buy))=売りルール(Sell)と、それぞれのルールを同じものにすれば可能です。 ・トレイリングストップはその右にあるpipsを越える利益が出て初めてされます。TakeProfitの幅(pips)がトレイリングストップの幅(pips)より小さい場合にはトレイリングストップは行われませんので、その辺りをちょっと確認してみてください。
Posted by タカハシ at 2006-05-04(木) 04:56
ありがとうございます。
売り買いの決済、並びにレートですばらしい機能です。
メール送信機能の項目をコピーしてみましたが、これをture設定にする方法が分かりません。
通貨ペア名の記入場所、方法等よろしくお願いいたします。
この機能が使いこなせれば、長期時間枠で移動平均線にかかりかつ短期時間枠でオシレーター系が反応したときにメールを送信させる等本当に応用が効きそうです。
本当に初歩的な質問だと思うのですが。
よろしくお願いいたします。
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
Posted by SBT at 2006-05-05(金) 08:28
設定はEAをチャートに添付するときに設定ウィンドウが出てくると思うんですが、そこの「Input」タブのVariablesの列から「SignalMail」を探してValueを「True」(ダブルクリックすると選べるようになる)にすれば機能するようになります。
あるいは既にEAをチャートに添付している場合には、チャート上で右クリック→Expert Advisors→Propatiesでも設定ウィンドウが出てきます。
アラートメールの内容を変える場合にはEAのMQLファイルを直接編集してみてください。
前回書きましたが、EAは添付しているチャートの設定で動作するので通貨ペア名等はEAの方で自動的に取得してくれます。
EAのMQLソース内にある4カ所の
SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " ?");
のSymbol()がちょうど通貨ペア名に入れ替わりますので、通貨ペア名を入れたい部分にSymbol()と書いてみてください。
DoubleToStr(Bid, Digits)の部分がBidレートで、この「Bid」を「Ask」にすればAskレートになります。
「"」「"」内の文字は好きな文章に変えることができます。文字列と関数(Symbol(), DoubleToStr()等)は「+」記号でつなぐことによって一つの文字列となります。
例えばメールのタイトルにも通貨ペア名を入れて、Bid-Askのレートを本文に入れたい場合は次のような感じです。
SendMail("[" + Symbol() + " Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits)) + "-" + DoubleToStr(Ask, Digits)));
Posted by タカハシ at 2006-05-05(金) 20:29
本当にありがとうございました。 ためしにMACDオシレーターでメールアラート設定を試してみましたが、シグナルに反応するたびに携帯に送信してくれました。 また質問です、すみません。 仮に買い、売りの局面でメールアラート、買い売り各決済はアラートなし、と言うことにしたい場合、買い売り決済の各Sendmailの相当する箇所を消去すればよろしいのでしょうか。 バグだと思うのですが、ナビゲーター上からfalse→ture設定にしても、再度ナビゲーターから入るとfalse設定のままです。 チャート上から設定確認した場合はfalse→true設定にした場合、その変更した設定のまま有効のようです。
Posted by SBT at 2006-05-05(金) 23:48
>仮に買い、売りの局面でメールアラート、買い売り各決済はアラートなし、と言うことにしたい場合、買い売り決済の各Sendmailの相当する箇所を消去すればよろしいのでしょうか。 まさにそのとおりです。該当する行を削除することによっていらないメール送信を止められます。 設定のほうはバグではなくて仕様ですね。 MQLソースの先頭の方にある、 >extern bool SignalMail = False; の False を True にしてもできますが、この部分を変えておくと毎回設定しなおす手間がないのでこちらのほうがいいかもしれないですね。
Posted by タカハシ at 2006-05-06(土) 01:04
MQLソースの先頭了解しました。 できました。 ご親切にありがとうございました。 またまた質問してしまい恐縮ですが、アドバイサー複数同時起動させることは可能でしょうか。 例えば 15分足でRSIの指定条件にかかったとき(条件?) 4時間足で26指数移動平均線が上昇中に一時的な押し目でその移動平均線に触れたとき(条件?) (条件?)かつ(条件?)両方同時合致したときのみのシグナル設定はエキスパートアドバイサービルダーのAND設定をそのまま使用すればよろしいと思うのですが、(条件?)か(条件?)のいずれかにかかった際それぞれ単発でそれぞれシグナルを発する設定にしたい場合、移動平均線の項目は2つ必要だと思うのですが。 (1つ前の移動平均線<今の移動平均線)AND(移動平均線≧LOW) そんなにシグナルを発してどうするの?と突っ込まれるかもしれないのですが、私は完全なシステムトレーダーではないので、ある条件が指標で合致しても最終的にトレードしない(仕掛けない)ことのほうがほとんどです。 Meta Editor上からは複数のファイルを開けるのですが、最後にコンパイルしたものが適用されるのかが今もって不明な状況です。 エキスパートアドバイサービルダーの各symbolの部分をCurrentのままですと問題ないのですが、通貨を指定した場合、コンパイル時にエラー表示が出てしまいます。
Posted by タカハシ at 2006-05-06(土) 01:31
すみません。 ANDとORの関係分かりました。 お騒がせいたしました。 今、複数の時間枠を同時使用を試みています。 例えば、5分間チャートのEMA200が上昇中の押し目を狙う際、よりシグナルメールを早くするため、条件を ?5分間チャート、一つ前のEMA200≦5分間チャート今のEMA200 ?5分間チャート、今のEMA200≧1分間チャートのLOW
Posted by タカハシ at 2006-05-06(土) 02:27
すみません。 また疑問点が浮かんでまいりました。 トレンドフォローの要領で移動平均線からの反発局面で仕掛ける手法は一般的だと思うのですが。 仮に上昇中の4時間足の26EMA移動平均線に価格が触れるシグナルを仮定しますと。 ?一つ前の4時間足26EMA<今の4時間足26EMA AND?今の4時間足26EMA≧1分足LOW これがベストだと思うのですが問題は1分足はすぐに完成するので問題ありませんが、4時間足のほうです。 Each Tickならば問題ないのでしょうが何度もシグナルが出る可能性もあります。Complete Barモードですと、今の4時間足が完成した直後にシグナルを判定することになるのでしょうか? 一つ前の4時間足を組み合わせる方法である程度解決も可能なのですが。
Posted by SBT at 2006-05-07(日) 22:39
長くなってしまうので前半は箇条書きチックな回答でお許しを。 ・EAを複数起動することは可能です。チャート側の設定を変えてください=複数のチャートにSymbol・TimeframeをCurrentにしたEAをそれぞれ添付する。 ・Symbol指定のコンパイルエラーはバグでした。ごめんなさい、直しておきました。 ・AND、ORについてはその通りです。ただし、足し算・掛け算のようにORよりもANDの方が優先順位が高いので、複雑なことをする場合にはMQLソース中の式を適宣、()で括るようにした方がよいと思います。 最後のですが、Complete Barモードだと確かに4時間足と1分足の両方が完成した後にシグナルが出ることになります。 4時間足・1分足の完成をまたずにシグナルを出したい、ただしシグナルは4時間足1本につき1回だけ出したい、ということでよいのでしょうか? それであれば、次のようなEAをEach Tickモードで作成して、それを「4時間足のチャートに添付」するとうまくいくような気がします。 #1 AND MA < MA [Left] Timeframe: Current Period: 26 Shift: 1 [Right] Timeframe: Current Period: 26 Shift: 0 #2 AND MA => Close [Left] Timeframe: Current Period: 26 Shift: 0 [Right] Timeframe: Current Shift: 0 もし、4時間足の完成は待たずに1分足のみ完成を確認してからシグナルを出したい、というのであれば少々やっかいですが、Lowを使っているところを見るとこれで問題ないように思います。 1分足でも4hでも現在のレート=Close(Shift: 0)は同じですので、あえて1分足を使う必要はないように思います。 ちなみに、EABのEAは、EAを添付したチャートの時間軸のバー1本に対して1回のみ売買を行うようになっています。
Posted by タカハシ at 2006-05-07(日) 23:45
大変ご丁寧な回答ありがとうございます。 前の書き込みからすると、複数通貨のペアでそれぞれ同時にポジションを取れるとの事で対応との事で明日からまたテストが楽しみです。 Symbol指定のコンパイルエラーのバグ、了解いたしました。 ひとつご確認いただきたいのですが。 移動平均EMA100用に簡単なアラート用ルールを作成したのですが。 ストラテジーテスターでテスト成功です。 その後、簡単にルールを変えてみようとeabファイルをLOADしてEABにて再度EAを吐き出しましたところ、うまく作動しませんでした。 ストラテジー検証後にチャートを開いたところ、関係チャートも表示されない有様です。 以前のEAと微妙に異なっているようです。 エラーが出てしまったEA用のeabファイルをアップしておきます。 RSIでも吐き出してみましたが、やはりエラーが出ましたので、EABを直されました際不具合が発生したのかもしれません。 検証中の動作が正常に吐き出されたEAより重い感じです。 ルール設計は簡単で、買い、売りのシグナル出現後、次のチャートで強制決済されるルールにしております。
Posted by タカハシ at 2006-05-08(月) 00:01
すみません。 EAファイルの吐き出しではなくmqファイルの吐き出しの間違いでした。 あと、チャートは出るのですが、ストラテジーに関係するテクニカル指標が表示されなくなっているようです。
Posted by SBT at 2006-05-08(月) 00:36
確認したところ、先ほど直したつもりが凡ミスがあったようです。ごめんなさい m__m 先ほどのコメントからここまでの間に作成したEAを使用するには一部修正する必要があります。 MQLソース内のコメントの「Variable Begin」から「Variable End」の間にある全ての「"NULL"」を 「NULL」に直してしてみてください。 これで正常に動くようになると思います。 タカハシさんがアップされたファイルについては、こちらで修正済みのものをアップロードしておきました。 早急なバグ報告助かりました。
Posted by タカハシ at 2006-05-08(月) 01:33
ありがとうございました。 EMA100とRSIのコンビのルールを作成したのですが。(完全なコンビではなく、EMA100かRSIのそれぞれ単独シグナルのつもりです。) どうもRSIをルールに加えましたところ、シグナルが出なくなってしまいました。 ANDとORの設定は間違っていないと思うのですが。 ルールですが、EMA100にタッチ、あるいはRSIの指定ラインに突入のどちらかがヒットすればシグナルが出る設定です。
Posted by タカハシ at 2006-05-08(月) 01:34
eabファイルをアップしておきました。 このルールでAND OR設定はそれぞれ単独シグナルを得るには問題ないと思うのですが。
Posted by SBT at 2006-05-08(月) 23:54
ANDとORは合っているみたいなのですが、計算式の評価順序の関係でシグナルが出ていないようです。 一部修正したものアップしておきました。 イグジットのルールセットのようにルールが少ない場合はいいのですが、エントリーのルールセットのようにANDとORが混在する場合にはEAB側では作成者の意図するルールの優先順位を理解しようがないので、やはり直接MQLを編集したほうが良いようです。 シグナルを出す部分はMQL内に「Signal Begin」?「Signal End」という形でコメントを入れています。 複雑なルールセットになる場合には、()で括って優先順位を明示した方がよいかと思います。 (Buy1_1がBuy #1の左辺、Buy1_2がBuy #1の右辺、Buy2_1がBuy #2の左辺、Buy2_2がBuy #1の右辺、以下同様。&&がAND、||がORに対応します。) それとHigh、LowはEAの実行時にはまだいいんですが、テスターでテストするときには精度が落ちますのでその辺りもご注意を・・・。 (ティックデータがない期間においてはHigh、Lowどちらを先につけたかがわかり得ないため。) この記事のコメントもだいぶ長くなってきたので、どっか別の場所に移したほうがいいですかね…。 なるべく一回にまとめてコメントいただけると助かります。
Posted by たかさん at 2006-05-10(水) 09:06
5月3日にコメントをしたたかさんです。Custom Indicatorに移植はできたのですが,expert advisor の完全自動売買に移植する手立てはありますでしょうか。小生プログラムの知識が全くないので(*_*)できれば,ファイルをアップして頂ければ幸いなのですが…わがままなお願いすみません。よろしくお願い致します。
Posted by SBT at 2006-05-11(木) 00:59
先ほどNEW_a_1.mq4の中身を見させてもらいましたがMAのGCとDCによるもののようですね。 個人的には、(シグナル配信等を含め)システムトレーディングの類のものに関しては他人の作成されたものを使用することはおすすめしません。 事実、このインジケーターにはよくありがちな大きなミスがあるようです。 その時点で知り得ない【未来のデータを使ってシグナルを表示】しています。 過去のデータにおいてはそれより未来のレートを知ることができますが(現在から見ればどちらも過去のデータなので)、当然ながら現在より未来のレートについてはそれを知ることはできませんので…。 なので、このインジケーター自体が全く使えないものです。 一応、EABに対応できるように一部修正したものをアップローダーに上げておきました。 後は 2006.05.03(水) 23:45 の返信のようにEABで入力すれば検証用のEAが作成できます。 ただし、先ほども書きましたが、過去のデータを検証する目的以外には全く使えないものですのでご注意を。
Posted by タカハシ at 2006-05-11(木) 14:20
ようやくC言語の記号に関してさしさわりが理解できました。 EABが吐き出した言語ファイルの中身をあれこれいじくってシグナルメールを出すのを楽しんでいます。 指標そのものの信憑性ですが、以前のAlert FXとは段違いに信憑性は高いことは間違いありません。 Alert FXの指標に関してはデーターソースそのものか計算そのものが根本的に間違っているのではないかと思えるくらいいい加減でした。
Posted by SBT at 2006-05-12(金) 20:56
タカハシさん、少しでも意味がわかってくるとちょっとした修正がぐっと楽になりますね。 EABが吐き出すMQLソースは貧相なもの(の割にはごちゃごちゃしてますが^^;)ですが定型なので、MQLソースと見比べていくことによって、ちょっとしたものであればご自分でもできるようになると思います^^
Posted by タカハシ at 2006-05-16(火) 18:20
タカハシです。 すみません、また質問ですが。 買い、売りの局面ではイーチティックモードを使用し、買い決済、売り決済の局面ではイーチティックモードを外す手段をお願いいたします。 買い売りそれぞれ決済の命令欄の一部を削除し、イーチティックモードをオンにしておけばこんなことも可能かと思うのですが。
Posted by SBT at 2006-05-17(水) 12:10
タカハシさん、こんにちは。 「Each Tick」モードを使用して、各「Shift」パラメーターを変えることによって同様のことが可能になると思います。 MAのGCで買い(リアルタイム)、DCで決済する(バーの確定後)場合の例で書いてみますね(Shiftパラメータのみ書きます)。 Buy #1 AND MA(短期) < MA(長期) [Left] Shift: 1 (1本前) [Right] Shift: 1 (1本前) Buy #2 AND MA(短期) > MA(長期) [Left] Shift: 0 (現在) [Right] Shift: 0 (現在) Close(Buy) #1 AND MA(短期) > MA(長期) [Left] Shift: 2 (2本前) [Right] Shift: 2 (2本前) Close(Buy) #2 AND MA(短期) < MA(長期) [Left] Shift: 1 (1本前) [Right] Shift: 1 (1本前) この場合の例だと、買いは1本前のバー(Shift: 1)と現在のバー(Shift: 0)を使って判定し、決済は2本前のバー(Shift: 2)と1本前のバー(Shift: 1)を使って判定しています。 Shiftパラメーターは「0」が現在のバーのデータを表すので、現在より前のバーを使って判定するようにすることによって、「Cmplete Bar」と同様、つまりバー確定後のデータを使って判定ができるという寸法です。
Posted by タカハシ at 2006-05-17(水) 22:13
早々のご回答ありがとうございます。 シグナルメールですが、実際のところ、仕掛け時において即戦力として機能しております。 為替に限らず株、先物等の取引において最大の敵はルール違反の衝動売買だと思うのですが、このシグナルメール機能があるだけでもその衝動を相当に抑えることができます。 思わぬ副次的効果です。 シグナルがこない状況下では少なくとも仕掛けは絶対しないということで。 Each Tickモードの場合、難しいところは一旦指標がシグナル条件にヒットしてもバー完成時に不成立の場合です。 私はRSIやストキャスティクス、移動平均といったものを複数組み合わせるのですが。 RSIシグナルでやった場合、70以上に売り、70以下になった場合売り決済というような単純なシグナルにしてしまった場合、価格がその付近で抵抗や支持に直面した場合、レートが変わるごとに売り、売り決済が二転三転し、買い注文が同バーで頻発するとという具合にメールが連続して届く状況になります。 決済を甘めにする等もう一工夫してみます。 Meta Trader そのものは非常に軽く、現在9つをMeta Trader 2,3,4,5,signal等個別に名前を買え、それぞれ別々のソフトとして起動しております。 指標突入後のシグナルメール用のMeta Trader、実際にチャートを見て判断する判断用Meta Trader という具合です。 取引ブローカーはOANDAですが、OANDAのチャートと比較して視覚的に優れている感じです。 これほど一つのパソコンにMeta Trader をインストールして活用しているのはあまり聞かないと思います。 変な意味ですが、一つのパソコンの同時起動という事では世界一かもしれません。
Posted by タカハシ at 2006-05-18(木) 13:34
現在Meta Trader のサーバーがダウンしているようですが。 こういったことは頻繁に起こるのでしょうか。
Posted by SBT at 2006-05-18(木) 18:22
そうですね、自分でもシグナルを出すようにしてみると思ったよりいい感じです。 他のことをしながらでも知らせてくれるので、裁量重視でシストレチックなことをしてみるのも悪くないかな、と思ってきたところです。 Each Tickでのメールの件ですが、たしかにそうかもしれませんね。自分でシグナル出してみたときに気付きました--; 1つのバーにつき一回だけ(あるいはシグナルの種類が変わるごとにメール)出すようにしてもいいんですが、シグナルそのものが変わるような場合にはどのみち連続してメールすることになってしまうと思うのでなかなか難しいところです。 MTの複数起動ですか、なるほど、名前を変えても特に問題ないのですね。分けて使いたい人には参考になる情報ですね。ありがとうございます。 サーバーダウンはたまにあるようなので、複数のブローカーのアカウントを分けて使ってます(なぜかチャートがおかしくなる場合もあります)。 複数インストールされてるのでしたら、MT4を採用している他のブローカーのものを入れてみてもよいかもしれませんね。
Posted by たかさん at 2006-05-19(金) 15:10
インディケーターNEW_a_1_1ありがとうございます。(お返事が遅くなってしまいすみません)ところで,これを完全自動売買?のexpert adviserに移植することはできますでしょうか?小生相変わらずプログラミングは無知の知でありますので,無理であれば結構なのですが。もし,可能であればプログラミングしていただけますでしょうか?よろしくお願いいたします。
Posted by SBT at 2006-05-19(金) 16:26
完全自動売買というのがどの程度のもののことなのかがちょっとわからないのですが、以前のものでは「未来のデータ」を使おうとしているので、どうやってもEAは作ることはできません。 (未来のレートがわかるなら知りたいですが^^;) とりあえず、未来のデータを使わないインジケータに修正してアップローダーに上げておきましたのでこっちを使ってみてください。 http://sufx.core.t3-ism.net... あとはEA Builderで記載の様に設定されれば売買を行うEAができあがります。 が、プログラムを含めシステムトレードについての理解なしに自動売買を行うことはかなり危険なので検証目的のみでの使用をおすすめします。 (EA Builderの吐き出すEAも自動売買には不完全だと思いますし。)
Posted by たかさん at 2006-05-21(日) 04:58
ありがとうございました。早速試してみたと思います。
Posted by マサヤ at 2006-05-23(火) 00:00
metatrader4をこれから使ってみたいと思っている初心者です。SBTさんの大変親切な解説で初心者の自分には大変助かりました。初めてコメントしますマサヤと申します、今後ともよろしくお願いします。 いきなりですが、わからないところがあるのでひとつ質問させてください。advisorで 古いデータは日足のデータで計算して、最近のデータは時間足とか分足で計算するのかなぁ?となんとなく思っているのですが、S/Lを?10銭でT/Pを+10銭で設定した場合、特に古いデータだと、日足なので高値と安値のどちらもヒットするとおもうのですが、どちらが優先されて決済されるのでしょうか?(結果を見ると、きついストップを入れる方が結果がよいので、実際よりストップがいい様に処理(決済)されている気がするのですが・・)
Posted by SBT at 2006-05-23(火) 07:59
マサヤさん、はじめまして、よろしくお願いします。 テスターでの検証ですが、シミュレート方法を「Model」という項目で指定できます。 「Every tick」が一定の条件に基づく全ティック相当数のデータでの検証、「Control points」が一定の条件に基付く(バー内の)12カ所のデータのみでの検証、「Open prices」が始値=バーが完成した時点のみでの検証となります。 ここで「Every tick」を選択しても、実際に使われるのは1分足で、古い期間についてはそれよりも長いタイムフレームのデータが使われることになります。 それらのデータを元に、実際のティックデータに近くなるようにシミュレートする形で検証が行われているようです。 それで、高値・安値なのですが、これもどちらが先にヒットするかというのは、MTのテスター次第ということになるのだと思います。 まったくのランダムではなく、ある程度の条件に基づいてティックデータをシミュレートしているようですが、どちらが優先されるかはそのときにそのときで違うのではないかと思います。 つまり、テスターではどうやっても完全な検証はできないということになるのですが、新規売買・決済全てを終値の確定時(Complete Bar)でのみに行うようにすれば、ティックデータをシミュレートする必要がなくなるため、それなりにまともな検証はできるようになるのではないかと思います。
Posted by マサヤ at 2006-05-23(火) 23:06
早速のコメントを頂き、ありがとうございます。実は、先日Expert Advisor Builder で初めて作った9日45日の移動平均線のクロスでの買売と、トレイリングストップを50銭にして、USDJPYで動かしたところ、古いデータのところでは右上がりの結果がでるのですが、半分を過ぎたところから傾向が変わり、右下がりになっていく結果になり、疑問に思っていました(日足の計算区間だといい結果になるのに、時間足などの細かい期間だと悪い結果になりました)。今、結果をよく見てみたら、日足で計算してる前半のところは、トレイリングストップを引き上げるのが1日毎でmodifyされるのに、後半は時間足などのもっと細かい間隔毎にmodifyされていました。違いはトレイリングストップを引き上げる頻度なのかなぁと思いました。(でも、その頻度が異なるだけで、ぜんぜん結果は変わるということなのかなぁと思って、ちょっと不思議ですが。。。)
Posted by SBT at 2006-05-24(水) 08:10
マサヤさん、こんにちは。 トレイリングストップも、実際にはティックの動きに応じて変化するので、ティックデータのない昔の期間でテストした場合には、適当(?)なところに引き上げられてしまいます。 昔の期間のデータでは、シミュレーションの精度が低くなる、ということになりますが、トレイリングストップ次第でも結果はかなり変わってくるんじゃないかな、と思います。 たしか、自分でForexite等から1分足のデータを持ってきてヒストリカルセンターで読み込ませれば、自分で用意した期間のデータについても通常よりは詳細な検証になったかと思います(うろ覚え)。 それでも、完全にはシミュレートできないので、なるべく実際に近い検証結果にするには、トレイリングストップを使わずに新規売買・決済を引け(寄り)のみで行うようにすれば、多少ましにはなると思います。 日足ベースなら、もしかしたらExcel等で遣った方が簡単で確実かもしれませんね^^; Excelを用いた売買検証法 http://www.panrolling.com/e...
Posted by マサヤ at 2006-05-24(水) 20:21
SBTさん、コメントありがとうございます。上のExcelのやり方でさっそく試してみます。前のメールのAdvisorの結果を良く見てみると、日足区間の古いデータでは、その日の安値がかかっていればstopが実行されているようなので、stopの実行は全tickを見ている形で、トレイリングでのstopの引き上げは1日毎のようです。その方法だと右肩上がりで、ストップの引き上げを1時間毎にすると右下がりという結果は、おそらく、後者は50銭が1日のボラティリティ内であり、すぐに引っかかり、損を確定し積み重ねていく動きとなり、前者はその日の始値でエントリーして安値が50銭以上安くなければ、次の日までもちこして、ストップを引き上げるか据え置きとし、利益を確保するように動いているからではないかと思っています。同じ仕掛けなのに結果が手仕舞いのわずかな違い(トレイリングストップの引き上げる頻度だけ)でまったく変わるのは、まさに魔術師たちの心理学の仕掛けよりも手仕舞いが大事ということなのかなぁ・・と独りで早合点しています・・・
Posted by SBT at 2006-05-26(金) 11:31
マサヤさん、詳細なレポートありがとうございます。 テスターの詳細な動作については自分も完全には理解できていないのですが、なんだかところどころ怪しいところがあるなあ、とは漠然と感じています。 ティックデータでの再現ができないので、この辺りは仕方ないのでしょうね。 完全に日足ベースであれば、EXCELの方が自分で詳細を確認しやすいのでよさそうかな、と思います。 また、おもしろい結果が出たらおしえてください^^
Posted by chozen at 2006-05-28(日) 23:19
はじめましてchozenと申します。 貴重なツールを使わせていただいて感謝しております。 よくわからないところがあるので、確認させてください。 shiftを"1"、シグナルモードを"complete bar"で、モデルを"Open price only"とすれば、現実と差がなくなると考えていいのでしょうか? "Every tick"とは結果が異なるのですが、それは「テスターの勝手な解釈を許したから」と認識していいのでしょうか?
Posted by SBT at 2006-05-29(月) 00:22
chozenさん、初めまして。 コメントありがとうございます。 およそその通りです。 ただ、Complete Barモードの場合には、内部的にShiftの値に+1しているので0で構いません。 Every Tickモードの場合はShift=0だと現在のレートになりますが、Complete BarモードではShift=0で1つ前のバー(=確定済みのバー)となります。 StopLossやTakeProfit、TrailingStopを使用しないのであれば現実に近くはなると思います(全てティックベースで判断されるため、使用するとおそらくテスターに勝手に解釈されます)。 それでもMT4のテスターは怪しい部分が多いので、目視確認や他の検証方法でテストしたほうがいいとは思います。
Posted by chozen at 2006-05-29(月) 23:41
SBTさん、ありがとうございます。 StopLossはやっぱり入れることにします。障害が発生すると怖いですから。現実の再現はできなくても、堅牢なシステムを目指すなら"Open price only"と"Every tick"で差が出てはいけない気がしてきました。 1分足のデータは手に入ったのですが、これを活用できるのは1分足でのテストだけですよね? MT4が自動的に15分速に解釈してくれるようなことはないですから。バックテストって、思ったより面倒くさいですね。
Posted by SBT at 2006-05-30(火) 17:17
通常、1分足がないところは、今あるデータの中から一番短いタイムフレームが使われますので、今まで1分足のデータがなかった部分などではテスターの精度も多少はあがると思います。 別の足への変換はデータをインポートした後、Scriptsの中にあるPeriod_converterというスクリプトで変換できるみたいですよ。 (参考リンク: http://www.forex-tsd.com/se...) 検証って、本当に面倒くさいものですね。
Posted by chozen at 2006-05-31(水) 00:17
いいですね、Period_converter! これを使えば1分足だけ手に入れれば、すべての足でテストできますね。 どの足でも同じように動くシステムを目指そうと思います。 ありがとうございました。
Posted by うんすぃ at 2006-06-09(金) 04:06
はじめまして。うんすぃと言います。プログラミングができないのでこのツールを使わせていただき、ありがとうございます。 質問なのですが、最近ストップロスが行われても引き続き買いシグナルが出てしまい、買ってしまうことに悩んでいます。フィルターをかけるのにも限度があるので、ストップロス注文が行われた後、4時間(例えば)全ての注文をストップするといったプログラムにしたいのですが、なかなかうまくいきません・・・。 どの変にどういったプログラムを書けば良いでしょうか??よろしくおねがいします。
Posted by SBT at 2006-06-10(土) 17:34
うんすぃさん、はじめまして。 ストップロス後に継続してシグナルが出るということですが、ストップロス注文に引っかかったかどうかのチェックは行っていない(新規注文時にセットで出しています)ので、それをチェックしようとするとそこそこ多くの部分を書き換える必要が出てきてしまいます。 継続して出るということは、元々シグナルが出やすいロジックなのでしょうか? もしかしたら、エントリーのロジックに何らかのミスがある可能性もある様な気もするので、一度、ミスがないかどうか確認されてみてはいかがでしょうか? どういったものなのかがわからないので何とも言えませんが、大体の場合はロジックの調整でなんとかなると思いますよ。
Posted by うんすぃ at 2006-06-10(土) 23:28
返信ありがとうございます。 シグナルはかなり出るほうで、だましが頻発します。ある程度トレンドフォローをロジックにより入れて多少減りましたが、限界があり大きなトレンドに対応できないといったところです。そこで、そのトレンドが終わるまで損切幅を大きくさせて、損切した時間から、その大きなトレンドが終わるまでトレードをしないとう目的でトレードをしない時間を設定しようと考えました。 もうすこしロジック調整で考えてみようと思います。
Posted by SBT at 2006-06-11(日) 01:53
改装中につき、大変見苦しい状態で申し訳ないです。 元々、シグナルの出やすいものだったのですね。 裁量で(自分の目で)フィルターをかけてみてはいかがでしょうか? メール等を送信してるのでしたらそうもいかないかもしれませんが、完全に機械的なトレードだと(このあいだのコメントでも出ましたが)なかなか問題が多いようなので、それも一つの手かな、と思います。 私もシグナルを出すインディケーターを使用して、裁量で実際のトレードを行っています。
Posted by うんすぃ at 2006-06-11(日) 02:30
前のHPはリロードっぽいことが起きたので改善されてよかったです。 フィルターは多少かけてるのですが、取引回数が減るのがあまり好きではなかったのであまり重視してませんでした。 できるだけ取引回数を減らさず試行錯誤でフィルターをかてみます。最近この作業が楽しいです。。。 そういえば、過去1年の15分足によるバックテストを行ってるのですが、テスト終了まで1時間程度時間がかかるのですが、こんなものでしょうか?
Posted by SBT at 2006-06-11(日) 19:38
前のデザインのリロードは外部サイトのJavaScriptが問題だったようです(汗) 15分足で1時間ですか、PCの性能と使用しているインディケーター等にもよると思いますが、かかるものはそのくらいはかかってしまうのかもしれませんね。 たまに動作がおかしくなることがあるので、MTのテスター周りはなんだかまだバグが色々ありそうな気がしています…。
Posted by コニタン at 2006-08-12(土) 14:17
いつも参考にさせております。m(__)m 上記URLにCIDP_Tan.mq4(zip)という、カスタム・インディケータがあるのですが、Expert Advisor Builderでコンパイルする事が出来ず悩んでおります。 エラーが出るのは、iCustomのコマンド部分です。 プロパティをいろいろ変えたりSetIndexBufferの番号も変えたり・・・ このインディケータの場合のExpert Advisor Builder設定を教えて頂ければ幸いです。 何卒、宜しくお願い申し上げます。m(__)m
Posted by コニタン at 2006-08-12(土) 18:48
自己解決しました。 変な方向に考えていたみたいで、わかると簡単にできました。(*^^)v これだけの事が出来るなんて! SBT様の今後の更なるご活躍に期待しております。m(__)m バックテストの期間が短いのですが、長い期間のバックテスト方法がわかりません・・・
Posted by SBT at 2006-08-12(土) 19:44
コニタンさん、はじめまして。 自己解決されたのですね、応援ありがとうございます。 バックテストの期間はブローカーの持つヒストリカルデータに依存するので、短い足だとどうしても期間は短くなってしまうと思います。うちだと、30分足で1年分前後になってます。 ただ、データがあるのにバックテストでは表示されないときとかがあって、未だに原因がよくわからないんですけどね…。
Posted by コニタン at 2006-08-12(土) 19:59
お世話になります。 私も30分ですが、1週間分しかありません。 ブローカーによって違うのですか・・・。 もし支障が無いようでしたら教えてください。 追伸 誠に勝手ながら、リンクを張らせて頂きました。m(__)m
Posted by SBT at 2006-08-12(土) 20:35
リンク、ありがとうございます。すみません、まだちゃんと拝見してないのですが、あとでじっくりと読ませていただきますね。 データですが、「Tools」->「Options」->「Charts」の下2つ、「Max bars」の数値を最大にして再起動するとどうでしょう?少なくしているとバックテストでも読み込まれないみたいです。テストするときに、「Reculculate」にチェックを入れると強制的にデータを再読込するようです。 でも、実際のデータより少ないデータしか使われていない気がします。テスターの「Model」によっても変わってくる模様ですが、この辺りは謎です…。 ちなみに、ブローカーはAlpariのデモを使用させていただいています。「Tools」->「Options」->「Servers」の「Servers」にAlpariのデモサーバーのIPアドレス、「217.74.44.32」を入力すると、デモアカウントの申請時にAlpariのサーバーを選択できるようになります。
Posted by コニタン at 2006-08-12(土) 22:15
貴重な情報をありがとうございます。 いろんなデモで口座で確認してみます。 (AlpariはNZD・JPYがありませんでした) 心からお礼申し上げます。m(__)m また、来ますね。
Posted by pmx-005 at 2006-10-24(火) 13:51
はじめまして SBT様。 いつもお世話になっております。 さて、今日は質問があるのですが、よろしいでしょうか? EABで作成したプログラムで、StopLoss, TakeProfit, TrailingStopで決済が行われたあと、同じバー内で、すぐに買い、売りのシグナルを出すことは可能でしょうか? もし、よろしければ御教授ください。 よろしくお願いします。
Posted by SBT at 2006-10-25(水) 01:14
pmx-005さん、はじめまして。 バー内でのシグナルは、標準状態では発生しないようになっています。シグナルの発生時は、シグナルが継続して発生しうる状況になる場合がほとんどなので、必要以上のシグナルが発生するのを抑えるためです。 SignalModeをEach Tickにして作成した後、 MQLファイル内の全ての「&& (Bars != BarCount)」を削除してください(if?の行)。おそらく、これで上手くいくと思います。
Posted by タカハシ at 2006-10-25(水) 01:16
こんにちわ。 いつもお世話になっております。 今回MLEのことでお伺いいたしたいのですが。 条件で Current + 0 とすると現在の値になります。 Current +1で1つ前の値を適用ですが。 これを例えば現在の値から過去7つまですべて拾うように設定するにはどのような条件にすればよろしいのでしょうか? Current +0からCurrent +6まで6個つくって条件式を作るという手もあるのですが。 簡単にひとつの項目でくくることができないものかと思いました。 例えばチャネルブレイクアウト設定で過去20のチャートバーの高値、安値のどちらかを超えたときという具合で設定したいときなどに便利そうです。 Current +0からCurrent +19まで19個も条件設定するのはかなりの手間ですし、もしひとつですむのならそれにこしたことはないです。
Posted by pmx-005 at 2006-10-25(水) 08:09
ご回答ありがとうございます! 早速、試してみたいと思います。 いつも、貴重な情報を本当にありがとうございます。
Posted by SBT at 2006-10-26(木) 23:47
>>タカハシさん こんばんは。 目的によって方法は異なるとは思いますが、n本間の高値・安値等であれば、Highest関数やLowest関数を利用すれば簡単ですよ。 下記の例の様に、ある時点のバーを基準として、ある本数間の間の最大値・最小値を持つバーを求めることができます。 ・i本前のバーからn本間の最高値を求める High[Highest(NULL, 0, MODE_HIGH, n, i)] 例(現在から過去20本間の最高値) High[Highest(NULL, 0, MODE_HIGH, 20, 0)] ・i本前のバーからn本間の最安値を求める Low[Lowest(NULL, 0, MODE_Low, n, i)] 例(1本前から過去20本間の最安値) High[Highest(NULL, 0, MODE_HIGH, 20, 1)]
Posted by タカハシ at 2006-10-28(土) 00:29
ご返信ありがとうございます。 この関数を使用すれば他の指標(RSI等もかなりの条件詰めが可能ということになるのでしょうか? 例えば下記の条件では double Buy1_1 =iRSI[Highest(NULL, 0, 12, 26, 9, MODE_HIGH, 7, 0)]; Buy_1の項目、現在のRSIから過去7本のRSIまでの最高値。 という具合でしょうか? 数字の組み合わせ次第では、指標の乖離設定に役立てそうです。
Posted by タカハシ at 2006-10-28(土) 00:33
すみません。 RSIの関数ですが、MACDの一部と数字を間違えました。 正しくは。 double Buy1_1 = iRSI([HighestNULL, 0, 14, MODE_HIGH, 7, 0)]; Buy_1の項目=14日間RSIの、現在のRSIから過去7本のRSIまでの最高値。 です。
Posted by タカハシ at 2006-10-28(土) 00:40
すみません。 また間違えました。 チャートバー適用価格をクローズ価格とした際のRSIを使用した際の、14日間RSI、現在のRSIから過去7本のRSIまでの最高値。 double Buy1_1 = iRSI[Highest(NULL, 0, 14, PRICE_CLOSE, , 7, 0)];
Posted by SBT at 2006-10-28(土) 20:41
タカハシさん、こんばんは。 Highest、Lowest関数の対象とできるのは「始値」、「高値」、「安値」、「終値」、「出来高」、「日時」です。なので、あるインディケータの最高値・最安値を求めるのには使えません。 インディケータの値等の最高値・最安値を求めるには、ArrayMaximum関数、ArrayMinimum関数が使えますが、事前にインディケータの値を配列に入れておく必要があります。 EABの場合はそのような仕組みになっていないので、やはり一つ一つ書いていくのがわかりやすいと思います。
Posted by タカハシ at 2006-10-28(土) 22:55
ご返信ありがとうございます。 どうもC言語を知らないせいか、言語を知っている人にとってはトンチンカンな方向に1人で持っていってしまったようです。 もしよろしければ、ご教授いただきたいのですが。 MACDヒストグラム、RSI、ストキャスティクスの過去N本までの最高値、最低値のサンプル式をいただきたいのですが。 無理言ってすみません。
Posted by SBT at 2006-10-30(月) 21:43
インディケーターの最高値・最低値を効率よく求めるためには、式だけではなく他の部分も書き直す必要があります。 ですので、多少、面倒ではあっても一個、一個書いていくのが簡単でわかりやすいかと思います。 最高値・最安値はMathMax・MathMin関数でも求められます。次のような感じにすれば、一個、一個書いても、少しだけ楽にRSIの最大値を求めることができます。 // 1.RSI値の取得 double RSI_1 = iRSI(?省略?, current + 0); double RSI_2 = iRSI(?省略?, current + 1); double RSI_3 = iRSI(?省略?, current + 2); double RSI_4 = iRSI(?省略?, current + 3); double RSI_5 = iRSI(?省略?, current + 4); double RSI_6 = iRSI(?省略?, current + 5); (以下、同様) // 2.RSIの最大値を求める(最終的なRSI_maxの値がRSIの最大値) double RSI_max; RSI_max = MathMax(RSI_1, RSI_2); RSI_max = MathMax(RSI_max, RSI_3); RSI_max = MathMax(RSI_max, RSI_4); RSI_max = MathMax(RSI_max, RSI_5); RSI_max = MathMax(RSI_max, RSI_6); 2.の式は1行で次のようにも書くことができます。 double RSI_max = MathMax(MathMax(MathMax(MathMax(MathMax(RSI_1, RSI_2), RSI_3), RSI_4), RSI_5), RSI_6); わかりにくくなるので、1行で書くのはおすすめはしませんけれど…。
Posted by タカハシ at 2006-10-31(火) 17:58
詳細にありがとうございました。 早速ですが、単純な価格とRSIの乖離指標を製作してみました。 とりあえず売りのみに反応する具合です。 最初のRSIが70を超えてから下降し、再度価格が更新しながらもRSIが最初の高値を更新しない場合にヒットするようにしてみました。 Variable BeginのHighの部分が赤文字で出るのが気になるのですが。 これでOKでしょうか? RSIと指標の乖離としてアップしておきます。 他の部分は記号で置き換えておりますが問題ないと思います。 すみません。
Posted by SBT at 2006-10-31(火) 22:04
こんばんは、アップロード、ありがとうございます。 意図した条件になっているみたいですね。 Highが赤色になるのは、このHighが高値を意味する予約語(配列)だからで、特に問題はありません。 MQL内で特別な役割を持つ関数や変数は色付きで区別されて、コードを書くときにわかりやすいように表示してくれるようになっています。
Posted by へらこぴ at 2006-11-02(木) 23:20
以前、メール設定を教えていただきありがとうございました。
MQLの勉強がてらEABプログラムを解読中なんですが、どうしてもわからないことが三つあります。
ひとつはmagicnumberです。この意味がどうもしっくりきません。
もうひとつがBarsの扱いです。int init { BarCount=Bars?と定義しておいて、後でBars!=BarCountと出てきますよね。いまいちこのあたりが理解できません。
最後はbool関数で定義されているTickCheckです。これはBarsがわかれば理解できそうなんですが・・・
プログラミングはほんとに簡単なVBAしか出来ないんで、いま必死に勉強中なんです。的はずれなこと質問しているかもしれませんが、教えてください。
お忙しいと思いますので、暇なときでかまいません。お願いします。
Posted by SBT at 2006-11-04(土) 09:55
へらこぴさん、こんにちは。 MagicNumberですが、これは複数のExpertAdvisor(=システム。以下、EA)を動かす場合やEAによるトレードと手動によるトレードが混在する場合に、EA自身とそのEAによるトレードを区別するために使われるもので、いわばEAのID番号のようなものです。 注文状況(あるいは、過去のトレード等)を調べたい場合には、このMagicNumberを頼りにどの注文・トレードがどのEAによるものかを調べることができます(OrderSelect関数、OrderMagicNumber関数等)。 EAを単体で動かす場合には気にしなくてよいので、適当な数字を入れておけば問題ないと思います。 BarsCountとTickCheckは、主にバー内での重複トレードの回避用の変数です。 EAのstart関数は、プライスが更新されるたびに実行されます。これらの変数にバーの本数を記録しておくことによって、バー内での重複トレードと決済直後の再エントリーを回避するようになっています。「Bars != BarCount」は、バーの本数(Bars)が前回に記録したバーの本数(BarsCount)と変わっているかどうかをチェックしています。 EABの吐き出すソースは、試行錯誤しながら作っていた部分があるので、今となってはかなり無駄な処理をしている部分も含まれています。また、汎用性を重視しているのでソースも煩雑です。 MT4付属のMACD Sample.mq4等から見ていくとわかりやすいと思いますよ。
Posted by へらこぴ at 2006-11-04(土) 16:24
ありがとうございます。理解できました。 FX暦3年でまだまだ試したいアイデアがあるので、プログラミングもがんばって勉強していきます。またMQLでわからないことあれば、質問させてください。
Posted by たか at 2006-11-10(金) 02:39
はじめまして。 とても有益なサイトをありがとうございます(^^) まさに救世主でした。。 今、一目均衡表の2本の先行スパンの クロスでシグナルを出したいと思っているのですが、 どのようにすればよいでしょうか。。。。 基準線と転換線のクロスは上に書いていましたので参考にさせていただいたのですが、、、 お手すきのときで結構ですので アドバイスいただけないでしょうか? よろしくお願いいたしますm(__)m
Posted by naoty at 2006-11-11(土) 16:17
SBT様 こんにちは。書き込みは2度目になります。 とても有用なツールをご提供頂き大変感謝しております。 ひとつ教えて頂きたいのですが、 LSMA in Colorを使ったものをExpert Advisor Builder にて作成しました。 double Buy1_2 = iCustom(NULL, 0, "LSMA in Color", 34, 1500, 0, Current + 1); などのように、コードはきちんと生成しますが、 EAでは、数値をはいてないようです。終了してもチャートには描画もしません。 Custum Indicaterとしては機能していて、チャートに描画します。 なにかお気づきなることはございますでしょうか? お手すきの際にご教示頂けるとありがたいです。 よろしくお願い致します。
Posted by SBT at 2006-11-13(月) 21:35
>>たかさん はじめまして。 先行スパンのクロスですが、基本的には基準線・転換線の方法とほぼ同じになります。 基準線・転換線のクロスのMQLで「MODE_KIJUNSEN 」(基準線)、「MODE_TENKANSEN 」(転換線)となっている部分を「MODE_SENKOUSPANA」へと変えると先行スパンのクロスになります。 パラメータは、チャートへのインディケータ添付時のパラメータウィンドウと同様の内容ですので、適宜、変更してください。 詳細はMQLリファレンスの「MQL4 Reference - Technical indicators - iIchimoku」、「MQL4 Reference - Standard constants - Ichimoku Kinko Hyo」の項も参考になるかと思います。 >>naotyさん こんばんは。 LSMA in Colorは、たしか状況によって3色で色分けされて表示される類のMAですね。これは数値が吐き出されていないのではなくて、色ごとに計3種類の配列(インディケータバッファ)が使われているためだったかと思います。 どれが何色だったかは忘れてしまいましたが、 A色: iCustom(NULL, 0, "LSMA in Color", 34, 1500, 0, Current + 1); B色: iCustom(NULL, 0, "LSMA in Color", 34, 1500, 1, Current + 1); C色: iCustom(NULL, 0, "LSMA in Color", 34, 1500, 2, Current + 1); のどれかには値が入っているはずです(最後から2番目のパラメータがインディケータバッファの番号)。なので、どの色(用のインディケータバッファ)にインディケータの値が入っているか調べないといけなかったかと思います。 ちょっと記憶が曖昧ですが、このインディケータの値の持ち方の仕様は、 ・ある1色がインディケータの値を持つ(表示されている)場合には、他の2色の値はどちらも0.0になる。 ・ある1色は常にインディケータの値を持つ。他の2色は通常は0.0の値を持ち、状況に応じてインディケータの値を持つ(表示上は、ある1色の上に他の色が重なる状態)。 のどちらかだったと思います。 どちらにしても、視覚的表現を重視して作られてるインディケータなので、ちょっと面倒ですね。
Posted by naoty at 2006-11-13(月) 23:56
SBTさん 早速お返事頂き、お忙しいところありがとうございます。 3色使うためにバッファの値の持ち方がやっかいになっているのですねー。 なんとかなりそうで大変感謝しております。 今後ともどうぞよろしくお願い致します。
Posted by naoty at 2006-11-19(日) 13:08
SBTさん お世話になっております。 先日のLSMAですが、buffer2に常に値がはいっているようです。 ただCurrentは正確な値なのですが、シフトするとおかしな値がはいってます。ご参考まで。 しばらくは、LSMAではなく他の代用できるMAですすめます。 もう1つお教え頂きたいのですが、 EBAで生成したコードの中に、 !TickCheck !EachTickMode !IsTrade など、定義済みのに”!”を付加したのが存在します この!は、どのような意味・使い方なのでしょうか? お手すきの際にご教示頂けると幸いです。 よろしくお願い致します。
Posted by SBT at 2006-11-19(日) 21:27
naotyさん、ご報告ありがとうございます。
「!」については、これは論理演算子の「否定」を意味します。例えば、変数IsTradeの型がbool(真偽)型の時、if(IsTrade) { ? }ならIsTradeが真(true)である時に実行、if(!IsTrade) { ? }ならIsTradeが真(true)で「ない」時=偽(false)の時に実行されるといった感じです。
この辺りは基本的な文法の話になりますので、MQLリファレンスの「Operations & Expressions」もご覧になることをおすすめします。
Posted by naoty at 2006-11-20(月) 00:48
SBTさん コメントありがとうございます。 !=と同じ意味合いなのですね。 私の不勉強でお手数おかけしてすいませんでした。 今後ともどうおよろしくお願い致します。
Posted by pmx-005 at 2006-11-21(火) 20:18
SBT様 お世話になっています! 久々に質問させて頂きたいことがあるのですが宜しいでしょうか? 実は、Bar の完成時にポジションをクローズさせたいのですが、何かよい方法はあるのでしょうか? もし宜しければ、お暇なときで結構ですので、ご教授頂けないでしょうか? お忙しいとは思いますが、どうかよろしくお願いします。
Posted by walrker at 2006-11-22(水) 12:16
SBT様 あまりにも基本的な質問にも丁寧に答える例を示すと 自分で調べる前に聞いて済まそうとする人を結果的に 呼び寄せてしまいかねませんよ・・・。寂しい話ですけど。 老婆心ながら。
Posted by pmx-005 at 2006-11-22(水) 18:35
SBT様 先日、質問させて頂いた件ですが、自分で調べたいと思います。 どうしても分からない事があれば、また質問させてください。 よろしくお願いします。
Posted by SBT at 2006-11-22(水) 21:14
>>pmx-005さん こんばんは。了解です。 分からない方法を敢えて使うよりは、分かる方法で検証してみると間違いが減るので良いかもしれませんね。 がんばってください :-) >>walrkerさん こんばんは。確かにそれはありますね。 まあ、楽をしようとすれば自分に返ってくるのがこの世界ですし、こちらもきまぐれですし(笑 お心遣いありがとうございます :-)
Posted by thr at 2006-11-24(金) 02:46
はじめましてthrと申します。 いつもおせはにねっております。 基本的な質問で恐縮なのですがEBAでは以下の様にプログラムされていると思いますがこれをキャンセルする方法は御座いますでしょうか。つまり同じバー内で二度以上取引しないようにするにはどうしたらいいかということなのですが。都合よろしければご教授くだされば幸いです。 ・ただし、例外として、決済の後の買いシグナル・売りシグナルは即座に発生します(これは途転注文に対応するためです)。
Posted by SBT at 2006-11-25(土) 01:02
thrさん、はじめまして。 たしか、元々は同じバー内で決済直後にシグナルが出た場合は無視する仕様でした。要望があって、現在の形になりました(半放置ぎみなので曖昧)。 ご希望の動作をさせるためには、MQLを直接、編集する必要があります。 決済直後には成立しにくい売買ルール、そういったルールに修正するのが一番簡単な解決方法かと思います。
Posted by thr at 2006-11-26(日) 01:35
お忙しい中早速のご返信ありがとう御座います。 私のほうでもう少し検討してみて、なお不明であれば今一度相談させて頂こうと思います。ありがとうございました。
Posted by タカハシ at 2007-02-03(土) 22:13
こんばんわ。 お世話になっております。 Expert Advisor builder につながらないのですが、改装中でしょうか?
Posted by SBT at 2007-02-04(日) 00:32
タカハシさん、こんばんは。 確認してみたところ、どうもサーバの設定を変更した際にミスがあったようです。ご報告、ありがとうございました m__m 現在、復旧済みですので今後ともよろしくお願いします。
Posted by RTNK at 2007-02-11(日) 20:27
初めまして SBT 様 MetaTrader 4 によるバックテストがしたくて 辿り着いた初心者です。 ただ やりたいバックテストが システムトレードとは異なり インジケーターのサインによる売買ではなく 毎日の決まった時刻からの イフダン注文なんです。 いろいろ 調べてはいるのですが一定時刻で 売買する方法が わかりません。 ロジックの入力方法を お教えいただけないでしょうか? よろしく お願い いたします。
Posted by SBT at 2007-02-13(火) 00:45
RTNKさん、はじめまして。 どのような条件かにもよりますが、時刻ベースやイフダン注文での検証は、ティックデータの不足やロジックミス等によって"検証結果が現実の取引と乖離する可能性が高い"と思います。Expert Advisor Builderでもそのままでは実現できません。 もし、MetaTrader4のMQL(MetaQuotesLanguage)で一から実現されたいのであれば、時刻の判断には日付・時刻関数(Date&Time functions)を使うことができます。MQL Editor付属のリファレンスを参考にしてみてください。 全くプログラミング経験がないという場合にはロジックミスが生じる可能性が高くなると思いますので、直感的にデータを扱うことができるExcel等で実現するのもおすすめですよ。Excelがなければ、OpenOffice.orgのCalcがExcel互換ですので、こちらでも良いと思います。
Posted by RTNK at 2007-02-14(水) 10:24
あのような不躾なメールにも 早速のご返信 ありがとうございます。 これまで エクセルでforexiteの 分足を簡単なVBAでいろいろ いじっておりましたが 1シート約一ヵ月半など 限界を感じておりました。 そこへMetaTrader4を知り SBT様のExpert Advisor Builder に巡り合い 今行っている裁量の指針のバックテストを行いました。 あきらめていた システムトレードができるかもしれないという喜びと興奮のなか あのようなメールになってしまいましたこと お詫びいたします。 あのあと いろいろ調べるとMQL Editorの中にdictionaryなどが あることがわかりました。 Expert Advisor Builderで かかれたプログラムを いくつか並べて 見ましたところ Variable Beginのところを 書き換えればいいような気がしています。 これからは C言語、JAVAなどのサイトも参考にしてMQLを 勉強していきたいと思います。 第一歩が 踏み出せたと実感しています これもすべて SBT様のExpert Advisor Builderの おかげです。 ありがとうございます。ほんとうに感謝しております。
Posted by SBT at 2007-02-19(月) 02:33
いえいえ、案外、Excelの方が一つづつ確認しやすかったりするので私もExcelも併用しています。 しかし、たしかにExcelの行数制限は厳しいですね。Excel 2007では256列 -> 1万6384列、6万5536行 -> 104万8576行に拡張されたみたいですが単品は高すぎですね。 MTも細かい部分ではブラックボックスであると言えると思いますが、VBAを使われていたということなので、サンプルとリファレンス等を参考しながらきっとうまく使い分けられるのではないかと思います。 今後ともよろしくお願いします :-)
Posted by ransome at 2007-02-20(火) 18:59
はじめまして。
最近、MTのプログラミングを始めました。
SBTさんのところでは、本当に色々と学ばせていただきました。
なんとかEAまで辿り着いたのですが、不可解な動作に悩まされております。
EAの中で、自作のカスタムインジケーターを呼ぶと、何度もロードされてしまいます。
(同じインジケーターのサブウィンドウが沢山作られるので、チャートを開くと悲惨な目に、、、、)
色々調べたところ、以下の条件を満たすと、簡単なプログラムでも再現するようです。
・カスタムインジケーターの「追加パラメーター」に string 型がある
・そのパラメーターに変数を渡す
( "ABC" など、定数を直接渡せばちゃんと動く)
・その変数が、遠いところで定義されている
string tmpStr = "AAA";
iCustom( ...., tmpStr, ... );
みたいにすぐ近くで簡単な定義であれば、動く場合がある(オプティマイズされたのだと思います)
以前、どこかで同じようなコメントを見た気がするのですが、探し回っても見つけられませんでした。
何か回避方法をご存知ないでしょうか?
できればファイル渡しは裂けたいんですが、、、、。
Posted by SBT at 2007-02-21(水) 00:21
ransomeさん、はじめまして。 このブログがなんらかの参考になりましたら幸いです。 EAの件ですが、手元にたまたまstring型パラメータを持つカスタムインディケータを使用したEAがあったので試してみました。 EAをチャートに添付したときですよね?一応、Strategy Testerでも試してみましたが、こちらでは再現できませんでした。 再現条件が微妙に違うのかもしれませんが…。 iCustom関数の直前で、別の変数に代入し直すとかでもだめですか?EAはたまにStrategy Testerで使うくらいですが、同様の問題に遭遇したこともなく解決方法もちょっとわかりません。 他に原因のわかる方がいましたら是非…。
Posted by ransome at 2007-02-21(水) 02:01
テストまでしていただき、有難うございます。 単純なプログラムで、もう少し試したところ、原因が判明いたしました。 恥ずかしながら、引数の初期化漏れでした。 (一番最初の extern のところ) 空文字( "" )のつもりでテストしていたのですが、Print で確認しても、空文字になっているようだったし、 Expert properties とかで空文字が設定されるものだと思っていたので、 初期化しなくて良いと考えてました。 ということで、以下のように修正したら直りました。 extern string inStr; ↓ ↓ ↓ extern string inStr=""; どうもお騒がせしました。
Posted by タカハシ at 2007-03-08(木) 09:42
こんにちわ。 いつもお世話になっております。 サブウインドウの前景色について不明な点があるのですが。 RSIやストキャスティクス、MACDのカスタム等で、表示される前景色のみを消すにはどの部分を削除すればよろしいのでしょうか? MACD(EMA12)?0・0000013 RSI(14)54.5962 このように表示される箇所は削除したいと思っています。 どちらかというと、視覚的な点を重視しておりますので。 よろしくお願いいたします。
Posted by タカハシ at 2007-03-08(木) 10:03
すみません。 試行錯誤で削除したら、うまくいきました。
Posted by weew at 2007-03-10(土) 18:39
はじめまして。weewと申します。 Expert Advisor Builderについての基本的な質問ですが、「SHIFT」に現在を0としていくつ分前のバーであるかで記入するとのことですが、「前のバー」ということは過去のバックテストのためのプログラムなら作れるでしょうが、将来のバーについて指定することになる自動売買システムのプログラムは作れないということにならないのですか。
Posted by SBT at 2007-03-12(月) 22:25
weewさん、はじめまして。 >「前のバー」ということは過去のバックテストのためのプログラムなら作れるでしょうが、 >将来のバーについて指定することになる自動売買システムのプログラムは作れないということにならないのですか。 過去のある時点から見た将来ということであれば、現在から見ればどちらも過去のデータですから、過去のある時点のバーを基点とすれば作れないということはありません。 過去の値動きから特定のパターンを抽出等するような場合には、将来のバー(現時点から見て過去)を使うことはあるかもしれませんね。 ただし、自動売買システムにおいて将来のバーを使うということは、未来のバーを使うということですから、EA Builderに限らずタイムマシンでも完成しない限りは不可能です。
Posted by ひろし at 2007-03-15(木) 10:25
はじめまして、ひろしと申します。 MetaTrader4を利用して、 「運用成績を競い合う、バーチャルFXトレード大会ができないだろうか。」 と、ふと思ったのですが、 例えば、デモサーバーにMT4のIDをPOSTしてやると、そのIDの現在保有金額を返してくれるようなWebアプリ用のAPIが公開されていればできそうかな。と思うのですがそのようなAPIは公開されているかご存知ないでしょうか? また、ちょっと調べた感じですと私の希望するようなWebアプリ用じゃないAPIは存在しているようなのですが、ダウンロードできる形になっていないみたいです。 もしもダウンロードする方法をご存知でしたら教えていただけないでしょうか。(お金を払わないとダウンロードできないのですかね?) 以上、よろしくお願いいたします。
Posted by SBT at 2007-03-15(木) 22:19
ひろしさん、はじめまして。 詳しいことはわかりませんが、ブローカー業務用として提供されていると思われる有料のMetaTrader 4 Serverなどの製品等を利用すれば可能なのかもしれませんね。MetaTrader 4採用のブローカーがそのようなサービスを提供していれば別ですが、基本的には自前でサーバを準備する必要はありそうに思いますが…。 デモサーバをそのようなサービスに利用することは個人利用の範疇を明らかに超えているかと思いますし、MetaQuotes Softwareの意向にも反する可能性があると思いますので、直接、MetaQuotes Softwareと交渉されてみてはいかがでしょうか?
Posted by ひろし at 2007-03-16(金) 00:25
ご回答ありがとうございます。 MetaTrader 4 Serverっていくらなんでしょうね。 高そう。。。 つたない英語で聞いてみようかと思います。
Posted by SSD at 2007-03-27(火) 11:33
はじめまして。Expert Advisor Builder利用を考えているSSDです。このソフトで作ったプログラムは作成時などににSBT さん、もしくは他の方に情報が自動伝達されることなどはあるのでしょうか。MetaTrader にしてもExpert Advisor で利用するプログラムはMetaquart社に自動で伝えられる形で流れ出るようなことはあるのでしょうか。
Posted by SBT at 2007-03-27(火) 22:55
SSDさん、はじめまして。 EA Builderでの作成時、出力されたスクリプトともに入力した情報等が取得・公開されることは一切ありません。 作れるパターンもそれほど多くはありませんし、機械的なルールだけでは何の役にも立たないというのがスタンスですので、取得するメリット・必要性もまたともにありません。 ただし、サイトの訪問時には、個人を特定しない統計的な情報(アクセス数等)のみ、一般的なアクセス解析ウェアによって取得しています。 MetaTrader本体については、アカウント登録時に同意した範囲内では情報が送信されることもあるかと思います。
Posted by レミイ at 2007-04-24(火) 01:10
はじめまして。MQL素人なのでExpert Advisor Builderを使用していじっているところです。売買シグナルは現行のExpert Advisor Builderでも作れるのですが。 下記のようなことができるようにAdvisor Builderに手をくわえていただけるとうれしいのですが・・・。 ?(もうすでに要望が出ていますが)注文ではなく、メールアラートにしたい ?シグナルが出たとき、テクニカルのパラメータをメール中に表示させたい(60分足と10分足のストキャス%Kと%Dの値) ちなみに 買いシグナル: 60分足の始値>パラボリック かつ 10分足の始値>パラボリック かつ 60分足のストキャスが%K>%D かつ 10分足のストキャスが%K>%D 売りシグナル: 60分足の始値<パラボリック かつ 10分足の始値<パラボリック かつ 60分足のストキャスが%K<%D かつ 10分足のストキャスが%K<%D
Posted by SBT at 2007-04-25(水) 00:23
メールアラート自体は既に実装しています。
EA添付時のパラメータ設定ウィンドウで、SignalMailをTrueにしてみてください。
シグナル発生時にメールが送信されます(注文も同時にでますが)。
メールは、「SendMail(?);」という部分で送信しているので、
SendMail("[Alert] Buy signal", "Indicator1 is " + DoubleToStr(Var1_1));
などと、ご自分で編集してみてください。
「Var1_1」だとかは、設定したインディケータが「Variable Begin」?「Variable End」の間に出力されているはずです。
Posted by レミイ at 2007-04-25(水) 19:10
ありがとうございました。 テスターのメールは届かなかったのですが、 パソコンを立ち上げている間の実際のアラートが 届いてました! インディケーターの設定もがんばってみます。
Posted by 晶 at 2007-04-28(土) 04:47
初めまして。 昨夜から弄りはじめてこの時間になってしまいました。 バックテストって楽しいですね。 ところで、EABで作成したMAなどの変数をExpertPropertiesで編集したい場合、グローバル変数に書き直す(extern?)だけでいいのでしょうか。 それとも変数をローカルにしているには理由があるのでしょうか。 ご教授頂けましたら幸いです。
Posted by SBT at 2007-04-28(土) 05:09
晶さん、はじめまして。
インディケータ関数のパラメータ(引数)を直書きで出力しているのはEABの仕様です。
というか、extern変数として書き出すようにできなくもないんですが、全部をそれで書き出すと、extern変数が膨大な数になることが予想できるので実装してません。
特に理由はありませんので、適宜、extern変数を使うように書き換えてもらって大丈夫ですよ。一応、例を示すと次のような感じです。
extern int MAperiod = 14;
(省略)
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Var1 = iMA(NULL, 0, MAperiod, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
(省略)
1.extern変数にしたいパラメータ(この場合、int period)を適当な変数名(この場合、MAperiod)に変更。
2.変数(MAperiod)を、関数(init(), deinit(), start()等)外でextern変数として定義。
Posted by 晶 at 2007-04-28(土) 05:57
SBTさん、早速のお返事恐縮です。 なるほど、仰るように、必要なグローバル変数を抽出するのは使用者のお仕事ですね。 むむ、悩ましい・・・ それにしても楽しい作業です。 これをベースに半年くらいは遊べそうです。 本当にありがとうございます。
Posted by STARS at 2007-05-04(金) 01:19
・Each Tickモードの場合でも、同じバー内でシグナルが発生するのは一度のみです。 ・同様に、Each Tickモードの場合でも、同じバー内で買い・売り・決済のシグナルが同時に(または、複数回)発生することはありません。 ・ただし、例外として、決済の後の買いシグナル・売りシグナルは即座に発生します(これは途転注文に対応するためです)。 とありますが違うシステムを使用して同じバーでシグナルが発生したらどうなるのですか?
Posted by SBT at 2007-05-05(土) 01:21
この仕様は、あくまでも1つのExpert Advisor(MQLスクリプト)内での仕様ということになっています。 複数のExpert Advisor(以下、EA)を走らせている場合でも、それぞれのEAはそれぞれ独立して動作します。なので、全体として、m同じバーでシグナルが発生することは十分にありえます。
Posted by STARS at 2007-05-05(土) 21:25
ありがとうございます。
Posted by 晶 at 2007-05-27(日) 20:45
SBTさん、お久しぶりです。
バックテストで注文がされないようなのでご教授下さい。
テスト環境は、GBPJPYペア、EveryTickモデル、期間は2007年5月1日-5月20日、期間M1です。
直前の始値と終値の幅が10pip以上動き確定したら、直後の始値でエントリします。
exitルールは設けず、S/LとT/Pを固定値で設定します。
###
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool StopLossMode = True;
extern int StopLoss = 10;
extern bool TakeProfitMode = True;
extern int TakeProfit = 10;
extern bool TrailingStopMode = False;
extern int TrailingStop = 30;
extern double Var1_1 = 0.10;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iClose(NULL, 0, Current + 0) - iOpen(NULL, 0, Current + 0);
double Buy1_2 = Var1_1;
double Sell1_1 = iOpen(NULL, 0, Current + 0) - iClose(NULL, 0, Current + 0);
double Sell1_2 = Var1_1;
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;
if (Sell1_1 > Sell1_2) Order = SIGNAL_SELL;
if (Buy1_1 > Buy1_2) Print ("Buy1 is ", Buy1_1);
if (Sell1_1 > Sell1_2) Print ("Sell1 is ", Sell1_1);
###
変更点は以上です。
Print構文は条件のヒットを確認するために設けました。
変数を桁上げしてintにしても、条件にSMAを組み合わせても、症状変わりません。
別の動作しているEABとdiffした結果は、当然ですが変数と条件式しか変わっていません。
煮詰まってます・・・
Posted by mm at 2007-05-28(月) 19:35
はじめまして。 トレイリングストップについて2006-05-03(水) 23:45のSTBさんのコメントの中に ・トレイリングストップはその右にあるpipsを越える利益が出て初めてされます。TakeProfitの幅(pips)がトレイリングストップの幅(pips)より小さい場合にはトレイリングストップは行われませんので、その辺りをちょっと確認してみてください。 とありますが、EAを使うなど何をしても、TakeProfitの幅(pips)がトレイリングストップの幅(pips)より小さい場合にトレイリングストップを行うことは不可能なのですか。 2006-04-04(火) 07:59のSTBさんのコメントの中に トレイリングストップには色々な方法があるんですが、EA Builderでは現在のレートとストップ注文の差(pips)が、常に設定したpipsを保つような仕様になっています。 つまり、EA Builderのトレリングストップを使うと、常に買値-設定pips、売値+設定pipsの位置にストップ注文が置かれる(移動する)ようになります(たしかそうなってるはずです^^;)。 とありますが、EA Builderでも不可能なのですか。
Posted by SBT at 2007-05-28(月) 22:31
>>晶さん
晶さん、おひさしぶりです。
ぱっと見、'EachTickMode'も'False'になっていますし、問題なさそうな気もしますね。
「double Sell1_2 = Var1_1;」の下辺りに(必要ならば、条件文の直前にも)、
Print("Close = ", iClose(NULL, 0, Current + 0), ", Open = ", iOpen(NULL, 0, Current + 0));
Print("Buy1_1 = ", Buy1_1, ", Buy1_2 = ", Buy1_2);
Print("Sell1_1 = ", Sell1_1, ", Sell1_2 = ", Sell1_2);
のようなPrint文を追加して、期待する値が入っているかどうか目視してみてはいかがでしょう?
>>mmさん
mmさん、はじめまして。
「TakeProfitの幅(pips)がトレイリングストップの幅(pips)より小さい場合にトレイリングストップが行われない」のは、現状のEABの仕様になります。
なので、EABのみでは不可能ということになりますが、EA自体にそのような制限があるわけではありません。
EABで出力されたものを改造したり、ご自分で一からEAを組まれる場合にはこの制限はありません。
Posted by 晶 at 2007-05-29(火) 02:53
SBTさん、こんばんは。 先の件、パラメータを弄り倒したところ、StopLossを13以上にすれば売買されることがわかりました。 FalseにしてもOKです。 念のためUSDJPYで試したところ、このペアでは5以上で売買されました。 MT4がバックテストを高速化する過程で、最適化に引っかかってしまうのかな、と想像しています。 以上、ご報告まで。 ありがとうございました。
Posted by mm at 2007-05-30(水) 14:08
なるほど。EAを使えば可能になるんですね。 トレイリングストップをポジションを建てた時の価格から実行したいのですが、無料のEAなどは支給されていないんでしようか。 ありがとうございました。
Posted by mimiko at 2007-09-04(火) 03:06
はじめまして。 まずは、素晴らしいツールを御提供くださっていることに感謝します。 ツールについての質問を少々超えた内容になるのですが、 ControlPointでよい結果が得られたものが、EveryTickだと駄目駄目の結果になる理由は結局のところ何故なのでしょうか? EveryTickが実際の売買により近いとしても、ControlPointよりも売買頻度がはるかに低下してしまう理由がどうしても分からないのです。 (実際の売買に近いのであれば、よりノイズに引っかかりやすくなり、結果として売買回数が増えると思っていたのですが・・・) あと、「現値」が「あるテクニカルのシグナル」より上になれば買い、といったような場合の「現値」とはどのように表せばいいのでしょうか? Builderでみると、Closeを使えばそれに近くなると思うのですが、まさに現値ではありませんよね? 素直に考えて買いの場合はAsk、売りの場合はBidでいいのでしょうか? また、同様に「買値」とはどのように表せばよいのでしょうか? 非常に初心者の質問で申し訳ありませんが、お時間がある折にでも御教示ください。
Posted by SBT at 2007-09-08(土) 02:46
EveryTickはランダムでにシミュレートしてるだけなので、結果は変わってくるでしょうね。 というか、EveryTick以外もランダムでシミュレートされますし、頻度の問題もその辺が関係あるんではないかと思うので、あまり当てにはしないほうがいいです。 現値はCloseですね。Close(Shift: 0)が現値です(EABのSignal ModeがEach Tickの場合)。Complete Barの場合は現値は使えない仕様になってます。 買値はClose[0]+スプレッドで、スプレッドの取得関数もありますが(MQLリファレンス参照)、ブローカーによって異なるのでスプレッド分の値幅を数字を直書き(+0.02とか)でいいと思いますよ。
Posted by mimiko at 2007-09-09(日) 03:07
御丁寧にありがとうございます。 やはり、Tickに左右されないストラテジーを考えるほうが無難ですね。 このあたりが、限界を感じるところです。 それが、シストレの限界なのかMT4の限界なのかはわかりませんが・・・・ >Complete Barの場合は現値は使えない仕様になってます。 なるほど。こうしたところも、きちんと把握していませんでした。お恥ずかしい。 >買値はClose[0]+スプレッドで、スプレッドの取得関数もありますが(MQLリファレンス参照)、ブローカーによって異なるのでスプレッド分の値幅を数字を直書き(+0.02とか)でいいと思いますよ。 ありがとうございます。 教えてくださった内容で、早速手直しをかけようと思います。 本当に本当にありがとうございました。 どんなにお礼を申しあげても足りないくらい、毎日感謝しています。 言葉だけでなく、本当に・・・・
Posted by REI at 2007-10-13(土) 03:10
誰かkerio parsonal firewall でMT4の許可の仕方詳細に教えてくれませんか?これを読んだら設定がわかるという本もないですか?
Posted by norio at 2007-10-28(日) 14:49
Expert Advisor Builder for MetaTrader 4でプログラムしたシステムが、数日前からorderSend error130というエラーがでて使えなくなりました。 付属のMACDsampleではエラーは出ません。 対処法をご存知の方いらっしゃいましたら教えていただけないでしょうか
Posted by KEI at 2007-11-03(土) 22:18
素晴らしいツールありがとうございます。 ひとつ質問があって、投稿しました。 Spreadを変えたいと思うのですが、可能でしょうか? いろいろとネット上を調べていたら、次のサイトではできると書いてあるのですが、設定の仕方がよくわかりません。 http://forum.mql4.com/4289 もし、よろしければ、ご教授いただけませんでしょうか?
Posted by やし at 2007-11-25(日) 18:13
こんにちは。 非常に有効なツールを公開していただき、大変助かります。ありがとうございます。 GFTのATSがとっつきやすいけどバグが多すぎるということでMETATRADERに移って来ました。 現状、自分ではコードをきちんとは書けないので、このツールで作成し、デモ口座で走らせてみます。 MACDとDMIを組み合わせたもので、バックテストでは自分としては試してみる価値ありと判断しております。 ODLで開設した後、デモ口座の結果をうけてリアルに移る予定です。 取りあえず作ったものは、METATRADERに慣れるためのもので、デモ口座でどんなカンジなのか感触を掴むのが第一の目的です。 で、今考えている簡単なストラテジーでコードを作成できないものかと悩み中です。 それは、aceleraterの色が変わった時点をエントリーポイントとしたいのです。 色がかわった時点の値とかフィルターをかける必要はあるのでしょうが、第一条件としてそれを使いたいのです。 今必死に考えていますが、少なくともExpert Advisor builderではできないように見受けられます。 できてしまえば、非常に助かるのですが。 で、なんとか自分でコードを作るしかないと格闘中です。 もしお時間があれば、コメントいただけると、非常に助かります。
Posted by SBT at 2007-11-26(月) 20:05
どうも、こんにちは。 標準の状態ではおっしゃるとおり対応していません。 色が変わるというのは人間の認識ですが、インディケータが機械(MT)の理解できるような仕組みになっていれば、カスタムインディケータ(iCustom)を工夫して使えばできると思いますよ。 aceleraterがどのインディケータのことかはわかりませんが、おそらくそのようなことはできるのではないかと想像します。 なお、EABで作成できるものは検証用のもので、例外処理等を省いています。実運用では使えませんので、その点はご注意ください。
Posted by やし at 2007-11-27(火) 11:35
お忙しい中、コメントいただきありがとうございます。 ところで、実運用で備えておくべき例外処理というものについてご教示いただけないでしょうか。 どこを見れば勉強になるよ、というのでも嬉しいです。 デモ口座で問題なければリアルで、なんて考えていたものですから、勉強して組み込もうとしています。 口座開設は来週末くらいになりそうなので、 その次の週を一つの目安に奮闘中です。
Posted by SBT at 2007-11-27(火) 20:17
こんばんは。 結論から言ってしまうと、こういったプラットフォームを利用しての自動売買自体に危険があるということです。 基本的かつ共通の処理としては、オーダーが通らなかった場合の処理などがあると思いますが、ストラテジーごとに想定外の状況というのは変わってくると思いますし、個別に洗い出して対応しなくてはいけない問題なので、残念ながらこれをこうすれば良いというものはないです。 プログラムもそうですが、FXの仕組みをよく理解していないと、どういった想定外の状況が起こりうるのかは分からないので、なかなか難しいと思います。 オーダー絡みの処理など、MQL側で対応できるものもあるとは思いますが、その他、対応できない状況も十分すぎるほど考えられるので、そういったリスクがあるということだけは理解しておく必要があるかもしれませんね。
Posted by やし at 2007-11-30(金) 09:37
こんにちは。 内容がこの場所に合わないような気がしているのですが、お許し下さい。 Builderを活用させていただき、簡単なストラテジーで作って検証している段階です。 で、MT4のバックテストではストップロスとかトレーリングとかのoptimizationはすんなりできたのですが、例えばMACDのパラメータの最適化はMT4のテスターで可能でしょうか? expertpropatiesのタブの中の項目に出てくる項目がどうやって決められているかがわかるとできるのかな?という気がしているのですが。 お手数おかけしますが、ご回答いただけると幸いです。 よろしくお願いします。
Posted by SBT at 2007-12-01(土) 00:17
こんばんは。 MetaTrader 4自体は、インディケータのパラメータの最適化にも対応してますが、EABで作成したものはインディケータのパラメータ等が直接書き出されますので、そのままでは最適化機能は利用できないです。 EABで出力されたMQLの「Variable Begin」?「Variable End」(コメント)の間にインディケータの関数が呼ばれている箇所があるので、最適化したいパラメータをextern変数に修正すればできるようになりますよ。 修正方法については、下記のコメントと同じ方法ですのでお試しください。 http://core.t3-ism.net/item...
Posted by やし at 2007-12-01(土) 15:11
こんにちは、SBTさん。 お世話になっております。 おかげさまで、最適化ができるようになりました。 目標の中のPF:2以上、最大ドローダウン10%以下というのを達成する目途がたちつつあります。 今後とも、よろしくお願いします。
Posted by やし at 2007-12-01(土) 17:24
SBTさん、こんにちは。 たびたびの質問で申し訳ありません。 グローバル変数を使って最適化を実施しています。 で、テスターの結果をうけて、とりあえず例えばPF値がよいものをset input parameterで実行し、その後にソースの方の変数の値を同じように変更しても、出てくるgraphが違います。 で、おかしいと思って確認していると、たとえばMACDの3つのパラメータが、最適化された値と、それを見てソースで変更した方のgraphでのグラフで見るMACDの値が違うのです。 説明が下手かもしれませんが、要は、ソースでMACDのパラメータを変更したはずなのに、それが反映されないのです。 もちろん、コンパイルはしています。 MT4を再起動したりしてみましたが、変わりありません。 コンパイルした後にしなくてはいけない操作というのはあるのでしょうか? ファイル名を変更してコンパイルすると、きちんと変更が反映されるというのは確認しているのですが・・・。 お時間あるときにご回答よろしくおねがいします。
Posted by SBT at 2007-12-02(日) 22:38
「Variable Begin」?「Variable End」の間にあるインディケータ関数のパラメータが、グローバル(extern)変数と違う変数名になっているとかはないですか? ソース側でパラメータを設定していれば、それが初期値になるはずですよ。
Posted by やし at 2007-12-03(月) 10:48
度々のご回答ありがとうございます。 ご指摘の部分、最適化をするときに必要な対応でしたので、実施しております。 (間違いがないように、コピペで対応しております) 念のため再確認はしましたが、変更しております。 もし他に可能性がある部分がありましたら、ご教示いただけると幸いです。
Posted by kyojee at 2007-12-22(土) 13:28
いつもお世話になります。 質問させてください。 priod_converter で任意のタイムフレームのヒストリカルデータは作れるのですが、これを使ってバックテストを行うことは出来るのでしょうか? 例えば、10分足データでバックテストするとかです。 データはあっても、テスターの「期間」プルダウンにはM10は出きてません。 よろしくお願い致します。
Posted by SBT at 2007-12-23(日) 20:03
priod_converterはほとんど使っていないので詳しくはわかりませんが、期間は元からあるものしかしか選べませんよ。 例えば、M1のところでデータをコンバートしたならM1を選べばできるんじゃないでしょうか? あと、MT4をオフラインモードにしておかないと、データが勝手に更新されてしまったと思います。
Posted by rei at 2008-03-28(金) 03:55
//システムRSI------------------------------------------------------
#define MAGIC 122
void posclose()
{
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADE) == false) break;
if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue;
OrderClose(OrderTicket(), OrderLots(), Bid,5,Red);
break;
}
}
int start()
{
if(Volume[0] > 1 || IsTradeAllowed() == false) return(0);
double rsi1= iRSI(NULL, 0, 12,PRICE_CLOSE,1);
double rsi2= iRSI(NULL, 0, 12,PRICE_CLOSE,2);
if(rsi2 < 60 && rsi1 >= 80)
{
posclose();
OrderSend(NULL, OP_BUY, 0.02, Ask, 5, 50*Point, 0, "", MAGIC, 0, Blue);
return(0);
}
return(0);
}
//システムRSI------------------------------------------------------
//システムMA-------------------------------------------------------------------
#define MAGIC 111
void posclose()
{
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADE) == false) break;
if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue;
OrderClose(OrderTicket(), OrderLots(), Bid,5,Red);
break;
}
}
int start()
{
if(Volume[0] > 1 || IsTradeAllowed() == false) return(0);
double ma1= iMA(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE,1);
double ma2= iMA(NULL, 0, 12, 0, MODE_SMA, PRICE_CLOSE,2);
if(ma2 > Close[2] && ma1 <= Close[1])
{
posclose();
OrderSend(NULL, OP_BUY, 0.03, Ask, 5, 50*Point, 0, "", MAGIC, 0, Blue);
return(0);
}
return(0);
}
//システムMA-------------------------------------------------------------------
この二つのシステムを同時に同じチャートの通貨で起動していたら
システムRSI、システムMAのポジションを同時にもっていたら
他方のOrderClose()のシグナルで手仕舞いされませんか?
ポジション識別インデックスMAGIC 111, 122 は
ポジションを持ったまま週末を迎え一度アカウントをログアウトして
MT4を終了してPCも切り、再び翌週アカウントにログインしてシステムRSI、システムMA
を起動してもMAGIC 111, 122はそれぞれのポジションで認識され、OrderClose()
もそれぞれ区別され手仕舞いされますか?
ターミナルの取引のタブはポジションがあると表示されますが、
でも口座でExpert Advisors
のサンプルで入っているものを起動しても全然取引のタブの所にポジション
が表示されませんがなぜですか?
リアルタイムでデモ口座でExpert Advisorsでテスト売買したいんですが
できないんですか?ストラテジーテスターのではないです。
Posted by SBT at 2008-03-30(日) 02:08
複数のEA/ポジションの管理、MT4再起動時の処理、その他、全部含めて一から十まで自前で細かくチェックするようにしないとだめですよ。 MT4はなんにもやってくれませんので。 サンプルのはEAがオフになっているだけでは?
Posted by rei at 2008-03-30(日) 06:21
そうですか。ありがとうございます。
Posted by nao at 2008-10-13(月) 13:51
ストキャスのゴールデンクロスで買いのファイルを作ってコンパイル、チャートにドロップしてニコチャンマークになりましたが、ゴールデンクロスしても何も起りません。 アラーム音、ポップアップ、矢印などで知らせてくれる事を期待していたのですが、このようなシグナルはコードを書く必要があるのでしょうか。 よろしくお願いいたします。
Posted by SBT at 2008-10-13(月) 15:50
検証用のEAを作成するものなので、お知らせ機能はEAでなくインディケータとして作成する必要があります。 シグナル用のコードは以下の記事を参考にしてみてください。 http://sufx.core.t3-ism.net...
Posted by Cena at 2008-10-21(火) 03:42
はじめまして。 まったくもって初歩的な質問なのですが、なぜ、ロジックの設定でインジケーター(左辺)・インジケーター(右辺)というように2つあるのでしょうか。 例えば、「何かの指標」が「XX以上であれば」という設定ならば2つのインジケーターではなく、ひとつでよいと思うのですが・・・
Posted by yone at 2008-10-31(金) 17:09
始めまして SBT 様 Expert Advisor Builderについての質問ですが 初心者の為少し教えていただけませんでしょうか MT4のEnvelopesには適用価格にPrevious Indicator's Data と言うのがあるのですがExpert Advisor Builderには無いように思います もしExpert Advisor BuilderでPrevious Indicator's Dataと同じく設定しようとしたら どのようにすればいいのでしょうか
Posted by SBT at 2008-11-03(月) 22:03
Previous Indicator's DataはMT4本体の機能なので、EABでは使えません。 自分でEAを作成する場合も自分でその処理を書く必要があったかと思います。
Posted by yone at 2008-11-04(火) 11:52
早々にありがとうございます だめもとで色々ためしてみます 今後もどうぞよろしく お願いします
Posted by ひろし at 2008-12-04(木) 23:16
はじめまして、このサイトでEABを利用させてもらい、少しずつEAを作って行っております。
申し訳ありません、少し質問よろしいでしょうか?
ブレイクイーブンを付けたいのですが、とりあえず、EABのトレーリングストップの所に付けてみたのですが、うまくコンパイルできません。(抜粋してあります。)
どこがいけないのでしょうか?
(BreakEven宣言はしています。)
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
if (BreakEven>0) {
if ((Bid-OrderOpenPrice())>BreakEven*Point) {
if ((OrderStopLoss()-OrderOpenPrice())<0) {
OrderModify(OrderOpenPrice()+0*Point);
}
}
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
Posted by BBW at 2008-12-22(月) 00:24
はじめまして、こんばんは 以前よりブログを拝見させていただいておりましたが、最近になりEABを使用させていただいております。 当方、コーディングレベルはまだまだ初歩レベルのため大変勉強になります。 一点御質問させてください。 トレーリングストップなのですが、バックテストのレポートを見ると確かに損切り価格は"modify"され追従し、最終的にはmodifyされた値で決済されているのですが、その間決済されるべき価格に何度も遭遇しているにもかかわらず(数銭という微妙な値でなく、数円単位で明らかにトレーリングストップ値を超えている)反応していないことがあるようです。 具体的なグラフ等で説明できなくお伝えしにくいですが、ご確認願えないでしょうか。 数種の自作インジケータの1ヶ月間のバックテストを実施したところ、決済をトレーリングストップにすると、どれも勝率100%となるためおかしいと思い(ホントだったらうれしいのですが・・・)確認してみたところそのような箇所を見つけました。 よろしくお願いいたします。
Posted by SBT at 2008-12-22(月) 00:48
返信が遅くなりましたが、 >Cenaさん >まったくもって初歩的な質問なのですが、なぜ、ロジックの設定でインジケーター(左辺)・インジケーター(右辺)というように2つあるのでしょうか。 インジケーターの値同士を比較したいケースもあるかと思うので、そのようになっています。 >ひろしさん MT4の利用者が増えてきたため、すみませんが、個別の具体的な質問への回答は控えています。 エラーメッセージを確認して、修正してみてください。 >BBWさん EABのデフォルトコードはもうだいぶ昔に書いたものなので、コードも汚く、バグ等もあるかもしれません。 ストラテジーテスターの設定が関係している可能性もありますが、すぐに確認・修正できるかはわかりません。 どこかにEAB用のテンプレートがあれば、それを利用してもらうのがよいかと思います。
Posted by BBW at 2008-12-23(火) 10:03
お忙しいところ、ご回答ありがとうございました。 『ストラテジーテスターの設定』と『EAB用のテンプレート』を自分なりに調べてみようかと思います。ありがとうございました。
Posted by HRT at 2008-12-25(木) 04:25
以前にメールさせて頂いて重複してしまうのですが・・・ EAを使って、建てたポジションの+5Pipsもしくは-5Pips到達で決済注文を出す・・・といったことは実現可能なのでしょうか・・・ EABで何度も試行錯誤しているのですが・・・ 私の無知がご迷惑をお掛けするようでしたら、放置で構いません。すみません。
Posted by tech at 2008-12-25(木) 09:56
SBTさま、皆様 MQLに関する質問をさせていただきます。 Indicatorである条件が成立したらメールで知らせようとおもっています。 そこで、どの通貨ペアが条件を成立したかを判断したいのですが、 通貨ペアは Symbol()関数でとれますが、TimeFrame(15分足、1時間足)などの情報を取得する方法はないのでしょうか? 私の勉強不足、既存の関数や、SBTさま、他サイトさまの記事にあるのかも知れません。 もし、ご存知でしたらご教授願います
Posted by SBT at 2008-12-25(木) 10:22
>HRTさん EABではデフォルトで指値・逆指値を使用しているため、値幅制限がある場合はそれ以上のpipsを指定する必要があります。 理由等はメールでの返信の通りです。 (メールが届いていない場合は迷惑メールフォルダをご確認ください。) >techさん タイムフレームはPeriod()で取得可能です。詳しくはリファレンスを確認してみてくださいね。
Posted by tech at 2008-12-25(木) 18:48
SBTさま Period()関数で取得できたのですね ありがとうござます。
Posted by pochi at 2008-12-29(月) 09:14
初めましてMetaTrader 4、EA共に超初心者です。気に入ったインディケータをベースとして発展させたいと考えていましたが、E AB にたどり着き実現の可能性が出て 来ましたが移動平均線等高度な内容が多いのですが、試そうとしているのはシグナルでの売買で色々試しているのですがMetaQの知識もない為に動作しません。取っ掛かりとなるE AB のパラメータとカスタムインディケータの買い、売りシグナルに下記記載の対応する部分が判りませんのでよろしくお願いします。(後半は分割して送信します)
#property indicator_separate_window
#property indicator_buffers 6
//----
#property indicator_color1 DarkGray
#property indicator_color2 Lime
#property indicator_color3 Red
#property indicator_color4 DarkGreen
#property indicator_color5 Brown
//----
#property indicator_minimum -1.2
#property indicator_maximum 1.2
//----
extern int PriceActionFilter=1;
extern int Length=3;
extern int MajorCycleStrength=4;
extern bool UseCycleFilter=false;
extern int UseFilterSMAorRSI=1;
extern int FilterStrengthSMA=12;
extern int FilterStrengthRSI=21;
//----
double LineBuffer[];
double MajorCycleBuy[];
double MajorCycleSell[];
double MinorCycleBuy[];
double MinorCycleSell[];
double ZL1[];
//----
double CyclePrice=0.0, Strength =0.0, SweepA=0.0, SweepB=0.0;
int Switch=0, Switch2=0, SwitchA=0, SwitchB=0, SwitchC=0, SwitchD=0, SwitchE=0, SwitchAA=0, SwitchBB=0;
double Price1BuyA=0.0, Price2BuyA=0.0;
int Price1BuyB=1.0, Price2BuyB=1.0;
double Price1SellA=0.0, Price2SellA=0.0;
int Price1SellB=0.0, Price2SellB=0.0;
bool ActiveSwitch=True, BuySwitchA=FALSE, BuySwitchB=FALSE, SellSwitchA=FALSE, SellSwitchB=FALSE;
int BuySellFac=01;
bool Condition1, Condition2, Condition3, Condition6;
//+--------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(0,LineBuffer);
SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3);
SetIndexBuffer(1,MajorCycleBuy);
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,3);
SetIndexBuffer(2,MajorCycleSell);
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1);
SetIndexBuffer(3,MinorCycleBuy);
SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1);
SetIndexBuffer(4,MinorCycleSell);
SetIndexStyle(5,DRAW_NONE);
SetIndexBuffer(5,ZL1);
SetIndexEmptyValue(1,0.0);
SetIndexEmptyValue(2,0.0);
SetIndexEmptyValue(3,0.0);
SetIndexEmptyValue(4,0.0);
SetIndexEmptyValue(5,0.0);
return(0);
}
//+---------------+
int deinit() {return(0);}
//+---------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
// if(counted_bars>0) counted_bars--;
// int position=Bars-1;
int position=Bars-counted_bars;
if (position<0) position=0;
//----
int rnglength=250;
double range=0.0, srange=0.0;
for(int pos=position; pos >=0; pos--)
{
srange=0.0;
int j=0;
for(int i=0;i<rnglength;i++)
{
j++;
int posr=pos + i;
if (posr>=Bars)
break;
srange=srange + (High[posr] - Low[posr]);
}
range=srange/j * Length;
int BarNumber=Bars-pos; //??????????
if (BarNumber < 0)
BarNumber=0;
CyclePrice=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos);
if (UseFilterSMAorRSI==1)
ZL1[pos]=ZeroLag(CyclePrice,FilterStrengthSMA, pos);
if (UseFilterSMAorRSI==2)
ZL1[pos]=ZeroLag( iRSI(NULL, 0, 14, CyclePrice, FilterStrengthRSI ), FilterStrengthRSI, pos);
if (ZL1[pos] > ZL1[pos+1])
SwitchC=1;
if (ZL1[pos] < ZL1[pos+1])
SwitchC=2;
if (BarNumber<=1)
{
if (Strength==0)
SweepA =range;
else
SweepA=Strength;
Price1BuyA =CyclePrice;
Price1SellA =CyclePrice;
}
Posted by pochi at 2008-12-29(月) 09:24
分割部2/3の送信です。
if (BarNumber > 1)
{
if (Switch > -1)
{
if (CyclePrice < Price1BuyA)
{
if (UseCycleFilter && (SwitchC==2) && BuySwitchA )
{
MinorCycleBuy[pos + BarNumber - Price1BuyB]=0; //MinorBuySell
LineBuffer[pos + BarNumber - Price1BuyB ]=0; //line
}
if (!UseCycleFilter && BuySwitchA)
{
MinorCycleBuy[pos +BarNumber - Price1BuyB]=0;
LineBuffer[pos +BarNumber - Price1BuyB]=0;
}
Price1BuyA=CyclePrice;
Price1BuyB=BarNumber;
BuySwitchA=TRUE;
}
else if (CyclePrice > Price1BuyA)
{
SwitchA=BarNumber - Price1BuyB;
if (!UseCycleFilter)
{
MinorCycleBuy[pos +SwitchA]=-1;//MinorBuySell - DarkGreen
LineBuffer[pos +SwitchA]=-1;//line
}
if (UseCycleFilter && SwitchC ==1)
{
MinorCycleBuy[pos +SwitchA]=-1; //MinorBuySell
LineBuffer[pos +SwitchA]=-1; //line
SwitchD=1;
}
else
{
SwitchD=0;
}
BuySwitchA=TRUE;
double cyclePrice1=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);
if (ActiveSwitch)
{
Condition1=CyclePrice - cyclePrice1>=SweepA;
}
else
{
Condition1=CyclePrice>=cyclePrice1 * (1 + SweepA/1000);
}
if (Condition1 && SwitchA>=BuySellFac)
{
Switch= - 1;
Price1SellA=CyclePrice;
Price1SellB=BarNumber;
SellSwitchA=FALSE;
BuySwitchA=FALSE;
}
}
}
if(Switch < 1)
{
if (CyclePrice > Price1SellA)
{
if (UseCycleFilter && SwitchC==1 && SellSwitchA )
{
MinorCycleSell[pos +BarNumber - Price1SellB]=0; //MinorBuySell
LineBuffer[pos +BarNumber - Price1SellB ]=0; //line
}
if (!UseCycleFilter && SellSwitchA )
{
MinorCycleSell[pos +BarNumber - Price1SellB]=0;//MinorBuySell
LineBuffer[pos +BarNumber - Price1SellB]=0;//line
}
Price1SellA=CyclePrice;
Price1SellB=BarNumber;
SellSwitchA=TRUE;
}
else if (CyclePrice < Price1SellA)
{
SwitchA=BarNumber - Price1SellB;
if (!UseCycleFilter)
{
MinorCycleSell[pos +SwitchA]=1; // MinorBuySell darkRed
LineBuffer[pos +SwitchA]=1; //"CycleLine"
}
if (UseCycleFilter && (SwitchC==2))
{
MinorCycleSell[pos +SwitchA]=1;//MinorBuySell darkRed
LineBuffer[pos +SwitchA]=1;//CycleLine
SwitchD =2;
}
else
SwitchD =0;
SellSwitchA=TRUE;
double cyclePrice2=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);
if (ActiveSwitch)
Condition1=(cyclePrice2 - CyclePrice)>=SweepA;
else
Condition1=CyclePrice<=(cyclePrice2 * (1 - SweepA/1000));
if (Condition1 && SwitchA>=BuySellFac)
{
Switch=1;
Price1BuyA=CyclePrice;
Price1BuyB=BarNumber;
SellSwitchA=FALSE;
BuySwitchA=FALSE;
}
}
}
}
LineBuffer[pos]=0;
MinorCycleBuy[pos]=0;
MinorCycleSell[pos]=0;
Posted by pochi at 2008-12-29(月) 09:35
分割分
if (BarNumber==1)
{if (Strength==0)
SweepB =range * MajorCycleStrength;
else
SweepB=Strength * MajorCycleStrength;
Price2BuyA=CyclePrice;
Price2SellA=CyclePrice;}
if (BarNumber > 1)
{if (Switch2 > - 1)
{if (CyclePrice < Price2BuyA)
{if (UseCycleFilter && SwitchC==2 && BuySwitchB )
{MajorCycleBuy [pos +BarNumber - Price2BuyB]=0; //MajorBuySell,green
// LineBuffer[pos + BarNumber - Price2BuyB ] = 0; //line -----}
if (!UseCycleFilter && BuySwitchB )
{MajorCycleBuy [pos +BarNumber - Price2BuyB]=0;//MajorBuySell,green
// LineBuffer[pos + BarNumber - Price2BuyB ] = 0; //line-- Price2BuyA=CyclePrice;
Price2BuyB=BarNumber;
BuySwitchB=TRUE;}
else if (CyclePrice > Price2BuyA)
{SwitchB=BarNumber - Price2BuyB;
if (!UseCycleFilter)
{MajorCycleBuy [pos +SwitchB]=-1; //MajorBuySell green
// LineBuffer[pos + SwitchB] = -1; //line----------- if (UseCycleFilter && SwitchC ==1)
{MajorCycleBuy [pos +SwitchB]=-1; //MajorBuySell green
// LineBuffer[pos + SwitchB] = -1; //line------------
SwitchE =1;}
else
SwitchE =0;
BuySwitchB=TRUE;
double cyclePrice3=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
if (ActiveSwitch)
Condition6=CyclePrice - cyclePrice3>=SweepB;
else
Condition6=CyclePrice>=cyclePrice3 * (1 + SweepB/1000);
if (Condition6 && SwitchB>=BuySellFac)
{Switch2= - 1;
Price2SellA=CyclePrice;
Price2SellB=BarNumber;
SellSwitchB=FALSE;
BuySwitchB=FALSE;} }}
if (Switch2 < 1)
{if (CyclePrice > Price2SellA )
{
if (UseCycleFilter && SwitchC ==1 && SellSwitchB )
{MajorCycleSell [pos +BarNumber - Price2SellB]=0; //"MajorBuySell",red
// LineBuffer[pos + BarNumber - Price2SellB ] = 0; //line --
}
if (!UseCycleFilter && SellSwitchB )
{MajorCycleSell [pos +BarNumber - Price2SellB]=0;//"MajorBuySell",red
// LineBuffer[pos + BarNumber - Price2SellB ] = 0; //line -----}
Price2SellA=CyclePrice;
Price2SellB=BarNumber;
SellSwitchB=TRUE;}
else if (CyclePrice < Price2SellA)
{SwitchB=BarNumber - Price2SellB ;
if (!UseCycleFilter)
{MajorCycleSell[pos + SwitchB]=1; //"MajorBuySell",red
// LineBuffer[pos + SwitchB ] = 1; //line - if (UseCycleFilter && SwitchC ==2)
{ MajorCycleSell [pos + SwitchB]=1; //"MajorBuySell",red
// LineBuffer[pos + SwitchB ] = 1; //line -
SwitchE =2;}
else
SwitchE =0;
SellSwitchB=TRUE;
double cyclePrice4=iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
if (ActiveSwitch)
Condition6=cyclePrice4 - CyclePrice>=SweepB;
else
Condition6=CyclePrice<=cyclePrice4 * (1.0 - SweepB/1000.0);
if (Condition6 && SwitchB>=BuySellFac)
{Switch2=1;
Price2BuyA=CyclePrice;
Price2BuyB=BarNumber;
SellSwitchB=FALSE;
BuySwitchB=FALSE;}}}}
LineBuffer[pos]=0;
MajorCycleSell[pos]=0;
MajorCycleBuy[pos]=0;}
return(0);}
double ZeroLag(double price, int length, int pos)
{ if (length < 3)
{ return(price); }
double aa=MathExp(-1.414*3.14159/length);
double bb=2*aa*MathCos(1.414*180/length);
double CB=bb;
double CC=-aa*aa;
double CA=1 - CB - CC;
double CD=CA*price + CB*ZL1[pos+1] + CC*ZL1[pos+2];
return(CD); }
Posted by ぶろん at 2008-12-31(水) 16:41
はじめまして FXはそれなりに経験はあるのですが、EAは始めたばかりの超初心者です。色々と情報収集しているうちにここに辿り着きました。 すばらしいサイトだと思うと同時に膨大な質問や意見が寄せられそうなコンテンツだけに申し訳ありませんと思いつつ... 初歩的なことで本当にすみませんが、あるラインを上抜け/下抜けの条件設定について教えてください。 例えば「●●が+100を下抜けたら」とか「▲▲が××ラインを上抜いたら」という条件を当てはめる場合どのようにすれば良いのでしょうか。 よろしくお願いします。
Posted by ぶろん at 2008-12-31(水) 18:19
すみません。フォーラムの方に"Value"を使っての記載がありました。 http://sufx.core.t3-ism.net... しかし、it's the logic of 3MA/5MA crossover the following is. の所の例で説明されているBuy(Sell) logicsでパラメータに"value"を選択する方法が判りません。プルダウンの中には"value"がありませんし。 トンチンカンなことを伺っているのかもしれませんが、よろしくお願いします。
Posted by SBT at 2008-12-31(水) 20:58
ぶろんさん >しかし、it's the logic of 3MA/5MA crossover the following is. の所の例で説明されているBuy(Sell) logicsでパラメータに"value"を選択する方法が判りません。プルダウンの中には"value"がありませんし。 アップデートでインジケーターの名称が変更されています。 現バージョンでは、"Number/Variables"を選んでください。
Posted by ぶろん at 2009-01-04(日) 10:53
SBTさま 大晦日にご丁寧にありがとうございました。
Posted by pochi at 2009-01-06(火) 14:17
SBT 様 ご報告が遅れまして申し訳ありません。cycleidentifierの件でメールまで頂いたとの事で申し訳ありません。スパムメールが多くて削除してしまった様です お手数ですが再送お願い出切れば幸いです。 Expert Advisor Builderに出会って何か明るい光が差してきた雰囲気で、全体の操作にも慣れて来てストキャスティックは動作して感激しております。(何か自分でも作れそうです) Expert Advisor Builderの別件で質問が有るのですがよろしくお願いします。 1.close(buy)close(sell)についての留意点は 有りますでしょうか 2.Each Tickモード、Complete Barモードで 発生したシグナルは次のシグナルが発生す るまで保持されているのでしょうか? (別のシグナルとの遅延によりタイミングが 合わない可能性?) お忙しい所お手数をおかけしますがよろしくお願いします。 、
Posted by SBT at 2009-01-06(火) 22:23
pochiさん コードに関しては、現在、個別の質問には対応しきれないため、回答を控えていますのでご了承ください。 カスタムインジケーターは、EABで「Custom Indicator」を選択することで利用できます。 見方としては、インジケーターのコードの外部(extern)パラメータが「Parameter」に、SetIndexBuffer()の数値が「Mode」に対応しています。 どの数値かはインジケーターによって異なります。 以下、EABについての回答になります。 1.Close(buy/sell)は決済シグナルですので、先にBuy/Sellのシグナルが発生している場合にのみ評価されます。BuyとClose(Buy)、SellとClose(Sell)が、それぞれ新規と決済注文の組み合わせになっています。 2.ポジションのことでしょうか?ポジションであれば、buy/sellのシグナルが発した場合、次にclose(buy/sell)の条件を満たすか、あらかじめ設定したStoploss/Takeprofit幅に達するまでは保持されます。
Posted by pochi at 2009-01-07(水) 20:03
SBT 様 毎度お世話になります。早速実行した所cycleidentifierも動作しました。 これを機に色々なCustom Indicatorを試して見たいと思います。 EABの有り難さに感謝すると共に、SBT様の対応に心より、お礼申し上げます
Posted by YDM at 2009-01-08(木) 13:16
SBT様 初めて問い合わせします。 超素人です moving averages の交差システム作成における EABのLogicsのBuy (SELL)logicsという部分が買い(売り)のルールを設定する画面表示の方法がいまいち理解出ませんので詳細に操作手順方法を教えていただければ幸いです。
Posted by SBT at 2009-01-10(土) 20:58
YDMさん、一部、リニューアルで変更になっています。 「Logics」はなくなり、単に「Buy(Sell) Logics」タブに変更になっています。 タブの切り替え後、「Add」ボタンでロジックを追加してください。
Posted by YDM at 2009-01-13(火) 21:04
毎度お世話になります EABによるMACDの交差やストキャスティックの交差によるシグナルの設定(携帯メール送信)ができません。MetaQでの追加部分が判りませんのでよろしくお願いします
Posted by YDM at 2009-01-14(水) 17:51
EABによる30分足や日足を条件でのMACDの交差やストキャスティックの交差の作成方法を教えねがいます
Posted by SBT at 2009-01-14(水) 22:22
>YDMさん デフォルトのテンプレートにはメール送信機能が含まれているため、EAの設定(SignalMail)変更のみで可能です。 また、Symbolをcurrentで作成すれば、自動的にEAを添付したチャートが対象になります。
Posted by Midastouch at 2009-01-15(木) 22:08
初めての問い合わせです。只今EABを猛勉強中です。よろしくお願い致します。 質問が2つあります。 ?公開されているインディケータにPerkyAsctrend1.mq4というものがありますが、これはEABに組み込めるのでしょうか? もしできるとすればどのようにするのでしょうか? ?DMI(ADXやADXRも含む)やStoch HistogramのようなCustom Indicatorのパラメータはどのように記述すれば良いのでしょうか? お忙しいとは思いますが、上記よろしくご指導下さい。
Posted by Midastouch at 2009-01-18(日) 22:55
前回初めて質問させて頂いたMidastouchです。 その後、EABとの格闘と試行錯誤である程度分かったと思われる質問事項がありました。また、質問の仕方自体が不鮮明でしたので、改めて質問をさせて頂きます。 先ず、Custom Indicatorのパラメータは、StochHistogramを例にとれば、単純に「14,3,3」などと記入すれば良いことが分かりました。済みませんでした。 次に、下記を改めて質問させて頂きます。 ?上記StochHistogramの場合、ModeはMeta EditorでStochHistogram.mq4を開き、コマンドの意味も分からないまま SetIndexBuffer(2,Stoch1)というラインを参考に「2」という数字を入れたらStrategy Testerが上手く動いているようですが、これで良かったのでしょうか?(しかし、Testerの動きはムチャクチャ遅いです。) ?VQ.mq4やPerkyAsctrend1.mq4のように、既に売買サインが出るようになっているインジケータをEABでEAとして出力するには各項目をどのように入力すれば良いのでしょうか? 初歩的な質問ばかりで申し訳ありませんが、よろしくお願い致します。
Posted by Midastouch at 2009-01-19(月) 04:44
またまたMidastouchです。 前回の質問で、Custom Indicatorのパラメータの項目については、結局何も記入せず空欄にしたままの方が正解のようでした。しっかり検証もせず質問してしまい済みませんでした。 なお、前回の?の質問事項については、未だ試行錯誤を繰り返しております。ご教示願えれば幸いです。
Posted by YDM at 2009-01-20(火) 13:47
1/14に質問した件ですが、再質問させていただきます。 EABによる30分足や日足を条件でのMACDの交差やストキャスティックの交差の作成方法を教えねがいます
Posted by Midastouch at 2009-01-22(木) 15:12
最近何度か質問させて頂いておりますMidastouchと申します。 今回はアラートメールのことでお尋ねします。 本サイトのコメントは最初から最新のものまで繰り返し読破しておりますので、上記アラートメールに関係するコメントも読ませて頂いた上での質問です。 EABを使用し、自分のEAを作成、出力し、MetaEditorにてCompileし0 error(s) 0 warning(s)になったものをMT4に乗せ、Stratery Testerによるテストも順調に結果を出してくれました。Posted by SBT at 2009-01-14(水) 22:22のSTB様からのコメントにもあるように、上記EAのパラメーターのSignalMailの項はtrueに設定してあります。 MT4の「ツール」→「オプション」→「E-メール」も有効にし、必要項目も入力済みです。従って、メールアラート機能付きの他のインジケータからは確実、正確に携帯までメールが届いています。 にも拘わらず、どうしてEABで出力したEAからはメールが届かないのでしょうか? 本サイトの他の方からのアラートメールに関するコメントでは無事成功しているようなので、なおのこと小生のケースの理由が解明できず途方に暮れております。 再々の質問で、STB様のお邪魔になっていることをお詫び申し上げます。前回の質問共々、上記件、宜しくお願いいたします。
Posted by SBT at 2009-01-22(木) 23:29
>YDMさん 下記の記事を参考にしてみてください。 http://sufx.core.t3-ism.net... http://sufx.core.t3-ism.net... >Midastouchさん Custom Indicatorは、基本的にMQLがわかる人向けのものになります。 (各コードを読む必要があり、個別には対応しきれませんのでご了承ください) メールですが、MT4のオプション等でEAを有効にしていないとメール機能も無効になります。
Posted by Midastouch at 2009-01-23(金) 01:15
返信ありがとうございました。MQLをもっと良く勉強します。 メールアラートの件ですが、MT4のオプションでEAのEnable Expert Advisorsの項目には既にチェックを入れてあります。他の項目でチェックを入れる必要のある個所があるのでしょうか? たびたびの初歩的質問ですみません。
Posted by SBT at 2009-01-24(土) 00:31
あとは、デモアカウントで動作させることを前提にしてるので、「Allow live trading」もチェックしないとダメだったかもしれません。 (本口座では動作させないでください。EAが実際に注文を出します。) MT4本体のターミナルの「Expert」(か「操作履歴」)にエラー表示があれば、それが原因かと思います。
Posted by Midastouch at 2009-01-25(日) 18:58
早速の返信ありがとうございました。ご指示に従いいろいろ試してみます。 MQLの学習が大変だったので、ついEABに安易に飛びついてしまい少し後悔しています。 今後は時間をかけてMQLをじっくり勉強してみます。
Posted by topsolid at 2009-01-27(火) 21:00
はじめまして、topsolidと申します。 いつも参考にさせていただいております。 EABのロジックの設定で質問させてください。 あれこれやってみたのですが、うまく行きません。 日足始値+100pipsで買い 手仕舞いは終値 おいそがしいとは存知ますが お暇な時にでも、ご回答いただければ うれしいです。。。
Posted by topsolid at 2009-02-08(日) 00:30
こんにちは。 EABロジックの設定ですが、 あれこれ調べまして、 何とか自己解決いたしました。 お騒がせしてすみませんでした。 これからも参考にさせていただきます。
Posted by cocohiro at 2009-02-22(日) 17:09
はじめまして。SBT 様 まだ覗く様になって間もないのですが 解説が非常にわかりやすく、重宝させてもらっています。 質問なのですが、EA Buliderを使って平均足を表示するカスタムインディケータの M15,H1がそれぞれ陽線となった時に買い注文を入れる。 逆に陰線となった場合には持っている買いポジションを決済するという 簡単な条件からEAを作ろうと思っているのですがなかなかうまくいきません; Custom Indicator < Custom Indicator --Left: Custom Indicator-- Symbol current Timeframe m15 name Heiken_Ashi_Smoothed Parameter Mode 0 Shift 1 --Right: Custom Indicator-- Symbol current Timeframe m15 name Heiken_Ashi_Smoothed Parameter Mode 0 Shift 0 H1も同様。close Buy logicも等不等号を逆にしただけとしました。 これをコンパイルした所、問題は無かったのですが ストラテジーテスターを行ったところ、一つの注文もできないまま終わってしまいました。 恐らくパラメータに何か入力しなくてはいけないのでしょうが ここにはどういう形式で何を記入するべきでしょうか? 的外れな質問となっているかもしれませんがよろしくお願いします。。
Posted by しゅしゅ★ at 2009-03-02(月) 22:16
MT4のことでお聞きしたいのですが、 一度注文を出し、トレール?トレイリングで、値を上げていきたいのですが、 ヘルプなども見ましたが、EA内でのプログラムの書き方がわかりません。 初歩的な質問ですが詳しい方教えていただきたいですm__m
Posted by nobu at 2009-03-11(水) 00:06
こんばんわ。 MT4を使い始めて3ヶ月程度の素人ですが、質問させていただいてよろしいでしょうか? 自動売買についてなのですが、 過去の売買記録を元に、ポジションのロット数・ロスカット幅の調整などは出来るものなのでしょうか? 例えばなんですが、 「前回の取引が2連敗であれば、ロット数を増やす」 「全取引の利益率がプラスであれば、ロット数を減らす」 などなど。 取引結果をcsvなどで吐き出しておく必要があるのか、MT4内で変数として保持し、EAが実行されるたびに毎回呼び出すことが可能なのか・・・ 考え方だけでもよいので、ご教授していただけると助かります。
Posted by カイジ at 2010-01-06(水) 23:53
SBTさんはじめまして 最近mt4でバックテストをしてみようと思っていたときにExpert Advisor Builderを知り、テストで15分足で12smaと42smaのクロスで売買するものを作ってみたのですがなぜか動きませんでした。mt4に最初から入っていたeaは動きました コンバイルしたときはエラーはありませんでした プログラミングは全くわからないので自分では原因がわかりませんでしたのでよろしければどうして動かないのか教えていただけないでしょうか? こちらが実験的に作ったものです http://sufx.core.t3-ism.net... 操作履歴に出たエラー http://www.dotup.org/uploda... http://www.dotup.org/uploda...
Posted by fumie at 2010-03-12(金) 10:39
ありがとうございます。 みなさんの文面を見ていて、 私も一人で悩んでないで聞いてみようと思い 初コメントします。o(^-^)o MT4を使用していて、 発注レート(決済レート)や発注番号(決済番号)をcsvに自動で落とし込みたいのですが、 詳しい方おられましたら、おしえてください。 よろしくおねがいいたしますm(_ _)m ありがとうございます。 fumie
Posted by みうら 太郎 at 2011-08-01(月) 22:47
たいへん参考になっていますありがとうございます 質問なんですがEABuilderで買い戦略売り戦略は、テスターで確認したとき自分のイメージとエントリーポイントが合うんですが決算がうまく合いません注文オプションで利食い30損切り30と入れているだけなんですがテスターで見てみると8pipsぐらいで利食うことが多いですどこが悪いか教えてください
Posted by kura at 2011-08-26(金) 11:15
はじめまして ご相談があるのですが 私は、eaビルダーで製作したeaをfxddで使用しているのですが、新しくAAAFXの口座でも使おうとしましたが、動きませんでした。 理由は、注文時に、リミット、ストップ、トレールを最初から指定しているとポジションが発生しない というものです。 これは業者側で、そういった仕様になっているらしいのです(stp,ecn業者) 9月からは、日本のフォレックス.com jpもそうなるみたいです こういった場合どのように修正すればいいのでしょうか?私は最初からリミットもストップもトレールも入れて使っているので非常に困っています 多忙とは思いますが・・・ eaビルダーに、注文後に後からストップ、リミット、トレールなどを追加出来るようにオプション機能を追加してもらうことは可能でしょうか? 初心者の私には、fxcmにある修正方法で正しく動くのかさえ疑問です どうかよろしくお願いいたします
Posted by kura at 2011-08-27(土) 19:23
以下のことも気になりましたので追記させていただきます 本文より 同様に、Each Tickモードの場合でも、同じバー内で買い・売り・決済のシグナルが同時に(または、複数回)発生することはありません。 ・ただし、例外として、決済の後の買いシグナル・売りシグナルは即座に発生します(これは途転注文に対応するためです)。 この ただし、例外として、決済の後の買いシグナル・売りシグナルは即座に発生します(これは途転注文に対応するためです)。 がロスカット後にドテン注文をし、往復びんたになることの方が多い気がします ロスカット後のみ、ポジションを持たないようにすることは可能でしょうか? よろしくお願いいたします
トラックバック
このエントリーへのトラックバックはありません。
- トラックバックURL
- http://core.t3-ism.net/trackback/247



Posted by ド・ジッター at 2005-12-23(金) 15:13