Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2090

 
Все молчат. Расширю вопрос

 Вопрос по реализации клика мышкой в mql4

Нужно по сигналу (сигнал есть в советнике) , кликнуть мышкой в определенном месте. 

Хотя бы пример, а дальше я сам. Если вкратце есть фунция которая дает сигнал:


 GetSign();  

//

код

//

Функция может быть меньше или больше ноля. Мне бы хотя бы в одном случае (например

int sign = GetSign();  
      if( sign > 0 )

 далее код как кликнуть мышью во вкладке браузера. Можно рандомные координаты. Я потом попытаюсь разобраться как ввести нужные). 

Вообще, кликать нужно будет на странице сайта компании торгующей бинарными опционами, 

    Чтобы упростить код - например, я включаю советник, открываю нужную страницу и мышь просто кликает в определенном месте. Не нужно чтобы она еще и сама туда двигалась.

 
Sergei Podoroga #:
Все молчат. Расширю вопрос

 Вопрос по реализации клика мышкой в mql4

Нужно по сигналу (сигнал есть в советнике) , кликнуть мышкой в определенном месте. 

Хотя бы пример, а дальше я сам. Если вкратце есть фунция которая дает сигнал:


 GetSign();  

//

код

//

Функция может быть меньше или больше ноля. Мне бы хотя бы в одном случае (например

int sign = GetSign();  
      if( sign > 0 )

 далее код как кликнуть мышью во вкладке браузера. Можно рандомные координаты. Я потом попытаюсь разобраться как ввести нужные). 

Вообще, кликать нужно будет на странице сайта компании торгующей бинарными опционами, 

    Чтобы упростить код - например, я включаю советник, открываю нужную страницу и мышь просто кликает в определенном месте. Не нужно чтобы она еще и сама туда двигалась.

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

Правда дом будет картонный, автомобиль игрушечный, а сумма будет состоять из шести нулей. Но зато будет удовлетворение и гордость за себя за то, что ты почти напугал брокерскую контору…

 
Sergei Podoroga #:
Все молчат. Расширю вопрос

 Вопрос по реализации клика мышкой в mql4

Вообще, кликать нужно будет на странице сайта компании торгующей бинарными опционами

Пишите DLL + расширение для браузера и будет Вам счастье)

 
Alexey Viktorov #:

Если получится оптимизировать по этому параметру вообще, то не надо было метять тип переменной на int. Достаточно было удалить первую букву «s»в этой строке.

Тогда осталось бы   input string MIN_DistanceList         = "14,19,18,10,18,19,16"; // на эту величину в пипсах должна уйти цена от цены открытия бара

спасибо

 

Добрый вечер! Создается впечатление, что после обновления бильда 17 декабря оператор switch работает нестабильно.

У меня он иногда без default вообще не включается. Ниже скрипт, где массив вне диапазона. Но почему?

/+------------------------------------------------------------------+
//|                                                         Pero.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

int ar[4]={1,4,3,4};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

   int Tip=OrderType();

   switch(Tip)
     {
      //      default:
      case OP_BUY:
         Alert("proba");
      case 1:
         Alert("mimino");
      case 2:
         Alert("mimo");
      //      default:
      //         Alert("no");
      case 5:
         Alert("!");
     }
  int size= ArraySize(ar); 
  Print("size = ",size);  
      switch(ar[size])
     {
     case 0:Alert("ar",ar[0]);
     case 1:Alert("ar",ar[1]);
     case 2:Alert("ar",ar[2]);
     case 3:Alert("ar",ar[3]);
     }
  }
//+------------------------------------------------------------------+
 
Galim_V #:

Добрый вечер! Создается впечатление, что после обновления бильда 17 декабря оператор switch работает нестабильно.

У меня он иногда без default вообще не включается. Ниже скрипт, где массив вне диапазона. Но почему?

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

switch(ar[size-1])
 
Sergei Podoroga #:

Вопрос по реализации клика мышкой в mql4

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

Использование WinInet.dll для обмена данными между терминалами через Интернет
Использование WinInet.dll для обмена данными между терминалами через Интернет
  • www.mql5.com
В статье рассматриваются принципы работы с Интернет посредством HTTP запросов и обмен данными между терминалами с использованием промежуточного сервера. Представлен библиотечный класс MqlNet для работы с ресурсами Интернет в среде MQL5. Мониторинг цен от разных брокеров, обмен сообщениями с другими трейдерами не выходя из терминала, поиск информации в Интернете - вот только некоторые примеры, рассматриваемые в этой статье.
 
Sergei Podoroga #:
Все молчат. Расширю вопрос

 Вопрос по реализации клика мышкой в mql4

Нужно по сигналу (сигнал есть в советнике) , кликнуть мышкой в определенном месте. 

Хотя бы пример, а дальше я сам. Если вкратце есть фунция которая дает сигнал:


 GetSign();  

//

код

//

Функция может быть меньше или больше ноля. Мне бы хотя бы в одном случае (например

int sign = GetSign();  
      if( sign > 0 )

 далее код как кликнуть мышью во вкладке браузера. Можно рандомные координаты. Я потом попытаюсь разобраться как ввести нужные). 

Вообще, кликать нужно будет на странице сайта компании торгующей бинарными опционами, 

    Чтобы упростить код - например, я включаю советник, открываю нужную страницу и мышь просто кликает в определенном месте. Не нужно чтобы она еще и сама туда двигалась.

Вот пример:

#include <WinDef.mqh>

#define SM_CXSCREEN 0
#define SM_CYSCREEN 1

#define INPUT_MOUSE     0
#define INPUT_KEYBOARD  1
#define INPUT_HARDWARE  2

#define MOUSEEVENTF_MOVE            0x0001 // mouse move
#define MOUSEEVENTF_LEFTDOWN        0x0002 // left button down
#define MOUSEEVENTF_LEFTUP          0x0004 // left button up
#define MOUSEEVENTF_RIGHTDOWN       0x0008 // right button down
#define MOUSEEVENTF_RIGHTUP         0x0010 // right button up
#define MOUSEEVENTF_MIDDLEDOWN      0x0020 // middle button down
#define MOUSEEVENTF_MIDDLEUP        0x0040 // middle button up
#define MOUSEEVENTF_XDOWN           0x0080 // x button down
#define MOUSEEVENTF_XUP             0x0100 // x button down
#define MOUSEEVENTF_VIRTUALDESK     0x4000 // map to entire virtual desktop
#define MOUSEEVENTF_ABSOLUTE        0x8000 // absolute move

struct MOUSEINPUT
{
   int    dx;
   int    dy;
   DWORD   mouseData;
   DWORD   dwFlags;
   DWORD   time;
   ULONG_PTR dwExtraInfo;
};

struct KEYBDINPUT
{
   WORD    wVk;
   WORD    wScan;
   DWORD   dwFlags;
   DWORD   time;
   ULONG_PTR dwExtraInfo;
};

struct HARDWAREINPUT
{
   DWORD   uMsg;
   WORD    wParamL;
   WORD    wParamH;
};

struct INPUT
{
   DWORD type;
   
   union __inputs
   {
      MOUSEINPUT     mi;
      KEYBDINPUT     ki;
      HARDWAREINPUT  hi;
   } inp;
};

#import "user32.dll"
   UINT SendInput( UINT nInputs, INPUT& pInputs[], int cbSize );
   int GetSystemMetrics( int nIndex );
#import

// Координаты мыши
int pX = 36;
int pY = 103;

void OnStart()
{
   double width = GetSystemMetrics( SM_CXSCREEN );
   double height = GetSystemMetrics( SM_CYSCREEN );
        
   int x = int(65535.0 / (width / pX));
   int y = int(65535.0 / (height / pY));
   
   Sleep( 1000 );
        
   INPUT mInputs[2];
   
   mInputs[0].type = INPUT_MOUSE;
   mInputs[0].inp.mi.dx = x;
   mInputs[0].inp.mi.dy = y;
   mInputs[0].inp.mi.mouseData = 0;
   mInputs[0].inp.mi.dwFlags = MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
   mInputs[0].inp.mi.time = 0;
   mInputs[0].inp.mi.dwExtraInfo = 0;
   
   mInputs[1].type = INPUT_MOUSE;
   mInputs[1].inp.mi.dx = x;
   mInputs[1].inp.mi.dy = y;
   mInputs[1].inp.mi.mouseData = 0;
   mInputs[1].inp.mi.dwFlags = MOUSEEVENTF_LEFTUP|MOUSEEVENTF_ABSOLUTE;
   mInputs[1].inp.mi.time = 0;
   mInputs[1].inp.mi.dwExtraInfo = 0;
   
   SendInput( 2, mInputs, sizeof( INPUT ) );
}
Файлы:
WinDef.mqh  2 kb
 

Уважаемые господа профессионалы подскажите почему у меня так получается?


  present_tense=TimeCurrent();  //  Настоящее время

  MqlDateTime stm;

  TimeToStruct(present_tense,stm);

Print("Год: "        +(string)stm.year);

Print("Месяц: "      +(string)stm.mon);

Print("Число: "      +(string)stm.day);

Print(StringToTime((string)stm.year+(string)stm.mon+(string)stm.day+ " 00:00:00"));

Print(stm.year+stm.mon+stm.day+StringToTime(" 00:00:00"));

Print(StringToTime((string)stm.year+(string)stm.mon+(string)stm.day+ " 00:00:00"));


В истории наблюдаю

2022.12.28 21:20:38.326 BTCUSD_H1 (BTCUSD,D1) Год: 2016

2022.12.28 21:52:41.796 2016.02.17 00:00:00   Месяц: 2

2022.12.28 21:52:41.796 2016.02.17 00:00:00   Число: 17

2022.12.28 21:52:41.796 2016.02.17 00:00:00   2017.09.07 00:00:00

2022.12.28 21:52:41.796 2016.02.17 00:00:00   2016.02.17 00:33:55

2022.12.28 21:52:41.796 2016.02.17 00:00:00   2017.09.07 00:00:00


Программу тестировал в тестере

Хочу добиться даты и времени начала суток. Должно получится  2016.02.17 00:00:00. Согласно прогону в тестере


А в терминале результаты следующие

2022.12.28 22:29:08.008 BTCUSD_H1 (BTCUSD,D1) Год: 2022

2022.12.28 22:29:08.008 BTCUSD_H1 (BTCUSD,D1) Месяц: 12

2022.12.28 22:29:08.008 BTCUSD_H1 (BTCUSD,D1) Число: 28

2022.12.28 22:29:08.008 BTCUSD_H1 (BTCUSD,D1) 2022.12.28 00:00:00

2022.12.28 22:29:08.008 BTCUSD_H1 (BTCUSD,D1) 2022.12.28 00:34:22

2022.12.28 22:29:08.008 BTCUSD_H1 (BTCUSD,D1) 2022.12.28 00:00:00

Должно получится   2022.12.28 00:00:00 . Согласно прогону в терминале


Почему такой разброс дат и времени?




 
vladeimirami #:

Простой вариант получения начала суток:

StringToTime(TimeToString(TimeCurrent(),TIME_DATE))

Гораздо более быстрый вариант:

TimeCurrent()/(3600*24)*(3600*24) // Деление целое, остаток от деления на число секунд в сутках отбрасывается. 3600*24 - для наглядности (ещё нагляднее 60*60*24)
Причина обращения: