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

 
Владимир Казаков #:

вопрос остался для меня не решенным, можно ли при запуске скрипта горячей клавишей узнать на какой цене графика это произошло?!

Перетаскивая скрипт мышью -- можно выбрать нужную цену. Цен много, какую выберите, та и будет.

 
Galim_V #:

Замените 

на

и запустите свой скрипт горячей клавишей.

у СКРИПТА нет обработчика OnChartEvent, так что увы и ах...;-)

Скрипт без посторонней помощи может получить X,Y куда брошен - только если действительно "брошен" drag-and-drop. Семейка функций XxxOnDropped() отдаст окно, координаты, цену, время.

Если скрипт запускается по горячей кнопке, или двойным кликом то нет. Координаты не определены.

Или использовать DLL. Для себя - конечно можно, хотя и не просто, довольно много кода и внезапных проблем (мышь может быть не в том окне где ожидалось ожидалось, окно может быть перекрыто, экранные координаты надо переводить в оконные с учётом всяких рамок и декораций)

Для маркета конечно нет

 
Владимир Казаков #:
Все верно, и я написал что видел их, и с вопросом про дроп на график уже разобрался.

А вот определить координаты указателя мышки над графиком в момент запуска скрипта через горячие клавиши, так и не понял, есть возможность или это не возможно..??!?

Запустите индикатор, затем ваш скрипт

//+------------------------------------------------------------------+
//|                                                      test(0).mq4 |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
double price_MOUSE=0;
int X_MOUSE=0,
    Y_MOUSE=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    ChartEventMouseMoveSet(true,0);  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_MOUSE_MOVE)
   {
      int      x     =(int)lparam;
      int      y     =(int)dparam;
      double   price =0;
      datetime dt    =0;
      int      window=0;
     if(ChartXYToTimePrice(0,x,y,window,dt,price))
      {
        price_MOUSE=NormalizeDouble(price,Digits);
        X_MOUSE=(int)lparam;
        Y_MOUSE=(int)dparam;
      }
   }
   if(id==CHARTEVENT_KEYDOWN)
   Print("price_MOUSE = ",price_MOUSE," X_MOUSE = ",X_MOUSE," Y_MOUSE = ",Y_MOUSE);
   
  }
//+------------------------------------------------------------------+ 
bool ChartEventMouseMoveSet(const bool value,const long chart_ID=0) 
  { 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- установим значение свойства 
   if(!ChartSetInteger(chart_ID,CHART_EVENT_MOUSE_MOVE,0,value)) 
     { 
      //--- выведем сообщение об ошибке в журнал "Эксперты" 
      Print(__FUNCTION__+", Error Code = ",GetLastError()); 
      return(false); 
     } 
//--- успешное выполнение 
   return(true); 
  }
 
Здравствуйте у меня вопрос мт4 после установки и запуска закинул туда советника и чтоб он отображался перегружаю терминал но советника нет в списке и он удаляеться в папке, подскажите в чем проблема и как ее рещить
 
B1l2E3k4 #:
Здравствуйте у меня вопрос мт4 после установки и запуска закинул туда советника и чтоб он отображался перегружаю терминал но советника нет в списке и он удаляеться в папке, подскажите в чем проблема и как ее рещить

1. Что при этом пишется в журналах терминала?

2. А сколько уже есть советников в папках? Там, насколько помню, есть ограничения на их количество.

 

Всем доброго времени суток!

Вопрос по тестеру МТ4 . NormalizeDouble() округляет число до указанной точности. Если нужно округлить число до 4 знака и пятый знак от 0 до 4 , то функция округлит число в меньшую сторону, а если пятый знак от 5 до 9, то округлит в большую сторону.
ВОПРОС Как сделать так что бы округление числа до 4 знака проходило  всегда только в меньшую сторону. Если пятый знак от 1 до 9 то число округляется только в меньшую сторону

После округления
1.12340  
1.12341 1.12340
1.12342 1.12340
1.12343 1.12340
1.12344 1.12340
1.12345 1.12340
1.12346 1.12340
1.12347 1.12340
1.12348 1.12340
1.12349 1.12340
1.12350

Математические функции округляют число только до ближайшего целого. Мне это не подходит.

Спасибо за помощь

 
ANDREY #:

Всем доброго времени суток!

Вопрос по тестеру МТ4 . NormalizeDouble() округляет число до указанной точности. Если нужно округлить число до 4 знака и пятый знак от 0 до 4 , то функция округлит число в меньшую сторону, а если пятый знак от 5 до 9, то округлит в большую сторону.
ВОПРОС Как сделать так что бы округление числа до 4 знака проходило  всегда только в меньшую сторону. Если пятый знак от 1 до 9 то число округляется только в меньшую сторону


После округления
1.12340  
1.12341 1.12340
1.12342 1.12340
1.12343 1.12340
1.12344 1.12340
1.12345 1.12340
1.12346 1.12340
1.12347 1.12340
1.12348 1.12340
1.12349 1.12340
1.12350

Математические функции округляют число только до ближайшего целого. Мне это не подходит.

Спасибо за помощь

Я делаю так

NormalizeDouble(iHigh(_Symbol,_Period,i+1)+5*_Point,_Digits-1);  // всегда в большую
NormalizeDouble(iLow(_Symbol,_Period,i+1)-5*_Point,_Digits-1);   // всегда в меньшую
 
ANDREY #:

Всем доброго времени суток!

Вопрос по тестеру МТ4 . NormalizeDouble() округляет число до указанной точности. Если нужно округлить число до 4 знака и пятый знак от 0 до 4 , то функция округлит число в меньшую сторону, а если пятый знак от 5 до 9, то округлит в большую сторону.
ВОПРОС Как сделать так что бы округление числа до 4 знака проходило  всегда только в меньшую сторону. Если пятый знак от 1 до 9 то число округляется только в меньшую сторону

Разделить на 0.0001

Используйте MathFloor().

Умножить на 0.0001

 
Putnik #:

Разделить на 0.0001

Используйте MathFloor().

Умножить на 0.0001

Спасибо

 
Artyom Trishkin #:



Как обратиться к MetaQuotes чтобы исправили поведение МТ4?
Отключенный от сервера файрволлом он с некоторого момента начинает бомбить лог файл сообщениями типа:

                    . . . 
0       01:53:01.610    HistoryCenter: synchronize 'EURUSD5'
0       01:53:04.033    HistoryCenter: synchronize 'EURUSD5'
0       01:53:06.993    HistoryCenter: synchronize 'EURUSD5'
0       01:53:09.412    HistoryCenter: synchronize 'EURUSD5'
0       01:53:12.303    HistoryCenter: synchronize 'EURUSD5'
0       01:53:14.708    HistoryCenter: synchronize 'EURUSD5'
0       01:53:17.627    HistoryCenter: synchronize 'EURUSD5'
0       01:53:20.009    HistoryCenter: synchronize 'EURUSD5'
0       01:53:22.963    HistoryCenter: synchronize 'EURUSD5'
0       01:53:25.357    HistoryCenter: synchronize 'EURUSD5'
0       01:53:28.308    HistoryCenter: synchronize 'EURUSD5'
0       01:53:30.707    HistoryCenter: synchronize 'EURUSD5'
0       01:53:33.680    HistoryCenter: synchronize 'EURUSD5'
0       01:53:36.101    HistoryCenter: synchronize 'EURUSD5'
0       01:53:39.069    HistoryCenter: synchronize 'EURUSD5'
0       01:53:41.507    HistoryCenter: synchronize 'EURUSD5'
0       01:53:44.473    HistoryCenter: synchronize 'EURUSD5'
0       01:53:46.889    HistoryCenter: synchronize 'EURUSD5'
0       01:53:49.851    HistoryCenter: synchronize 'EURUSD5'
0       01:53:52.272    HistoryCenter: synchronize 'EURUSD5'
0       01:53:55.209    HistoryCenter: synchronize 'EURUSD5'
0       01:53:57.618    HistoryCenter: synchronize 'EURUSD5'
0       01:54:00.572    HistoryCenter: synchronize 'EURUSD5'
0       01:54:02.976    HistoryCenter: synchronize 'EURUSD5'
0       01:54:05.959    HistoryCenter: synchronize 'EURUSD5'
0       01:54:08.368    HistoryCenter: synchronize 'EURUSD5'
0       01:54:11.306    HistoryCenter: synchronize 'EURUSD5'
0       01:54:13.746    HistoryCenter: synchronize 'EURUSD5'
0                . . . 


Невозможно оставить МТ4 включенным, он так забьет все свободное место на диске..