В этом линке более сложный случай. У меня задача должна быть попроще, т.к. в CSV файле будут только цифры и разделители ";" (возможно в конце каждой строки потребуется кажется '\t' ?).
Отключил МТ4 от интернета при помощи firewall-а винды, загрузил свою базу исторических данных, запустил индикатор и решил проверить лог, а там непрерывным потоком:
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_windowuint gCallCnt;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
gCallCnt = 0;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
::PrintFormat("OnCalculate() call #%d", gCallCnt + 1);
gCallCnt++;
ChartEventMouseMoveSet(true,0);
return(rates_total);
}
//+------------------------------------------------------------------+//| ChartEvent function |//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &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);
elsePrint("ChartTimePriceToXY return error code: ",GetLastError());
}
}
}
//+------------------------------------------------------------------+ bool ChartEventMouseMoveSet(constbool value,constlong chart_ID=0)
{
//--- сбросим значение ошибки ResetLastError();
//--- установим значение свойства if(!ChartSetInteger(chart_ID,CHART_EVENT_MOUSE_MOVE,0,value))
{
//--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- успешное выполнение return(true);
}
В этом линке более сложный случай.
У меня задача должна быть попроще, т.к. в CSV файле будут только цифры и разделители ";" (возможно в конце каждой строки потребуется кажется '\t' ?).
А чем FileWrite() не подходит?
Возможно подходит (есть еще FileWriteString() ), хотелось бы получить описание алгоритма в общих чертах, если кто-то сталкивался с подобным.
Похоже безостановочно.
Можно ли это как-то прекратить?
При чём тут обработчик событий? В перечисленном списке - функции, возвращающие результат где угодно.
Все верно, и я написал что видел их, и с вопросом про дроп на график уже разобрался.
Возможно подходит (есть еще FileWriteString() ), хотелось бы получить описание алгоритма в общих чертах, если кто-то сталкивался с подобным.
У меня можете взять:
Спасибо!
Подскажите, пожалуйста, как определить цены конечных точек канала регрессии?
Код:
И на графике получается так:
https://charts.mql5.com/38/755/audchf-h1-grand-capital-limited-2.png
Как используя функцию iHigh добиться такого же результат, как от high[bar+1]?
double high1 = iHigh(NULL,0,1); //красная звезда