Нужен код простого мониторинга форекс-счетов

 

Нужен код простого мониторинга форекс-счетов.
Если не код, то хотя бы главное: как подключиться прогой к чужому счету по имени/IP сервера, номеру счета и инвест-паролю.
Имея эту "печку" все остальное написал бы сам.
Буду благодарен за любую подсказку. Хотя бы где искать нужное.

 

Подключиться — через терминал.

Скрипт для логина лежал в кодо-базе, поищите.

 
Andrey Khatimlianskii:

Подключиться — через терминал.

Скрипт для логина лежал в кодо-базе, поищите.

Спасибо.
Если можно подключаться через терминал, но не руками, а прогой, то это решает проблему. Что делать дальше я знаю.

Но!
Искал там в первую очередь. Увы, Абсолютно ничего похожего. Задавал поисковую фразу во всех возможных комбинациях - безрезультатно, все не то.
Просмотреть же все в ручном режиме - на это и жизни не хватит. Тем более что мне уже 62 - осталось не так много ;)

 
Vasily Temchenko:

Спасибо.
Если можно подключаться через терминал, но не руками, а прогой, то это решает проблему. Что делать дальше я знаю.

Но!
Искал там в первую очередь. Увы, Абсолютно ничего похожего. Задавал поисковую фразу во всех возможных комбинациях - безрезультатно, все не то.
Просмотреть же все в ручном режиме - на это и жизни не хватит. Тем более что мне уже 62 - осталось не так много ;)

https://www.mql5.com/ru/search#!keyword=login

https://www.mql5.com/ru/code/16049


Еще у себя накопал:

// Переменное подключение к указанному количеству торговых счетов
// в закладке Избранное окна Навигатор

#property show_inputs
#include <WinUser32.mqh>
 
extern int              AccountsCount           = 2;            // Количество счетов в закладке Избранное окна Навигатор
extern bool             SaveStatement           = false;        // true - сохранять отчет, false - не сохранять
extern int              Pause                                   = 15;           // Пауза между переключениями торговых счетов
extern int              RoundPause                      = 30;

#import "user32.dll"
  int GetParent( int hWnd );
  int GetDlgItem( int hDlg, int nIDDlgItem );
  int GetLastActivePopup( int hWnd );
#import

#define VK_HOME 0x24
#define VK_DOWN 0x28
#define VK_ENTER 0x0D

#define PAUSE 1000

void start()
{
        if ( !IsDllsAllowed() )
        {
                Alert( "DLLs not alllowed!" );
                return;
        }

        while ( !IsStopped() )
        {
                for ( int i = 1; i <= AccountsCount; i++ )
                {
                        string dots = "...";
                        Comment( "Changing Account: ", i, " of ", AccountsCount, dots );
                        Login(i);
                        while ( !IsStopped() )
                        {
                                if ( OrdersHistoryTotal() > 0 ) break;
                                dots = StringConcatenate( dots, "." );
                                Comment( "Changing Account: ", i, " of ", AccountsCount, dots );
                                Sleep(500);
                        }
                        Comment( "Changing Account: ", i, " of ", AccountsCount, dots, "OK!" );

                        Sleep(1000);
                        Comment( "Changing Account: ", i, " of ", AccountsCount, dots, "OK! Sleep (", Pause, " sec)..." );
                        Sleep(Pause*1000);

                        if ( SaveStatement ) SaveStatement( true, AccountNumber() );
                }
                Sleep(1000);
                Comment( "Changing Account: sleep (", RoundPause, " sec)..." );
                Sleep(RoundPause*1000);
        }
        Comment("");
        return;
}

// Подключается к счету, расположенному в строчке номер Num в закладке Избранное окна Навигатор
void Login( int Num )
{
   int hwnd = WindowHandle(Symbol(), Period());
   int hwnd_parent = 0;

   while (!IsStopped())
   {
      hwnd = GetParent(hwnd);
      if (hwnd == 0) break;
      hwnd_parent = hwnd;
   }

   if (hwnd_parent != 0)  // нашли главное окно
   {
     hwnd = GetDlgItem(hwnd_parent, 0xE81C); // нашли Избранное окна Навигатор
     hwnd = GetDlgItem(hwnd, 0x52);
     hwnd = GetDlgItem(hwnd, 0x8A70);

     PostMessageA(hwnd, WM_KEYDOWN, VK_HOME,0); // верхняя строчка закладки Избранное окна Навигатор

     while (Num > 1)  
     {
       PostMessageA(hwnd, WM_KEYDOWN,VK_DOWN, 0); // сместились на нужную строчку
       Num--;
     }

     PostMessageA(hwnd, WM_KEYDOWN, VK_ENTER, 0);  // логин
     Sleep(PAUSE);                                 // выждали

     hwnd = GetLastActivePopup(hwnd_parent);  // нашли форму логина
     PostMessageA(hwnd, WM_KEYDOWN, VK_ENTER, 0); // залогинились
   }

        return;
}

// Сохраняет детализированный/краткий (Detailed = TRUE/FALSE) отчет о торговой истории счета в последнюю использованную папку
void SaveStatement( bool Detailed, string FileName )
{
   int hwnd = WindowHandle(Symbol(), Period());
   int hwnd_parent = 0;
 
   while (!IsStopped())
   {
      hwnd = GetParent(hwnd);
      
      if (hwnd == 0)
        break;
        
      hwnd_parent = hwnd;
   }
   
   if (hwnd_parent != 0)  // нашли главное окно
   {
     if (Detailed)
       PostMessageA(hwnd_parent, WM_COMMAND, 35502,0);  // Детализированный отчет
     else
       PostMessageA(hwnd_parent, WM_COMMAND, 33064,0);  // Краткий отчет
 
     Sleep(PAUSE);
 
     hwnd = GetLastActivePopup(hwnd_parent);  // нашли форму сохранения файла
     SetWindowTextA(GetDlgItem(hwnd, 0x480), FileName);  // ввели имя файла
 
     PostMessageA(hwnd, WM_KEYDOWN, VK_ENTER, 0);  // Подтвердили сохранение
     Sleep(PAUSE);
 
     hwnd = GetLastActivePopup(hwnd_parent);  // Нашли предупреждение о перезаписи файла
     PostMessageA(hwnd, WM_KEYDOWN, VK_DOWN, 0);  // Подтвердили перезапись
     PostMessageA(hwnd, WM_KEYDOWN, VK_ENTER, 0);
   }
 
  return;  
}
 

Еще есть штатный вариант через запуск терминала с конфиг-файлом.

Когда-то делал такое - простенький загрузчик, записывающий конфиг-файл, запускающий терминал, и скрипт, собирающий инфу и терминал закрывающий.

 
Andrey Khatimlianskii:

Еще есть штатный вариант через запуск терминала с конфиг-файлом.

Когда-то делал такое - простенький загрузчик, записывающий конфиг-файл, запускающий терминал, и скрипт, собирающий инфу и терминал закрывающий.

Огромное спасибо!

 
А на этих счетах терминалы то крутятся? Если да, то не проще ли в них поставить по эксперту, который будет постоянно мониторить и скидывать нужные данные?
 
Stanislav Korotky:
А на этих счетах терминалы то крутятся? Если да, то не проще ли в них поставить по эксперту, который будет постоянно мониторить и скидывать нужные данные?

Есть готовое решение?

 
Aleksey Vyazmikin:

Есть готовое решение?

У меня готового нет. Но как делать - понятно. Я бы отправлял все нужное на сервер через WebRequest или SendFTP.

Кроме того, в настройках терминала есть возможность отправлять отчеты автоматически на заданный сервер через FTP. Так что в MQL даже ничего писать не надо - только мониторить отчеты и может быть парсить их особым образом.

Причина обращения: