//+------------------------------------------------------------------+//| TestCopy.mq4 |//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |//| https://login.mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright"Copyright 2016, Artem A. Trishkin, Skype artmedia70"#property link"https://login.mql5.com/ru/users/artmedia70"#property version"1.00"#property strict#property script_show_inputsenum enumYN
{
enYes=1, // Да
enNo=0, // Нет
};
//--- input parametersinputint Search_Period=10; // Количество копируемых свечейint searchPeriod=(Search_Period<1)?1:Search_Period;
inputint Delta=2; // Количество пунктов допускаint delta=(Delta<0)?0:Delta;
input enumYN AsSeries=enYes; // Массив array как таймсерияMqlRates array[]; // Массив структур для копирования Open, High, Low, Close, Timestruct DataCandle // Структура для хранения всех совпадений
{
int number_matched; // Количество совпаденийMqlRates reference_candle; // Данные эталонной свечиMqlRates matched_candles[]; // Массив свечей, совпадающих с эталонной по нужному критерию
};
DataCandle dataCandle[]; // Массив структур данных свечей и их совпадений//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---int copy_bars=(int)fmin(Search_Period,Bars(Symbol(),Period())); // количество копируемых свечейint copied=CopyRates(Symbol(),PERIOD_CURRENT,1,copy_bars,array); // копируем данныеif(copied>0) { // если скопировалиArraySetAsSeries(array,AsSeries); // задаём массив как таймсерию или нетArrayResize(dataCandle,copied); // задаём размер структуры равным числу скопированных данныхZeroMemory(dataCandle); // Обнуляем данные в структуре//--- основной цикл по "эталонным" свечам в массиве array. Их параметры будем искать в доп. циклеfor(int i=0; i<copy_bars-1; i++) { // цикл по скопированным данным от начала до "на один меньше размера массива"
dataCandle[i].reference_candle.high=array[i].high; // ищем этот high
dataCandle[i].reference_candle.low=array[i].low; // запомнили low для сравнения
dataCandle[i].reference_candle.time=array[i].time; // запомнили time для вывода в журнал//--- поиск совпадений с эталонной свечой, индексируемой индексом основного цикла iint size=0; // размер массива совпадающих свечейArrayResize(dataCandle[i].matched_candles,size); // Размер массива совпадений в ноль
dataCandle[i].number_matched=size; // Инициализируем количество совпадений нулём//--- теперь ищем совпадения по high свечей в цикле j с high эталонной свечи с индексом ifor(int j=0; j<copy_bars; j++) { // в цикле от i+1 до copy_barsif(j==i) continue; // пропустим свечу "саму себя"//--- если совпадают high эталонной свечи (i) и свечи с индексом j (с допуском на величину Point)if(NormalizeDouble(delta*Point()-fabs(array[i].high-array[j].high),Digits())>=0) {
size++;
ArrayResize(dataCandle[i].matched_candles,size); // увеличим размер массива совпадающих свечей
dataCandle[i].number_matched=size; // запишем количество совпадений
dataCandle[i].matched_candles[size-1].high=array[j].high; // запишем в массив high совпадающей свечи
dataCandle[i].matched_candles[size-1].low=array[j].low; // запишем в массив low совпадающей свечи
dataCandle[i].matched_candles[size-1].time=array[j].time; // запишем в массив время совпадающей свечи//Print("Время свечи ",i," :",TimeToString(dataCandle[i].reference_candle.time=array[i].time),", high=",DoubleToString(dataCandle[i].reference_candle.high=array[i].high,Digits()),". Совпадение со свечой ",TimeToString(dataCandle[i].matched_candles[size-1].time=array[j].time),", её high ",DoubleToString(dataCandle[i].matched_candles[size-1].high=array[j].high,Digits()),". Совпадений: ",(string)dataCandle[i].number_matched);
}
}
}
}
//--- Посмотрим чего понаписали в массивыAlert("Array is series: ",ArrayIsSeries(array),
"\ntime array[0]: ",TimeToString(array[0].time,TIME_DATE|TIME_MINUTES),
"\ntime array[",string(searchPeriod-1),"]: ",TimeToString(array[ArraySize(array)-1].time,TIME_DATE|TIME_MINUTES));
for(int i=0; i<ArraySize(dataCandle)-1; i++) {
string refs_txt="";
string matched_txt="";
refs_txt="Свеча "+IntegerToString(i,2,'0')+": время "+TimeToString(dataCandle[i].reference_candle.time)+", high: "+DoubleToString(dataCandle[i].reference_candle.high,Digits())+" имеет совпадений: "+(string)dataCandle[i].number_matched+" шт. ";
if(dataCandle[i].number_matched>0) {
for(int j=0; j<ArraySize(dataCandle[i].matched_candles); j++) {
matched_txt="Совпадение "+IntegerToString(j+1)+": "+TimeToString(dataCandle[i].matched_candles[j].time)+", high: "+DoubleToString(dataCandle[i].matched_candles[j].high,Digits());
}
}
Print(refs_txt,matched_txt);
}
}
//+------------------------------------------------------------------+
Andrey Voytenko: ¿Es posible conocer el valor de PPI(píxeles por pulgada) a través de los parámetros gráficos? Realmente lo necesito para mi panel. WinAPI no es una opción.
Encontrado en anuncios:
MQL5: Añadido el valor TERMINAL_SCREEN_DPI a la lista de propiedades del terminal de cliente ENUM_TERMINAL_INFO_INTEGER - la resolución de la salida de pantalla se mide en número de puntos por pulgada lineal (DPI). Conocer este parámetro permite dimensionar los objetos gráficos para que se vean igual en monitores con diferentes resoluciones.
Al escribir un artículo, cuando se intenta insertar una imagen, no hay un filtro de "sólo imágenes": la carpeta seleccionada muestra absolutamente todos los archivos, incluso los que no tienen nada que ver con las imágenes.
por lo que, cuando el indicador está unido al gráfico, el comentario no muestra la posición actual del cursor del ratón,
Si hace clic en el gráfico - muestra las últimas coordenadas, y además no las cambia al moverse, es decir, el parámetro CHARTEVENT_MOUSE_MOVE no funciona en este caso
El problema sólo puede resolverse de la siguiente manera
cuando cualquier Asesor Experto se adjunta a un gráfico - además el indicador actualiza el comentario normalmente, es decir, sigue el cursor y muestra sus coordenadas.
Incluso si luego quita el Asesor Experto del gráfico, el indicador normalmente muestra las coordenadas del cursor.
La secuencia de acciones:
1. abrir un nuevo gráfico
2. Lanza el indicador de prueba
3. El comentario no muestra la banderaCHARTEVENT_MOUSE_MOVE (id=0)
4. Pongo cualquier Asesor Experto en el gráfico
5. El indicador comienza a mostrar la acciónCHARTEVENT_MOUSE_MOVE (id=10) normalmente
La página de inicio del sitio web muestra caracteres HTML en el texto. Chrome 64 Win 10 64.
Error de compilación
ArrayIsSeries() siempre produce false en este script:
¿Es posible conocer el valor de PPI(píxeles por pulgada) a través de los parámetros gráficos? Realmente lo necesito para mi panel. WinAPI no es una opción.
Encontrado en anuncios:
MQL5: Añadido el valor TERMINAL_SCREEN_DPI a la lista de propiedades del terminal de cliente ENUM_TERMINAL_INFO_INTEGER - la resolución de la salida de pantalla se mide en número de puntos por pulgada lineal (DPI). Conocer este parámetro permite dimensionar los objetos gráficos para que se vean igual en monitores con diferentes resoluciones.
Lo encontré en el anuncio: TERMINAL_SCREEN_DPI
¿Ayudará esto?
Por favor, ayuda con el error,
Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio
¡¡¡ERROR!!! OnChartEvent en el indicador no funciona CHARTEVENT_MOUSE_MOVE hasta que se carga en el gráfico del EA.
Vladislav Andruschenko, 2016.05.13 12:29
OnChartEvent no funciona en el indicador CHARTEVENT_MOUSE_MOVE, hasta que se carga en el gráfico del Asesor Experto
El sabotaje real.
2016.05.13:23:49.434 Windows 7 Ultimate (PC basado en x64), IE 11.00, 8 x Intel Core i7-6700 @ 3.40GHz, RAM: 22784 / 32684 Mb, HDD: 16315 / 1498122 Mb, GMT+02:00
Así que.
hay un indicador de verificación
el código es mínimo:
por lo que, cuando el indicador está unido al gráfico, el comentario no muestra la posición actual del cursor del ratón,
Si hace clic en el gráfico - muestra las últimas coordenadas, y además no las cambia al moverse, es decir, el parámetro CHARTEVENT_MOUSE_MOVE no funciona en este caso
El problema sólo puede resolverse de la siguiente manera
cuando cualquier Asesor Experto se adjunta a un gráfico - además el indicador actualiza el comentario normalmente, es decir, sigue el cursor y muestra sus coordenadas.
Incluso si luego quita el Asesor Experto del gráfico, el indicador normalmente muestra las coordenadas del cursor.
La secuencia de acciones:
1. abrir un nuevo gráfico
2. Lanza el indicador de prueba
3. El comentario no muestra la banderaCHARTEVENT_MOUSE_MOVE (id=0)
4. Pongo cualquier Asesor Experto en el gráfico
5. El indicador comienza a mostrar la acciónCHARTEVENT_MOUSE_MOVE (id=10) normalmente
OnChartEvent en el indicador, CHARTEVENT_MOUSE_MOVE no funciona, hasta que descargue el Asesor Experto en el gráfico
Por favor, ayuda con el error,
La primera pregunta que le harán los desarrolladores es si CHART_EVENT_MOUSE_MOVE está activado.
Gracias. Algo que no sabía. ... .. .... ...