質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

Q&A

解決済

2回答

4065閲覧

リアルタイムにログを取得

AMK

総合スコア765

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

0グッド

0クリップ

投稿2018/06/14 06:31

インジケータが鳴ったらLINE通知をしたいと思い

下記のようなロジックを考えました

ログから文字列を取得
指定した文字列と比較して入っていればLINE通知

ログを取得するのに下記のサイトを参考にして
http://paopao46.blog34.fc2.com/blog-entry-260.html

色々と試したのですが、使い方が間違っているのか?そもそもこのdllでは文字列は取得出来ないのか?助けて頂きたく質問させていただきます

問題点

GetLogData関数でテキストを取得できるっぽいとおもって

string data= GetLogData(LogHandle, 1, Buff, BUFF_SIZE);
Print(data);

上記のようなコードを作っても文字列ではなく、数値(バッファーサイズ?)が帰ってくるだけでした

そもそもこのdllは文字列を取得出来ないのでしょうか?それとも私の使い方が間違っているのでしょうか?
教えて頂けると助かります

また、他の方法でログ監視が出来るなど有りましたら教えていただけると幸いです

mql

1 2 3//Expertsログウィンドウを探すためのキーワード 4extern string Keyword = "If a body catch a body comin' through the rye"; 5 6//行読み取りバッファ・・・できるだけ長い文字列で初期化する 7static string Buff = "****************... "; //実際には256文字埋める 8 9//Buffの長さを定義 10#define BUFF_SIZE 256 11 12int LogHandle = 0; 13int init() 14{ 15 //探索用にキーワードを出力 16 Print(Keyword); 17} 18int start() 19{ 20 if(LogHandle == 0){ 21 //ハンドルが未取得なら取得する 22 LogHandle = FindLogHandle(WindowHandle(Symbol(), Period()), Keyword); 23 if(LogHandle <= 0){ 24 Print(Keyword); //探索用キーワードを再出力 25 return(0); 26 } 27 } 28 29 //ログの行数を調べる 30 if(GetLogRowCount(LogHandle) > 0){ 31 //先頭行のログを取得する 32 if(GetLogData(LogHandle, 1, Buff, BUFF_SIZE) > 0) 33 Comment(Buff); //コメントに表示 34 } 35 36 return(0); 37}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

ダメ元で作者の方にメールしたら帰ってきました。

MT4の仕様変更により現状では使えない状態でした。

Dllはそのまま使えるようです

MQL

1// ExpertsLogPeeper imports 2#import "ExpertsLogPeeper.dll" 3int FindLogHandle(int ChartWindowHandle, uchar& Keyword[]); 4int GetLogRowCount(int LogHandle); 5int GetLogData(int LogHandle, int RowNo, uchar& Buff[], int BuffSize); 6#import

MQL

1//+------------------------------------------------------------------+ 2#include <ExpertsLogPeeper.mqh> 3 4//Expertsログウィンドウを探すためのキーワード 5extern string Keyword = "If a body catch a body comin' through the rye"; 6 7//Log1行取得用バッファは、定義時にあらかじめ長めの文字列で初期化しておく 8//できるだけ長い方が好ましい 9#define BUFF_SIZE 256 10//string Buff = "----+----1----+---2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2----+----3----+----4----+----5----+-"; 11static uchar Buff[BUFF_SIZE + 1]; 12 13int LogHandle = 0; 14 15//+------------------------------------------------------------------+ 16int init() 17{ 18 //探索用にキーワードを出力 19 Print(Keyword); 20 return(0); 21} 22//+------------------------------------------------------------------+ 23int start(){ 24 25 if(LogHandle == 0){ 26 uchar array[BUFF_SIZE+1]; 27 int len = StringToCharArray(Keyword,array,0,StringLen(Keyword)); 28 array[len] = 0; 29 LogHandle = FindLogHandle(WindowHandle(Symbol(), Period()), array); 30 if(LogHandle <= 0){ 31 Print("Expertsログウィンドウを捕捉できません。"); 32 Print(Keyword); 33 return(0); 34 }else{ 35 Print("Experts Log Window Handle:", LogHandle); 36 } 37 } 38 39 //ログの行数を取得する 40 int rowCount = GetLogRowCount(LogHandle); 41 if(rowCount <= 0){ 42 Print("GetLogRowCount() return ", rowCount); 43 return(0); 44 } 45 46 string comm = ""; 47 for(int i = 1 ; i <= rowCount; i++){ 48 //1行ずつ取得する 49 int bytes = GetLogData(LogHandle, i, Buff, BUFF_SIZE); 50 if(bytes < 0){ 51 Print("GetLogData() return ", bytes); 52 break; 53 } 54 // 55 // 56 //何か解析とかの処理 57 // 58 // 59 string str; 60 str = CharArrayToString(Buff, 0, bytes); 61 comm = comm + str + "\n"; 62 } 63 //コメントに表示してみる 64 Comment(comm); 65 return(0); 66} 67 68

投稿2018/06/14 13:39

AMK

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考サイトのURLを参照しましたところ、GetLogDataの説明には下記のように記載があります。

int GetLogData(int LogHandle, int RowNo, string Buff, int BuffSize);



**Buffに取得されたログデータが返ります。**BuffSizeにはBuffのサイズを指定します。
返値は取得したバイト数です。

実際に試してみたわけでは無いので、ご参考までに。

投稿2018/06/14 07:10

編集2018/06/14 07:13
yuusuko

総合スコア145

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問