Автоматическое сохранение стейтмента с нескольких счетов

 
Возникла такая вот нестандартная потребность: существует несколько счетов, хочется автоматизировать ежедневное сохранение стейтментов с них, может у кого-то есть идеи как это можно сделать ?
 
Забыл уточнить - счета располагаются в разных ДЦ
 
rusinozemtsev:
Забыл уточнить - счета располагаются в разных ДЦ

ну, что тут думать написать скрипт, который бы писал историю в файл, например, в html формате
 
Разве существует из скрипта возможность перелогиниваться на азные сервера пол разными аккаунтами ?
 
rusinozemtsev:
Разве существует из скрипта возможность перелогиниваться на азные сервера пол разными аккаунтами ?

Зачем перелогинваться? Скрипт на каждом счёте должен запускаться независимо.
 
goldtrader:
rusinozemtsev:
Разве существует из скрипта возможность перелогиниваться на азные сервера пол разными аккаунтами ?

Зачем перелогинваться? Скрипт на каждом счёте должен запускаться независимо.
На сколько я понимаю что чтобы держать открытыми несколько счетов на которые можно навесить скрипты потребуется деражть на каждый счет по открытому терминалу. Не вариант
 
rusinozemtsev:
goldtrader:
rusinozemtsev:
Разве существует из скрипта возможность перелогиниваться на азные сервера пол разными аккаунтами ?

Зачем перелогинваться? Скрипт на каждом счёте должен запускаться независимо.
На сколько я понимаю что чтобы держать открытыми несколько счетов на которые можно навесить скрипты потребуется деражть на каждый счет по открытому терминалу. Не вариант


если бы терминал позволял запускаться с параметрами

1-брокер

2-счет

3-пароль


проблема была бы решена


маленькая внешняя программа написанная на любом языке

могла бы гонять терминал по всем брокерам... причем не надо было бя для каждого брокера держать свой терминал


----

это если разработчики в следующих релизах посчитают сделать нужным

вообще хорошая штука для тех кто ходит по разным счетам и собирает инфу

или следит за конкурсом


--- я так понимаю надо собирать статистику типа следить за счетами разными ?

 
Это возможно. "Маленькая внешняя программа" запускает терминал с указанием использовать сгенерированный ини-файл.
 
F1 - Сервис - Конфигурция при старте

Profile - имя поддиректории в директории profiles. В клиентском терминале будут открыты графики в соответствии с указанным профилем. Если данный параметр не указан, то будет открыт текущий профиль.

MarketWatch - имя файла (каталог \symbolsets), в котором содержится список инструментов для отображения в окне обзора рынка. Такой файл может получить при помощи команды контекстного меню окна "Обзор Рынка - Набор символов - Сохранить как".

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

Password - пароль для входа в систему. Этот параметр будет проигнорирован, если клиентский терминал хранит личные данные на диске и подключаемый номер счета содержится в списке.

Server - имя торгового сервера, к которому должно быть произведено подключение. Имя сервера совпадает с именем соответствующего srv-файла, хранящемся в директории config. Этот параметр будет проигнорирован, если информация о подключаемом аккаунте сохранена на диске.
 
// Переменное подключение к указанному количеству торговых счетов
// в закладке Избранное окна Навигатор
 
#property show_inputs
#include <WinUser32.mqh>
 
extern int Amount = 3; // Количество счетов в закладке Избранное окна Навигатор
extern int Pause = 10; // Пауза между переключениями торговых счетов
 
#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
 
// Подключается к счету, расположенному в строчке номер 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(1000);                                  // выждали
     
     hwnd = GetLastActivePopup(hwnd_parent);  // нашли форму логина
     PostMessageA(hwnd, WM_KEYDOWN, VK_ENTER, 0); // залогинились
   }
 
  return;
}
 
void start()
{
  int i;
  
  Pause *= 1000;
 
  for (i = 1; i <= Amount; i++)
  {
    Login(i);
    Sleep(Pause);
  }
 
  return;
}

Поместите нужные вам торговые счета (можно разных ДЦ) в закладку Избранное окна Навигатор.

Запустите скрипт, указав количество торговых счетов в закладке Избранное окна Навигатор.


Примечание: работе скрипта не мешают гуляние по окнам (настройки терминала, свойства графика, архив котировок и т.д.) и присутствие нескольких запущенных терминалов.

 
// Попеременное сохранение отчетов о торговой истории счетов,
// находящихся в закладке Избранное окна Навигатор
 
#property show_inputs
#include <WinUser32.mqh>
 
extern int Amount = 5; // Количество счетов в закладке Избранное окна Навигатор
extern int Pause = 10; // Пауза между переключениями торговых счетов
 
#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
 
// Подключается к счету, расположенному в строчке номер Num в закладке Избранное окна Навигатор
void Connect( 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;  
}
 
void start()
{
  int i;
  
  Pause *= 1000;
 
  for (i = 1; i <= Amount; i++)
  {
    Connect(i);
    
    Sleep(Pause);
    
    SaveStatement(TRUE, AccountNumber());
  } 
 
  return;
}

Поместите нужные вам торговые счета (можно разных ДЦ) в закладку Избранное окна Навигатор.

Запустите скрипт, указав количество торговых счетов в закладке Избранное окна Навигатор.


Примечания:

- Отчеты сохраняются в последнюю использованную вами папку;

- работе скрипта не мешают гуляние по окнам (настройки терминала, свойства графика, архив котировок и т.д.) и присутствие нескольких запущенных терминалов.