//+------------------------------------------------------------------+//| 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: É possível conhecer o valor PPI(pixels per inch) através dos parâmetros gráficos? Preciso mesmo dele para o meu painel. WinAPI não é uma opção.
Encontrado em anúncios:
MQL5: adicionado o valor TERMINAL_SCREEN_DPI à lista de propriedades do terminal cliente ENUM_TERMINAL_INFO_INTEGER - a resolução da saída do ecrã é medida em número de pontos por polegada linear (DPI). O conhecimento deste parâmetro permite dimensionar objectos gráficos de modo a que tenham o mesmo aspecto em monitores com resoluções diferentes.
Ao escrever um artigo, ao tentar inserir uma fotografia, não há filtro "apenas fotografias" - a pasta seleccionada mostra absolutamente todos os ficheiros, mesmo aqueles que não têm nada a ver com fotografias.
portanto, quando o indicador é anexado ao gráfico - o comentário não mostra a posição actual do cursor do rato,
Se clicar no gráfico - este mostra as últimas coordenadas e não as altera quando se move, ou seja, o parâmetro CHARTEVENT_MOUSE_MOVE não funciona neste caso
O problema só pode ser resolvido da seguinte forma
quando qualquer Expert Advisor é anexado a um gráfico - o indicador actualiza o comentário normalmente, ou seja, segue o cursor e mostra as suas coordenadas.
Mesmo que depois remova o Expert Advisor do gráfico - o indicador mostra normalmente as coordenadas do cursor.
A sequência de acções:
1. abrir uma nova carta
2. Atirar o indicador de teste
3. Comentário não exibe a bandeiraCHARTEVENT_MOUSE_MOVE (id=0)
4. Coloco qualquer Conselheiro Especialista no gráfico
5. O indicador começa a exibir a acçãoCHARTEVENT_MOUSE_MOVE (id=10) normalmente
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
A página inicial do sítio Web exibe caracteres HTML no texto. Crómio 64 Win 10 64.
Erro de compilação
A ArrayIsSeries() produz sempre falso neste guião:
É possível conhecer o valor PPI(pixels per inch) através dos parâmetros gráficos? Preciso mesmo dele para o meu painel. WinAPI não é uma opção.
Encontrado em anúncios:
MQL5: adicionado o valor TERMINAL_SCREEN_DPI à lista de propriedades do terminal cliente ENUM_TERMINAL_INFO_INTEGER - a resolução da saída do ecrã é medida em número de pontos por polegada linear (DPI). O conhecimento deste parâmetro permite dimensionar objectos gráficos de modo a que tenham o mesmo aspecto em monitores com resoluções diferentes.
Encontrou-o no anúncio: TERMINAL_SCREEN_DPI
Isto vai ajudar?
Por favor, ajudem com o erro,
Fórum sobre comércio, sistemas comerciais automatizados e teste de estratégias comerciais
ERROR!!! OnChartEvent no indicador não funciona CHARTEVENT_MOUSE_MOVE até que seja carregado no gráfico EA.
Vladislav Andruschenko, 2016.05.13 12:29
OnChartEvent não funciona no indicador CHARTEVENT_MOUSE_MOVE, até que o carregue no gráfico do Expert Advisor
A sabotagem propriamente dita.
2016.05.13:23:49.434 Windows 7 Ultimate (PC baseado em x64), IE 11.00, 8 x Intel Core i7-6700 @ 3.40GHz, RAM: 22784 / 32684 Mb, HDD: 16315 / 1498122 Mb, GMT+02:00
Por isso.
há um indicador de verificação
o código é mínimo:
portanto, quando o indicador é anexado ao gráfico - o comentário não mostra a posição actual do cursor do rato,
Se clicar no gráfico - este mostra as últimas coordenadas e não as altera quando se move, ou seja, o parâmetro CHARTEVENT_MOUSE_MOVE não funciona neste caso
O problema só pode ser resolvido da seguinte forma
quando qualquer Expert Advisor é anexado a um gráfico - o indicador actualiza o comentário normalmente, ou seja, segue o cursor e mostra as suas coordenadas.
Mesmo que depois remova o Expert Advisor do gráfico - o indicador mostra normalmente as coordenadas do cursor.
A sequência de acções:
1. abrir uma nova carta
2. Atirar o indicador de teste
3. Comentário não exibe a bandeiraCHARTEVENT_MOUSE_MOVE (id=0)
4. Coloco qualquer Conselheiro Especialista no gráfico
5. O indicador começa a exibir a acçãoCHARTEVENT_MOUSE_MOVE (id=10) normalmente
OnChartEvent no indicador, CHARTEVENT_MOUSE_MOVE não funciona, até que descarregue o Expert Advisor no gráfico
Por favor, ajudem com o erro,
A primeira pergunta que os criadores lhe farão é: CHART_EVENT_MOUSE_MOVE está ligado?
Obrigado. Algo que eu não sabia ... ... .. .... ...