Market Watchウィンドウで選択されているすべての金融商品をスクリプトでプログラム的に確認するにはどうしたらよいでしょうか。 - ページ 3 1234567 新しいコメント Владимир 2008.03.11 22:32 #21 getch: 脚本に曲解はない。ちょっと型破りなんですよ、それ。 もちろん脚本自体に曲解はないのですが......正確には言ってませんでしたね。曲解はリストへのアクセスの仕方にある。しかし、ツールのリストへのアクセスは、ウィンドウズではなく、ターミナルによって実現されるべきであることに同意してください。そして、このスクリプトは、特に私のようなWindowsを扱った経験のない初心者にとって、とても便利なものです。また、独学では時間がかかるような有用な解決策がたくさん載っていて、ありがとうございました。 Alexey Navoykov 2008.03.12 11:58 #22 なぜそんな曲解をする必要があったのか...。必要なデータはMarketWatchオブジェクトから取得し、外部DLLを作成する方が簡単です。MQL4ではメモリ確保の 手順が必要なため、できません。 削除済み 2008.03.12 13:38 #23 MQL4では、DLLを書かずにこのデータを引き出すことが現実的(テスト済み)です。しかし、上記の方法は、より普遍的なものです。WriteSymbol()関数に多くのデータを簡単に便利に詰め込むことができるから...。 削除済み 2008.03.18 02:05 #24 Alexey Navoykov 2008.03.18 17:25 #25 動画が動かない... とはいえ、原理的には、このスクリプトがどのように機能するかは、すでに明らかになっています。しかし、これは明らかに信頼性の低い解決策であり、おそらく端末のハングアップを頻繁に引き起こすでしょう。このままでも十分ハングアップするのですが... getch: MQL4では、DLLを書かずにこれらのデータを取得することができる(つもり)です。しかし、上記の方法は、より普遍的なものです。WriteSymbol()関数に大量のデータを簡単に、便利に突っ込める...。 不思議なんですが、これってどうやったら引き出せるんですか?どんな命令で?そんなことが本当に可能なら、とてもありがたいのですが...。マジでありえないと思うけれども... 私自身、Market Watchからデータを取り出したことがありますが、C++のみです。 そのためには、まず新しいプロセスを作り(OpenProcess)、そこにメモリを確保し(VirtualAllocEx)、必要なデータ構造を そこに配置し、オブジェクトから必要な情報をそこに保存することになります。そして、そこから必要なデータを読み出していくのです。 しかし、メッセージだけでは情報は得られません、試してみました。オブジェクトは ListView 型である。 削除済み 2008.03.20 02:07 #26 理由は不明ですが、フォーラムでは動画を正しく表示することができません。そのため、ZIP-archiveとして添付しました。 このスクリプトの信頼性の低さ、操作性の悪さには遭遇していない。 ファイル: symbols.zip 1630 kb 削除済み 2008.05.30 20:35 #27 よりシンプル(グローバル変数が 1つだけ)で信頼性の高い(ハッシュ関数がない)バージョンのスクリプトです。 // Запись в файл названий и торговых условий всех символов из окна "Market Watch" // Во время работы скрипта желательно не производить никаких действий в терминале #include <WinUser32.mqh> extern string FileName = "Symbols.txt"; // Имя файла для записи информации по символам extern int Pause = 200; // Техническая пауза в миллисекундах #import "user32.dll" int GetParent( int hWnd ); int GetDlgItem( int hDlg, int nIDDlgItem ); #import #define VK_HOME 0x24 #define VK_DOWN 0x28 #define LVM_GETITEMCOUNT 0x1004 // Названия используемых глобальных переменных #define VAR_HANDLE "Symbol_Handle" // Возвращает хэндл основного окна терминала int Parent() { int hwnd = WindowHandle(Symbol(), Period()); int hwnd_parent = 0; while (!IsStopped()) { hwnd = GetParent(hwnd); if (hwnd == 0) break; hwnd_parent = hwnd; } return(hwnd_parent); } // Открывает окно графика символа, расположенного в строке номер Num окна "Market Watch" void OpenChart( int Num ) { int hwnd = Parent(); if (hwnd != 0) // нашли главное окно { hwnd = GetDlgItem(hwnd, 0xE81C); // нашли "Market Watch" hwnd = GetDlgItem(hwnd, 0x50); hwnd = GetDlgItem(hwnd, 0x8A71); PostMessageA(hwnd, WM_KEYDOWN, VK_HOME,0); // верхняя строчка окна "Market Watch" while (Num > 1) { PostMessageA(hwnd, WM_KEYDOWN,VK_DOWN, 0); // сместились на нужную строчку Num--; } } PostMessageA(Parent(), WM_COMMAND, 33160, 0); // открыли график return; } // Закрывает окно графика void CloseChart( int hwnd ) { PostMessageA(GetParent(hwnd), WM_CLOSE, 0, 0); return; } // Запускает выбранный в окне "Navigator" скрипт (индикатор или советник) void RunScript() { PostMessageA(Parent(), WM_COMMAND, 33042, 0); // исполнить скрипт на текущем графике return; } // Возвращает количество символов в окне "Market Watch" int SymbolCount() { int hwnd = Parent(); int Count = 0; if (hwnd != 0) // нашли главное окно { hwnd = GetDlgItem(hwnd, 0xE81C); // Нашли список символов hwnd = GetDlgItem(hwnd, 0x50); hwnd = GetDlgItem(hwnd, 0x8A71); Count = SendMessageA(hwnd, LVM_GETITEMCOUNT, 0, 0); // получили количество элементов списка } return(Count); } // Записывает характеристика текущего торгового символа в файл void WriteSymbol() { int handle; string Str; Str = "\n" + Symbol() + ":"; Str = Str + "\n Spread = " + DoubleToStr(MarketInfo(Symbol(), MODE_SPREAD), 0); Str = Str + "\n StopLevel = " + DoubleToStr(MarketInfo(Symbol(), MODE_STOPLEVEL), 0); Str = Str + "\n Digits = " + DoubleToStr(MarketInfo(Symbol(), MODE_DIGITS), 0); Str = Str + "\n Price(Example) = " + DoubleToStr(Bid, Digits); handle = FileOpen(FileName, FILE_READ|FILE_WRITE); FileSeek(handle, 0, SEEK_END); FileWrite(handle, Str); FileClose(handle); return; } void start() { int handle, Count, i = 1; if (GlobalVariableCheck(VAR_HANDLE)) // Запустили не первый раз... { GlobalVariableSet(VAR_HANDLE, WindowHandle(Symbol(), Period())); WriteSymbol(); } else // запустили первый раз { GlobalVariableSet(VAR_HANDLE, WindowHandle(Symbol(), Period())); handle = FileOpen(FileName, FILE_WRITE); // обнулили файл с данными FileClose(handle); Count = SymbolCount(); while(!IsStopped()) { if (i > Count) break; OpenChart(i); // открыли график очередного символа из окна "Market Watch" Sleep(Pause); RunScript(); // запустили на только что открытом графике текущий скрипт Sleep(Pause); CloseChart(GlobalVariableGet(VAR_HANDLE)); // закрыли окно графика Sleep(Pause); i++; } GlobalVariableDel(VAR_HANDLE); // записали в файл количество символов в окне "Market Watch" handle = FileOpen(FileName, FILE_READ|FILE_WRITE); FileSeek(handle, 0, SEEK_END); FileWrite(handle, "\nAMOUNT OF SYMBOLS = " + Count); FileClose(handle); } return; } Sergey Kravchuk 2008.05.31 07:42 #28 getch: // Открывает окно графика символа, расположенного в строке номер Num окна "Market Watch" void OpenChart( int Num ) すでに開いているチャートに シンボルを「リセット」するには、どのようなコマンドを使えばよいのでしょうか。 Vadim Zhunko 2008.09.25 08:47 #29 ここで ZG_All Quotings 1-80924を 作りました!!!! getch さん、素晴らしいアイデアと飛翔をありがとうございました!!!! 主人公の名前をぜひ教えてください :-) このスクリプトは、ブローカーから見積もりを取る最後の方法です。 さらに厳しい方法は、専用のツールで見積もりをたたき出し、直接ブローカーを訪ねることです。 Sceptic Philozoff 2008.09.25 09:11 #30 アイアンで、ですか? 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
脚本に曲解はない。ちょっと型破りなんですよ、それ。
なぜそんな曲解をする必要があったのか...。必要なデータはMarketWatchオブジェクトから取得し、外部DLLを作成する方が簡単です。MQL4ではメモリ確保の 手順が必要なため、できません。
とはいえ、原理的には、このスクリプトがどのように機能するかは、すでに明らかになっています。しかし、これは明らかに信頼性の低い解決策であり、おそらく端末のハングアップを頻繁に引き起こすでしょう。このままでも十分ハングアップするのですが...
MQL4では、DLLを書かずにこれらのデータを取得することができる(つもり)です。しかし、上記の方法は、より普遍的なものです。WriteSymbol()関数に大量のデータを簡単に、便利に突っ込める...。
不思議なんですが、これってどうやったら引き出せるんですか?どんな命令で?そんなことが本当に可能なら、とてもありがたいのですが...。マジでありえないと思うけれども...
私自身、Market Watchからデータを取り出したことがありますが、C++のみです。 そのためには、まず新しいプロセスを作り(OpenProcess)、そこにメモリを確保し(VirtualAllocEx)、必要なデータ構造を そこに配置し、オブジェクトから必要な情報をそこに保存することになります。そして、そこから必要なデータを読み出していくのです。 しかし、メッセージだけでは情報は得られません、試してみました。オブジェクトは ListView 型である。
理由は不明ですが、フォーラムでは動画を正しく表示することができません。そのため、ZIP-archiveとして添付しました。
このスクリプトの信頼性の低さ、操作性の悪さには遭遇していない。
よりシンプル(グローバル変数が 1つだけ)で信頼性の高い(ハッシュ関数がない)バージョンのスクリプトです。
すでに開いているチャートに シンボルを「リセット」するには、どのようなコマンドを使えばよいのでしょうか。
ここで ZG_All Quotings 1-80924を 作りました!!!!
getch さん、素晴らしいアイデアと飛翔をありがとうございました!!!!
主人公の名前をぜひ教えてください :-)
このスクリプトは、ブローカーから見積もりを取る最後の方法です。
さらに厳しい方法は、専用のツールで見積もりをたたき出し、直接ブローカーを訪ねることです。