스크립트의 "시장 조사" 창에서 선택한 모든 도구를 프로그래밍 방식으로 반복하려면 어떻게 해야 합니까? - 페이지 2

 
KimIV :
VBAG :
나는 최근에이 문제를 스스로 해결했습니다.
DC가 쌍의 이름에 고유한 것을 추가하는 경우에는 작동하지 않습니다. 예: "m", "!", "." 또는 "_".
네, 물론, 연구 목적으로 이 작업을 수행했지만, 기분이 좋다면 급진적인 작업을 수행할 수 있습니다. 악기 이름(8-10). 이러한 스크립트는 몇 시간 동안 작동하지만 자동으로 보장됩니다.


준코에게
- 물론, 나는 당신의 코드에서 아이디어를 가져온 것을 기억합니다. 나는 며칠 동안 당신의 부트로더와 함께 일했습니다 - 재미있는 일입니다! 고맙습니다.
 
KimIV :
VBAG :

나는 최근에이 문제를 스스로 해결했습니다.
DC가 쌍의 이름에 고유한 것을 추가하는 경우에는 작동하지 않습니다. 예: "m", "!", "." 또는 "_".
이러한 DC는 거의 없으며 사용하는 기호 수도 적습니다. 예상할 수 있습니다.
이것이 내가 Moneyrain의 커플과 한 일입니다. "미니"와 "프로".
라이트에서는 어떤 종류의 쓰레기도 귀속되는 것 같습니다.
저것들. DC에 따라 악기를 그룹으로 나눌 수 있습니다.
저는 Alpari, ForexBest, MoneyRain, NorthFinance, NWBroker와 같은 DC에만 관심이 있었습니다.
최대 기기 수를 가진 DC입니다. 그리고 그들은 통화 지수를 계산하기 위한 견적서를 제출해야 했습니다.
다음은 스크립트 "ZZ_All Quotings 0-0080"입니다.
 
// Запись в файл названий и торговых условий всех символов из окна "Market Watch"
// Во время работы скрипта желательно не производить никаких действий в терминале
// NB: Используемая Хэш-функция не является корректной для данной задачи 
 
#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 VAR_HASH "Symbol_Hash"
#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;
}
 
// Хэш-функция перевода строки в целое число
// NB: данная функция не совершенна (приводит к коллизиям)
int Hash( string Str )
{
  int HashRes = 0;
  int i; 
  
  i = StringLen(Str) - 1;
  
  while (i >= 0)
  {  
    HashRes += StringGetChar(Str, i);
    i--;
  }
 
  HashRes %= 101;
  
  return(HashRes);
}
 
// Запускает выбранный в окне "Navigator" скрипт (индикатор или советник) 
void RunScript()
{
  PostMessageA(Parent(), WM_COMMAND, 33042, 0); // исполнить скрипт на текущем графике
  
  return;
}
 
// Записывает характеристика текущего торгового символа в файл
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, i = 1;
  
  if (GlobalVariableCheck(VAR_HASH))  // Запустили не первый раз...
  {
    GlobalVariableSet(VAR_HANDLE, WindowHandle(Symbol(), Period()));
 
    if (GlobalVariableGet(VAR_HASH) != Hash(Symbol())) // проверка достижения конца списка символов окна "Market Watch"
    {  
      GlobalVariableSet(VAR_HASH, Hash(Symbol()));
      WriteSymbol();
    }
    else
      GlobalVariableDel(VAR_HASH);
  }
  else  // запустили первый раз
  {
    GlobalVariableSet(VAR_HASH, -1);
    
    handle = FileOpen(FileName, FILE_WRITE); // обнулили файл с данными
    FileClose(handle);
 
    while(!IsStopped())
    {
      OpenChart(i); // открыли график очередного символа из окна "Market Watch"
      Sleep(Pause);
      
      RunScript(); // запустили на только что открытом графике текущий скрипт
      Sleep(Pause);
      
      CloseChart(GlobalVariableGet(VAR_HANDLE)); // закрыли окно графика
      Sleep(Pause);
      
      if (!GlobalVariableCheck(VAR_HASH)) // Достигнут ли конец списка символов окна "Market Watch"?
        break;
        
      i++;
    }
    
    GlobalVariableDel(VAR_HANDLE);
    i--;
    
    // записали в файл количество символов в окне "Market Watch"
    handle = FileOpen(FileName, FILE_READ|FILE_WRITE);
    FileSeek(handle, 0, SEEK_END);
 
    FileWrite(handle, "AMOUNT OF SYMBOLS = " + i);
    FileClose(handle);
  }
  
 
  return;
}
 
재미있는 장난감이지만 제대로 작동하지 않습니다. 나는 마지막 악기에 집착한다. 중지를 시도하는 동안 MT4 오류가 발생했습니다.
각 TF로 각 도구의 창을 열어 보겠습니다.
다음은 처음에 누락된 절차입니다.
 #property show_inputs
 
우와! 엄청난!
고맙습니다!
 
오, 지금 시도하겠습니다.
 
Zhunko :
재미있는 장난감이지만 제대로 작동하지 않습니다. 나는 마지막 악기에 집착한다. 중지를 시도하는 동안 MT4 오류가 발생했습니다.
각 TF로 각 도구의 창을 열어 보겠습니다.
다음은 처음에 누락된 절차입니다.
 #property show_inputs


하다
 extern int Pause = 1000 ; // Техническая пауза в миллисекундах

오류가 발생한 경우 시작하기 전에 다음 전역 변수 를 다시 제거(F3)하십시오.

 " Symbol_Hash "
" Symbol_Handle "
NB: 스크립트는 문제에 대한 가능한 솔루션에 대한 아이디어를 보여주는 것일 뿐입니다.
 
getch :

NB: 스크립트는 문제에 대한 가능한 솔루션에 대한 아이디어를 보여주는 것일 뿐입니다.

프로그래밍 경험은 인간 정신의 수완과 도구의 기능 부족을 모두 완벽하게 보여줍니다 .. 건배와 아아 ..
 
Shu :

도구 기능 부족.. 건배와 아아..
MQL5에서 우리가 그렇게 변태하도록 강요되지 않기를 바랍니다.

추신 다른 한편으로 - 프로세스가 중요합니다!
 

대본에는 왜곡이 없습니다. 약간 비표준적인 접근 방식이며 그 이상은 아닙니다.

아이디어: 스크립트는 "시장 감시" 창에서 각 거래 상품의 차트 창을 번갈아 열고 창을 닫습니다. 그가 생성한 전역 변수를 통해 스스로를 조절합니다(작업 종료 시 삭제됨). 모두.


다음 조건이 충족되는 경우 스크립트는 99%의 경우에 작동합니다.

- 수동 확인 없이 DLL을 사용할 수 있습니다.

- Pause 변수의 값은 1000 이상으로 설정됩니다(기술적인 일시 중지는 컴퓨터 및 인터넷 연결의 성능에 따라 다릅니다. 이러한 특성이 좋을수록 Pause 값을 더 적게 설정할 수 있으므로 스크립트를 줄일 수 있습니다. 시간을 실행);

- 스크립트를 시작하기 전에 전역 변수 (F3) "Symbol_Hash" 및 "Symbol_Handle"을 삭제합니다(이전에 스크립트 시작에 실패한 경우일 수 있음).


스크립트 종료 후 터미널은 실행 전과 동일하게 보입니다. 모든 기호 데이터는 Symbols.txt 파일에 있습니다.