Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 2371
- Рейтинг:
- Опубликован:
- 2016.06.14 15:22
- Обновлен:
- 2016.11.22 07:32
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Автор:
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

Индикатор Fisher_org_v1.

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