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

 
grezky #:

В этом линке более сложный случай.
У меня задача должна быть попроще, т.к. в CSV файле будут только цифры и разделители ";" (возможно в конце каждой строки потребуется кажется '\t' ?). 

А чем FileWrite() не подходит?
 
Tretyakov Rostyslav #:
А чем FileWrite() не подходит?

Возможно подходит (есть еще FileWriteString() ), хотелось бы получить описание алгоритма в общих чертах, если кто-то сталкивался с подобным.

 
Отключил МТ4 от интернета при помощи firewall-а винды, загрузил свою базу исторических данных, запустил индикатор и решил проверить лог, а там непрерывным потоком:

1       00:01:39.730    MQL5.community: authorization failed
1       00:06:39.798    MQL5.community: authorization failed
0       00:07:56.171    HistoryCenter: synchronize 'EURUSD30'
0       00:07:56.172    HistoryCenter: synchronize 'EURUSD30'
0       00:07:56.172    HistoryCenter: synchronize 'EURUSD30'
0       00:07:56.173    HistoryCenter: synchronize 'EURUSD30'
0       00:07:56.173    HistoryCenter: synchronize 'EURUSD30'
0       00:07:56.725    HistoryCenter: synchronize 'EURUSD30'
0       00:07:56.725    HistoryCenter: synchronize 'EURUSD30'
0       00:07:56.725    HistoryCenter: synchronize 'EURUSD30'
0       00:07:56.725    HistoryCenter: synchronize 'EURUSD30'
. . . 


Похоже безостановочно.
Можно ли это как-то прекратить?
 
Artyom Trishkin #:
При чём тут обработчик событий? В перечисленном списке - функции, возвращающие результат где угодно.
Все верно, и я написал что видел их, и с вопросом про дроп на график уже разобрался.

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

А вот определить координаты указателя мышки над графиком в момент запуска скрипта через горячие клавиши, так и не понял, есть возможность или это не возможно..??!?
//+------------------------------------------------------------------+
//|                                                    тест_чарт.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
uint gCallCnt;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   gCallCnt = 0;
   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[])
  {
     ::PrintFormat("OnCalculate() call #%d", gCallCnt + 1);
   gCallCnt++;
   ChartEventMouseMoveSet(true,0);
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   ::PrintFormat("OnChartEvent() call, event %s", ::EnumToString((ENUM_CHART_EVENT)id));
   Comment(__FUNCTION__,": id=",id," lparam=",lparam," dparam=",dparam," sparam=",sparam);
//--- если это события клика мышки на графике
   if(id==CHARTEVENT_MOUSE_MOVE)
     {
      //--- подготовим переменные
      int      x     =(int)lparam;
      int      y     =(int)dparam;
      datetime dt    =0;
      double   price =0;
      int      window=0;
      //--- преобразуем координаты X и Y  в терминах дата/время
      if(ChartXYToTimePrice(0,x,y,window,dt,price))
        {
         PrintFormat("Window=%d X=%d  Y=%d  =>  Time=%s  Price=%G",window,x,y,TimeToString(dt),price);
         //--- сделаем обратное преобразование: (X,Y) => (Time,Price)
         if(ChartTimePriceToXY(0,window,dt,price,x,y))
            PrintFormat("Time=%s  Price=%G  =>  X=%d  Y=%d",TimeToString(dt),price,x,y);
         else
            Print("ChartTimePriceToXY return error code: ",GetLastError());
        }
     }
  }
//+------------------------------------------------------------------+ 
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); 
  }
 
grezky #:

Возможно подходит (есть еще FileWriteString() ), хотелось бы получить описание алгоритма в общих чертах, если кто-то сталкивался с подобным.

У меня можете взять:
 
Aliaksandr Hryshyn #:
У меня можете взять:

Спасибо!

 

Подскажите, пожалуйста, как определить цены конечных точек канала регрессии?


 
Здравствуйте! Используя функцию iHigh у меня не получается правильно взять значение следующего бара 
Код:
//--- main loop
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      //--- reset signals
      SignalsSell[bar]=0.0;
      SignalsBuy[bar]=0.0;
         if(high[bar] > high[bar+1])  //зеленая звезда
           {
            SignalsBuy[bar]=(high[bar]+ATRBuffer[bar]*3/8); //Местоположение
           }
        double high1 = iHigh(NULL,0,1); //красная звезда
         if(high[bar] > high1)
           {
            SignalsSell[bar]=(low[bar]-ATRBuffer[bar]*3/8); //Местоположение
           }

     }


И на графике получается так:

https://charts.mql5.com/38/755/audchf-h1-grand-capital-limited-2.png




Как используя функцию iHigh добиться такого же результат, как от high[bar+1]
 
Igor168 #:
double high1 = iHigh(NULL,0,1); //красная звезда
double high1 = iHigh(NULL,0,bar+1); //красная звезда
Причина обращения: