脚本如何能以编程方式浏览市场观察窗口中选择的所有工具? - 页 3 1234567 新评论 Владимир 2008.03.11 23:32 #21 getch: 剧本中没有变态的内容。这有点不合常规,就是这样。 当然,剧本本身并无变态之处--我说得并不完全正确。变态是在访问列表的方式上。但你应该同意,对工具列表的访问应该通过终端实现,而不是通过窗口。而且这个脚本非常有用,特别是对于像我这样没有使用Windows工作经验的初学者来说。再次感谢你,它有很多有用的解决方案,这将花费我大量的时间来学习。 Alexey Navoykov 2008.03.12 12:58 #22 你为什么要编造这样一个变态的...写一个外部DLL比较容易,其中所需的数据是从MarketWatch对象中提取的。你不能用MQL4来做,因为需要内存分配程序。 [删除] 2008.03.12 14:38 #23 在MQL4中,不需要写DLL就可以拉出这些数据,这是现实的(经过测试)。但上述方法的用途更广。因为你可以很容易和方便地将大量的数据塞进WriteSymbol()函数中... [删除] 2008.03.18 03:05 #24 Alexey Navoykov 2008.03.18 18:25 #25 你的视频不工作... 尽管从原则上讲,已经很清楚这个剧本将如何运作。但这显然是一个不可靠的解决方案,而且可能会导致终端的频繁挂起。它经常挂起,因为它是... getch: 在MQL4中,你可以(尝试)获得这些数据,而不需要写一个DLL。但上述方法更具有普遍性。你可以轻松方便地把大量的数据塞进WriteSymbol()函数中... 我想知道如何把它弄出来?用什么命令?如果这样的事情真的有可能,我将非常感激......。尽管我严重怀疑这是否可能...... 我自己也从Market Watch中提取过数据,但只是在C++中。 要做到这一点,你首先要创建一个新的进程(OpenProcess),在其中保留内存(VirtualAllocEx),将所需的数据结构 放在那里,并从该对象中保存必要的信息。然后我们从那里读取必要的数据。 但你不能只通过信息传递获得信息,我试过了。该对象是ListView类型的。 [删除] 2008.03.20 03:07 #26 由于我不知道的原因,论坛无法正确显示视频。因此,我把它作为一个ZIP-archive附件。 我没有遇到过这个脚本的不可靠或无法操作的情况。 附加的文件: symbols.zip 1630 kb [删除] 2008.05.30 22:35 #27 更简单(只有一个全局变量)和更可靠(没有哈希函数)的脚本版本。 // Запись в файл названий и торговых условий всех символов из окна "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 09:42 #28 getch: // Открывает окно графика символа, расположенного в строке номер Num окна "Market Watch" void OpenChart( int Num ) 我可以用什么命令将一个符号 "重置 "到一个已经打开的图表 上? 也就是说,将当前图表切换到我想要的符号上? Vadim Zhunko 2008.09.25 10:47 #29 这里做了 ZG_所有报价1-80924!!! 谢谢 getch 的伟大想法和思想的飞跃!!。 很想知道英雄的名字 :-) 这个脚本是获得经纪人报价的最后途径。 一个更艰难的方法是亲自到你的经纪人那里用特殊工具敲出报价。 Sceptic Philozoff 2008.09.25 11:11 #30 用铁杆,是吗? 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
剧本中没有变态的内容。这有点不合常规,就是这样。
你为什么要编造这样一个变态的...写一个外部DLL比较容易,其中所需的数据是从MarketWatch对象中提取的。你不能用MQL4来做,因为需要内存分配程序。
尽管从原则上讲,已经很清楚这个剧本将如何运作。但这显然是一个不可靠的解决方案,而且可能会导致终端的频繁挂起。它经常挂起,因为它是...
在MQL4中,你可以(尝试)获得这些数据,而不需要写一个DLL。但上述方法更具有普遍性。你可以轻松方便地把大量的数据塞进WriteSymbol()函数中...
我想知道如何把它弄出来?用什么命令?如果这样的事情真的有可能,我将非常感激......。尽管我严重怀疑这是否可能......
我自己也从Market Watch中提取过数据,但只是在C++中。 要做到这一点,你首先要创建一个新的进程(OpenProcess),在其中保留内存(VirtualAllocEx),将所需的数据结构 放在那里,并从该对象中保存必要的信息。然后我们从那里读取必要的数据。 但你不能只通过信息传递获得信息,我试过了。该对象是ListView类型的。
由于我不知道的原因,论坛无法正确显示视频。因此,我把它作为一个ZIP-archive附件。
我没有遇到过这个脚本的不可靠或无法操作的情况。
更简单(只有一个全局变量)和更可靠(没有哈希函数)的脚本版本。
我可以用什么命令将一个符号 "重置 "到一个已经打开的图表 上? 也就是说,将当前图表切换到我想要的符号上?
这里做了 ZG_所有报价1-80924!!!
谢谢 getch 的伟大想法和思想的飞跃!!。
很想知道英雄的名字 :-)
这个脚本是获得经纪人报价的最后途径。
一个更艰难的方法是亲自到你的经纪人那里用特殊工具敲出报价。