Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

Capture MouseEvents on Chart - библиотека для MetaTrader 4

Просмотров:
2157
Рейтинг:
(16)
Опубликован:
2016.06.14 15:22
Обновлен:
2016.11.22 07:32
cfunctions.zip (856.75 KB)
\MQL4\Include\
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Автор:

Russell

Некоторые функции в cfunctions.dll ( прикрепленной ниже ) — своеобразная "обертка" для двух функций user32.dll. С их помощью, в комбинации с расширением WinUser32.mqh, вы получаете возможность прочитывать события мыши на графике. После этого становится проще прикреплять к ним какие-либо события. В примере я создал кнопку на графике, которая печатает "right away" при нажатии. Печать сообщений может занять некоторое время по двум причинам.

  • Bid изменился -> стратегия принимает статус "прервана".
  • Проверка находится на низкой скорости, частота проверки становится меньше при каждом периоде неактивности мыши.

В примере я сфокусировался главным образом на незамедлении торговой стратегии (при ценовых движениях).


Код:

//+------------------------------------------------------------------+
//|                                                    mousetest.mq4 |
//|                                Copyright © 2008, Berkers Trading |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Berkers Trading"
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh> //отрегулирован!!
#include <cfunctions_v1.0.1.mqh>

int init(){
   Print(MT4_cfunctions_version());
   Comment("+-----------------+\n",
           " | Mail Report  |\n",
           "+-----------------+");
   
   return(0);
}

int deinit(){
   return(0);
}

int start(){
   eventPoller();
}

int startStrategy(){
   Print("Run Strat");
   return(0);
}

bool eventPoller(){
   
   int iCoords[2], iCoordsPrevious[2],hWin,liKS;
   hWin = WindowHandle( Symbol(), Period()); 
   static double ldBid, ldPollTime;
   int liTC, liCompareTime;
   
   Print("Start Polling Mouse");
   while(1==1){
      RefreshRates();
      if (Bid != ldBid){
         startStrategy();
      }
      ldBid = Bid;
      liTC = TimeCurrent();
      
      if (liTC > liCompareTime){
          
         MT4_ScreenToClient(hWin, iCoords);        
         if (iCoords[0] > 0 && iCoords[0] < 170 && iCoords[1] > 0 && iCoords[1] < 50){
            liKS = GetAsyncKeyState(VK_LBUTTON);
           // Print(iCoords[0]," ",iCoords[1]," ",hWin," ",liKS);
            if (liKS != 0){
               Print("right away!");
            }
         }
         //mouse inactive
         if (iCoordsPrevious[0] == iCoords[0] && iCoordsPrevious[1] == iCoords[1]){ 
            if(ldPollTime < 10){
               ldPollTime+= 0.01;
            }
         } else {
            ldPollTime = 0;
         }
         liCompareTime = liTC+MathRound(ldPollTime);
         iCoordsPrevious[0] = iCoords[0];
         iCoordsPrevious[1] = iCoords[1];
      } else {
         Sleep(90);
      }
      Sleep(10);     
   }
}

Heads-up:

  • WinUser32 получил ряд корректировок.
  • eventPoller() не доработана детально, это просто демонстрационный пример.
  • частота опроса снижается, если мышь неактивна (это может занять до 10 секунд), прежде чем он снова становится активным.
  • c++ source + dll avaible in zip ( cfunctions.dll -> libraries )

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/8646

MiniVirtualAccount MiniVirtualAccount

Запуск советника на виртуальном счете

FiboCalc FiboCalc

Индикатор FiboCalc.

Fisher org v1 Fisher org v1

Индикатор Fisher_org_v1.

Multi Time Frame Trader Multi Time Frame Trader

Советник настроен на использование старших таймфреймов для поиска тренда и младших таймфреймов - для входа/выхода.