Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 576

 

Здравствуйте.

Скажите, пожалуйста, можно ли средствами терминала скопировать в буфер обмена текст из советника, например, по условию, текст аллерта.

Если да, то как это сделать?

 
mila.com:

Здравствуйте.

Скажите, пожалуйста, можно ли средствами терминала скопировать в буфер обмена текст из советника, например, по условию, текст аллерта.

Если да, то как это сделать?

Нет. Работа с буфером обмена - это системные функции (Windows API). В MQL5 нет прямого доступа к WinAPI. И зачем работать с буфером обмена? Ведь Вы сами формируете сообщение - значит у Вас есть и исходный текст сообщения.
 
Karputov Vladimir:
Нет. Работа с буфером обмена - это системные функции (Windows API). В MQL5 нет прямого доступа к WinAPI. И зачем работать с буфером обмена? Ведь Вы сами формируете сообщение - значит у Вас есть и исходный текст сообщения.

Да, исходный текст есть, но он мне нужен, по определённому условию, в буфере обмена.

Извините, не уточнила, нужна реализация в MQL4.

Может все-таки можно как-то через #import "user32.dll" открыть буфер обмена?

 
mila.com:

Да, исходный текст есть, но он мне нужен, по определённому условию, в буфере обмена.

Извините, не уточнила, нужна реализация в MQL4.

Может все-таки можно как-то через #import "user32.dll" открыть буфер обмена?

Пора уже давно писать на MQL5. Использование dll - верх безрассудства. 

Как я понял, Вы хотите считывать информацию сторонней программой. Тогда используйте запись в файл, в общую папку всех клиентских терминалов \Terminal\Common\Files. Уже из этой директории можете читать файл сторонней программой.

 
Karputov Vladimir:

Пора уже давно писать на MQL5. Использование dll - верх безрассудства. 

Как я понял, Вы хотите считывать информацию сторонней программой. Тогда используйте запись в файл, в общую папку всех клиентских терминалов \Terminal\Common\Files. Уже из этой директории можете читать файл сторонней программой.

Спасибо, за рекомендации, но сейчас мне нужно скопировать текст в буфер обмена из программы MQL4.

 
Karputov Vladimir:

Давайте по порядку. Вот шаблон: 

Прикрепите его на график и скриншот графика в студию, а также записи из вкладок "Журнал" и "Советники" (если они там появятся). 

Здравствуйте !!!

   Для начала я перезагрузил платформу МТ5. Скомпилировал Ваш шаблон. Результат компиляции представлен ниже. Из-за большого обьема скриншоты пришлось выбросить

В навигаторе появился советник:

Бросил советник на график и разрешил торговлю в 3-х местах:  

Получил на графике не смайлик с рожицей, а иконку советника

Вот выдержка из журнала  2016.05.11 12:44:47.139    Experts    expert Test (GBPUSD,H1) loaded successfully

Ниже привожу содержание сообщения о загрузке советника:

CO    0    10:35:45.020    Terminal    Alpari Limited MT5 x64 build 1325 started (Alpari Limited)
HD    0    10:35:45.020    Terminal    Windows 8.1 (x64 based PC), IE 11.00, UAC, Intel Core i5-2320  @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+03:00
ND    0    10:35:45.020    Terminal    C:\Users\Борис\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI    0    10:35:47.200    Network    '50016841': authorized on Alpari-Ltd-MT5 through mt5.nl.3 (ping: 57.34 ms)
NG    0    10:35:47.200    Network    '50016841': previous successful authorization performed from 79.172.69.175 on 2016.05.10 23:47:58
FK    0    10:35:47.617    Network    '50016841': terminal synchronized with Alpari Limited
RM    0    10:35:47.617    Network    '50016841': trading has been enabled - netting mode
OH    0    10:35:48.253    Network    '50016841': scanning network for access points
CL    0    10:35:51.446    Network    '50016841': scanning network finished
ND    1    12:00:49.011    Network    '50016841': connection to Alpari-Ltd-MT5 lost
MR    0    12:01:08.842    Network    '50016841': authorized on Alpari-Ltd-MT5 through mt5.nl.3 (ping: 56.41 ms)
HR    0    12:01:08.842    Network    '50016841': previous successful authorization performed from 79.172.69.175 on 2016.05.11 10:35:52
PQ    0    12:01:08.907    Network    '50016841': terminal synchronized with Alpari Limited
PH    0    12:01:08.907    Network    '50016841': trading has been enabled - netting mode
KL    0    12:41:45.169    Experts    expert Test (GBPUSD,H1) loaded successfully

Посмотрите пожалуйста. Может быть найдете причину. Я в тупике, может быть проблема с билдом?

   Спасибо !!!



Спасибо за помощь !!!

 
Boris.45:

Здравствуйте !!!

   Для начала я перезагрузил платформу МТ5. Скомпилировал Ваш шаблон. Результат компиляции представлен ниже. Из-за большого обьема скриншоты пришлось выбросить

В навигаторе появился советник:

Бросил советник на график и разрешил торговлю в 3-х местах:  

Получил на графике не смайлик с рожицей, а иконку советника

Вот выдержка из журнала  2016.05.11 12:44:47.139    Experts    expert Test (GBPUSD,H1) loaded successfully

Ниже привожу содержание сообщения о загрузке советника:

CO    0    10:35:45.020    Terminal    Alpari Limited MT5 x64 build 1325 started (Alpari Limited)
HD    0    10:35:45.020    Terminal    Windows 8.1 (x64 based PC), IE 11.00, UAC, Intel Core i5-2320  @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+03:00
ND    0    10:35:45.020    Terminal    C:\Users\Борис\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI    0    10:35:47.200    Network    '50016841': authorized on Alpari-Ltd-MT5 through mt5.nl.3 (ping: 57.34 ms)
NG    0    10:35:47.200    Network    '50016841': previous successful authorization performed from 79.172.69.175 on 2016.05.10 23:47:58
FK    0    10:35:47.617    Network    '50016841': terminal synchronized with Alpari Limited
RM    0    10:35:47.617    Network    '50016841': trading has been enabled - netting mode
OH    0    10:35:48.253    Network    '50016841': scanning network for access points
CL    0    10:35:51.446    Network    '50016841': scanning network finished
ND    1    12:00:49.011    Network    '50016841': connection to Alpari-Ltd-MT5 lost
MR    0    12:01:08.842    Network    '50016841': authorized on Alpari-Ltd-MT5 through mt5.nl.3 (ping: 56.41 ms)
HR    0    12:01:08.842    Network    '50016841': previous successful authorization performed from 79.172.69.175 on 2016.05.11 10:35:52
PQ    0    12:01:08.907    Network    '50016841': terminal synchronized with Alpari Limited
PH    0    12:01:08.907    Network    '50016841': trading has been enabled - netting mode
KL    0    12:41:45.169    Experts    expert Test (GBPUSD,H1) loaded successfully

Посмотрите пожалуйста. Может быть найдете причину. Я в тупике, может быть проблема с билдом?

   Спасибо !!!



Спасибо за помощь !!!

Установите терминал поверх этого ошибочного. Возможно вылечится.
 
Karputov Vladimir:

Пора уже давно писать на MQL5. Использование dll - верх безрассудства. 

Как я понял, Вы хотите считывать информацию сторонней программой. Тогда используйте запись в файл, в общую папку всех клиентских терминалов \Terminal\Common\Files. Уже из этой директории можете читать файл сторонней программой.

Если бы это было прям "верх безрассудства", оно было бы запрещено.

WinAPI значительно расширяет возможности MQL. А наделать глупостей можно и без dll.

А вот пример передачи строки в буфер обмена:

#define CF_UNICODETEXT 13
#define GHND 0x0042

#import "User32.dll"
   int OpenClipboard( uint );
   int EmptyClipboard();
   int CloseClipboard();
   uint SetClipboardData( uint uFormat, uint hMem );
#import "Kernel32.dll"
   uint GlobalAlloc( uint uFlags, uint dwBytes );
   uint GlobalLock( uint hMem );
   int GlobalUnlock( uint hMem );
#import "msvcrt.dll"
   uint memcpy( uint dest, string src, uint count );
#import

string str = "АБВГД";

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   uint hwnd = (uint)ChartGetInteger( 0, CHART_WINDOW_HANDLE );
   
   int strSize = StringLen( str ) * 2 + 2;  // Получаем размер строки в байтах
   
   if( OpenClipboard( hwnd ) )    // Открываем буфер
   {
      EmptyClipboard();           // Очищаем буфер
      
      uint hMem = GlobalAlloc( GHND, strSize ); // Выделяем память
      uint pMem = GlobalLock( hMem );    // Получаем адрес выделенной памяти
      memcpy( pMem, str, strSize );     // Копируем строку в память
      GlobalUnlock( hMem );
   
      SetClipboardData( CF_UNICODETEXT, hMem );  // Передаём память со строкой в буфер
      
      CloseClipboard();  // Закрываем буфер
   }
}
 
Artyom Trishkin:


Артем, подскажите, если я все это вставлю из под ф-ии On Start в функцию On Tick, скрипт будет исполняться так же, только на каждом тике, верно? 

Или что-то нужно менять?

И т.к. предыдущие свечи, кроме текущей, не меняются на каждом тике, то я так понимаю, что нужно прописать условие, чтобы проверка делалась 1 раз, например за 1 - 2 секунды до закрытия очередной текущей свечи? Или нет в этом смысла и можно оставить проверку на каждом тике?

 
Andrey Koldorkin:

Артем, подскажите, если я все это вставлю из под ф-ии On Start в функцию On Tick, скрипт будет исполняться так же, только на каждом тике, верно? 

Или что-то нужно менять?

И т.к. предыдущие свечи, кроме текущей, не меняются на каждом тике, то я так понимаю, что нужно прописать условие, чтобы проверка делалась 1 раз, например за 1 - 2 секунды до закрытия очередной текущей свечи? Или нет в этом смысла и можно оставить проверку на каждом тике?

Ну я бы оформил всё это в функцию, и вызывал бы её когда мне это нужно - хоть на каждом тике (если оправдано и необходимо), хоть на открытии новой свечи - раз в час например, если на Н1 работаем.