• 締切済み

MT4エキスパートタブテキストでエントリーするEA

MQLプログラミング初心者です。 特定の状態になるとエキスパートタブにメッセージを出力するインジケーターがあるのですが、このテキストはlogファイルとして保存されてメモ帳などで見る事ができるわけですが、このテキストを利用したEAが作れないかと思っています。 このインジはデータウインドウには一切数値などは表示されないものでして、自分のスキルでは icustomで拾うやり方しか分からないためどうしたものかと思い、このテキストを利用できないかと考えました。このインジは特定条件になったらメール送信もするためMT4trackなども使えるのかもしれませんが、このインジに加えて他の条件も合致した場合のみエントリーさせたいため、テキストを使うやり方位しか思いつきません。 良く分からないながらstringfindとかいう関数を見つけてこれが近いかなとは思いましたが、一体どこをfindさせるのか、どうやって「エキスパートログファイルの中の1行目」という事を指定するのか分かりません。果たして目的の動作は可能な事なんでしょうか? ご教授願えれば助かります、よろしくお願いします。

  • dov
  • お礼率86% (323/373)

みんなの回答

  • fmysh
  • ベストアンサー率79% (27/34)
回答No.1

ファイルの1行目を調べるのは、こんな感じじゃないでしょうか。 string file_name = "your_indicator.log"; string match_substring = "xxxxxx"; int file_handle = FileOpen(file_name, FILE_READ); string the_first_line = FileReadString(file_handle); //ファイルから1行だけ読み込む FileClose(file_handle); if (StringFind(the_first_line, match_substring)>0) { // 読み込んだ1行目に目当ての文字列があるか? // found } https://docs.mql4.com/files/fileopen https://docs.mql4.com/files/filereadstring https://docs.mql4.com/strings/stringfind

dov
質問者

お礼

ありがとうございます! 非常に助かります、参考にさせて頂きます。

関連するQ&A

  • MT4のEAバックテストが取れなくて困っています

    MT4のEAバックテストが取れなくて困っています バイナリーオプションのバックテスト用のエキスパートアドバイザーで、アローを出すインジケーターを指定してEA化し、バックテストをとっているのですが、OUT OF MEMORYエラーでデータが取れません。 いくつか試しましたが、インジケーターのパラメータが3つ程度のものなら普通に動きますが、いくつもパラメータがあるものは漏れなく動きませんでした。非常に困っています。 インジケーターはパラメータが少ないものはほとんどなく、つまり、ほとんどのインジケーターを取れない状況です。 具体的品番が今わからないのですが、Core i5 メモリ16GBのMACにBOOTCAMPで100GBパーティションでwindows10、OANDAのMT4を新規で最近インストールしました。 ヒストリカルデータと表示量は少なくして600000です。 余計な物は開かず、テストするチャートとインジケーターのみですが、タスクマネージャーではエラーが出た時メモリ使用量30-50%でCPUが30ほどでした。 検索してもout of memoryに関して英語のページばかりで情報量も少なかったので、質問しました。 解決策は無いでしょうか

  • MQLのiCustomのShift記述で

    MT4で自分のインジどおりの指標で自動売買させたく MQL4を独学勉強中の者です。 (現在、皆様もMQL5へ移行中ではあると思いますが) iCustom関数では iCustom(通貨ペア,時間足,インディケータ名,,...,インデックス,バーシフト); のような記述だと思いますが、バーシフトの部分を 「0(現在)から何本前の足まで」 と範囲を持たせたい時には、どのような記述をすればよいでしょうか? お知恵をお願い致します。

  • MT4でインディケーター(ex4)の読む込む場所

    MT4でインディケーター(ex4)をダウンロードし、 はじめに、 C/program files/MetaTrader 4/MQL4/Indicators の下にファイルを置いて、MT4を起動させたのですが、 何も表示されませんでした。 C/Users/Owner/AppData/Roaming/MetaQuotes/Terminals/~/MQL4/Indicators に置くと、表示されました。 他のファイルもそこに配置されていました。 なぜこのような箇所が読み込まれているのでしょうか? ファイルの読む込む場所を変える事は出来ないのでしょうか? よろしくお願いします。

  • MT4のEAに関して質問です

    MT4のEAに興味を持ち、以前もこのサイトに質問したことがあります。 http://okwave.jp/qa/q7406815.html ご回答いただいた書籍を購入し連休前ぐらいから勉強し始めて、EAのプログラムを見て正確にではありませんが、プログラムで実行しようとしていることが分かるようになってきました。 完璧には理解していないのですが、まずは習うより慣れろ的な感覚で、購入した書籍に記載されているサンプルプログラム(ボリンジャーバンドを使った逆張り)をちょっといじってバックテストをしてみました。 バックテストは一応、問題無く実行されましたが、プログラムが現在のローソク足でエントリーするものなので、 デモトレードで売買が成立する所を見てみたいと思い、実行してみましたが、 expert function calls are not allowed; 'MyLib'-'MyCurrentOrders' という文がターミナルウィンドのExpertsの部分に表示されて expert stoppedと表示され、EAが作動してないような感じです。 これは何が原因で起きているのでしょうか? 又、どのようにしたら、EAが作動するようになるのでしょうか? 因みに、プログラムの最初の行に#include<MyLib.mqh>と書いて、ライブラリー化された注文に関する関数のプrグラムファイルを読み込んでいると思います。 本来なら、プログラムを記載して質問した方が分かりやすいのでしょうが、本に記載されているものであり、著作権の問題に触れるのではと思って、プログラムは記載しておりませんが、お分かりの方がいらっしゃいましたら教えていただけますでしょうか。

  • MT4(MQL)の初歩がわかりません

    こんにちは、どうかよろしくお願いします MT4(MQL)をはじめたばかりです。 基本的な質問で恐縮ですが、根本が理解できておりません。 幾つか教えて頂きたいのです。 <質問1> MQLで記述したコードはチャートに組み込んで実行していくのは理解できたのですが、2つの異なる時間枠(週足と日足)などの複合的な条件で売買をするシステムは2つのチャートが必要です。このような事はMQLで実装可能でしょうか? 例えば、週足のテクニカル指標のシグナルと日足のテクニカル指標のシグナルとを確認した上で売買を実行するなどです。 <質問2> 初心者向けMQL関連の書籍(非常に親切で解りやすくとてもありがたい書籍です) を拝読したところ、テクニカル指標(MA)を表示するサンプルプログラム(Custom Indicator)と実際にMAのシグナルで売買するサンプルプログラム(Expert Advisor)の2つの例がありました。 Expert Advisor側のサンプルプログラムの中でiMA()という組込み関数が使用されてました。組込みとはMT4に元々用意されていたMAを呼び出したと理解しておりますが、そうすうるとCustom Indicatorで作成されチャート上に表示されたMAとは、関連性が無くそれぞれ独立したシステムなのでしょうか? 仮に私オリジナルのテクニカル指標をExpert Advisor側で作成してチャートに表示させても、Expert Advisor側でそのシグナルは関連付けできないのでExpert Advisor側でもそれと同じテクニカル指標のコードを記述するとこで、トレードシグナルと判断させることがMT4の基本的な考え方なのでしょうか? それともCustom Indicatorのテクニカル指標のシグナルを受取ってExpert Advisor側で判断できる方法もあるのでしょうか?MT4的な考え方が漠然としていて、よく理解できないのです <質問3> 上記質問の関連ですが、MAのシグナルで売買するExpert Advisor側のプログラムを仮に作成してチャートに組込んで使用する場合、そのチャートにMAが表示されていないとiMA()という組込み関数はデータを取得できないのでしょいうか?

  • メタトトレーダー、DealBookなどのインジケーター

    チャートを始めようと思っていますが、チャートソフト探しで困っています。 EA(自動売買)はするつもりはないのですが、インジケーターの概念がいまいち理解できません。 MT4でEAやインジケーターを自由に操るためにはMQL4という言語が扱えなければなりませんよね? 私は、基本的にはテクニカル分析のRSI RCI MACD ストキャスティクス などを利用したいのですが、 例えば、MACD において シグナル:9 短期EMA:12 長期EMA:26 が初期値だとは思いますが、この 9、12、26の数値を 変えてMACDを利用したいという単純な変化をさせる場合にも MQL4を利用するのですか? このような単純に平均期間を変えただけでも、インジケーターというものになるんですか? インジケーターの私のイメージとしては、平均期間を変えつつ見やすいようにチャート上の色を変化させたり、 テクニカル分析を組み合わせて表示させたりするものという 認識です。 そこまで高度なアレンジを利用するとは思いませんので、マネーパートナーズのHyper Speedなどから始めてみようと思ったんですが、もし 単純なMACDの平均期間の変更程度の操作ならば変わらないならば 後々のために、MT4を初めから使おうと思いました。 このような、単純な期間変換は簡単に行え、尚且つ ある程度高度なレベルまで使いこなせるようになるチャートソフトが Hyper Speed以外にあればご教示下さい。お願いします。

  • バッチ作成について

    いつもお世話になっています。 今回もよろしくお願いします。 今、バッチ作成に苦戦しています。 あるログファイル(テキストファイル)から、特定の項目に合致した行と合致していない行を 別々のテキストファイルを作成し書き出すという内容です。 具体的には、ログファイルの中身ですが、 ~△送信元=IPアドレス△宛先=IPアドレス△prot=プロトコル△~ 上記のように1行づつ表示されいます。 その中で、「送信元=IPアドレス」と「prot=プロトコル」の両方が、 条件に合致している行と合致していない行を別々のテキストファイルを作成し、 書き出すという内容です。 今回は、あくまでバッチです。 漠然としていて申し訳ありませんが、 どういった方法があるのか、よろしくお願い致します。

  • MT4のインジケータが灰色

    MT4のインジケータが灰色です。 MT4 の インジケータの事で質問です。 VQやtorを使いたいのです。 しかし、ダウンロードしたインジケータを所定のフォルダに格納しましたが、別添のファイルの画面のように灰色になってしまって使えません。 ネットで色々調べたらコンパイルすれば使えるとの事でしたが、コンパイルしようとしてもエラー表示が出て使えるようになりません。 どのようにしたら使えるようになりますか? 拡張子mq4はあっても拡張子ex4が無い状態なのだと思います。 OS は2年半ほど前のwin7のホームプレミアムです。 MT4はFOREXのデモ用でダウンロードした物です。 VQとTorは適当にネットからダウンロードしました。

  • ブログの引越しとlog2mt

    exciteブログからfc2への引越しをしたく、 ログをとるためにlog2mtを利用しようとしました。 が、エクスポートを試みると、 決まって0バイトのファイルしかDLされません。 デフォルトも合わせてあるし、URLも間違っていないし、 元を変にいじくったりもしていないのに…。 どうすればログがとれるでしょうか? もう諦めるしかないのでしょうか?

  • MT4のEAがエントリーしません

    上向きの移動平均線をローソク足が下から抜けたら買いエントリーし、4本値すべて移動平均線の下にいったらイグジット、売りは逆というEAをiCutomの本を見ながら作ってみたのですが、ポンド円の一分足で半日稼働したけれど全くエントリーしませんでした。どこがわるいのでしょうか?宜しくお願いします。(以下が内容です)因みにコンパイルしてエラーはありませんでした。 // マジックナンバーの定義 #define MAGIC 5582 // パラメーターの設定// extern int MA_Period = 21; // 短期移動平均線の期間設定 extern int MA_Shift = 0; // 移動平均を右にシフトするバー数の設定 extern int MA_Method = 0; // 移動平均方法の設定 extern double Lots = 1.0; // 取引ロット数 extern int Slip = 100; // 許容スリッページ数 extern string Comments = " "; // コメント // 変数の設定// int Ticket_L = 0; // 買い注文の結果をキャッチする変数 int Ticket_S = 0; // 売り注文の結果をキャッチする変数 int Exit_L = 0; // 買いポジションの決済注文の結果をキャッチする変数 int Exit_S = 0; // 売りポジションの決済注文の結果をキャッチする変数 double MA_2 = 0; double MA_1 = 0; int start() { MA_2 = iCustom(NULL,0,"Moving Averages",MA_Period,MA_Shift,MA_Method,0,2); MA_1 = iCustom(NULL,0,"Moving Averages",MA_Period,MA_Shift,MA_Method,0,1); // 買いポジションのエグジット if( MA_1 >= High[1] && ( Ticket_L != 0 && Ticket_L != -1 )) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } // 売りポジションのエグジット if( MA_1 <= Low[1] && ( Ticket_S != 0 && Ticket_S != -1 )) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S ==1 ) {Ticket_S = 0;} } // 買いエントリー if( MA_2 <= MA_1 && MA_1 > Open[1]&& MA_1 > Close[1] && ( Ticket_L == 0 || Ticket_L == -1 ) && ( Ticket_S == 0 || Ticket_S == -1 )) { Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } // 売りエントリー if( MA_2 >= MA_1 && MA_1 < Open[1]&& MA_1 > Close[1] && ( Ticket_S == 0 || Ticket_S == -1 ) && ( Ticket_L == 0 || Ticket_L == -1 )) { Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); }