//+------------------------------------------------------------------+//| 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: Ist es möglich, den PPI-Wert(Pixel pro Zoll) über die Grafikparameter zu erfahren? Ich brauche es wirklich für mein Panel. WinAPI ist keine Option.
Gefunden in Ankündigungen:
MQL5: TERMINAL_SCREEN_DPI Wert zur ENUM_TERMINAL_INFO_INTEGER Client-Terminal-Eigenschaftsliste hinzugefügt - die Auflösung der Bildschirmausgabe wird in der Anzahl der Punkte pro Linearzoll (DPI) gemessen. Wenn Sie diesen Parameter kennen, können Sie grafische Objekte so vergrößern, dass sie auf Monitoren mit unterschiedlichen Auflösungen gleich aussehen.
Wenn man beim Schreiben eines Artikels versucht, ein Bild einzufügen, gibt es keinen "Nur Bilder"-Filter - der ausgewählte Ordner zeigt absolut alle Dateien an, auch solche, die überhaupt nichts mit Bildern zu tun haben.
Wenn der Indikator an das Diagramm angehängt ist, zeigt der Kommentar also nicht die aktuelle Position des Mauszeigers an,
Wenn Sie auf das Diagramm klicken, werden die letzten Koordinaten angezeigt und beim Verschieben nicht verändert, d.h. der Parameter CHARTEVENT_MOUSE_MOVE funktioniert in diesem Fall nicht
Das Problem kann nur auf folgende Weise gelöst werden
wenn ein Expert Advisor an einen Chart angehängt ist - weiterhin aktualisiert der Indikator den Kommentar normal, d.h. er folgt dem Cursor und zeigt seine Koordinaten an.
Auch wenn Sie den Expert Advisor dann aus dem Chart entfernen - der Indikator zeigt normalerweise die Cursor-Koordinaten an.
Die Reihenfolge der Aktionen:
1. Öffnen Sie eine neue Karte
2. Werfen Sie den Testindikator
3. Kommentar zeigt das KennzeichenCHARTEVENT_MOUSE_MOVE nicht an(id=0)
4. Ich setze einen beliebigen Expert Advisor auf das Diagramm
5. Der Indikator beginnt normalerweise mit der Anzeige der AktionCHARTEVENT_MOUSE_MOVE (id=10)
Auf der Startseite der Website werden HTML-Zeichen im Text angezeigt. Chrome 64 Win 10 64.
Kompilierungsfehler
ArrayIsSeries() ergibt in diesem Skript immer false:
Ist es möglich, den PPI-Wert(Pixel pro Zoll) über die Grafikparameter zu erfahren? Ich brauche es wirklich für mein Panel. WinAPI ist keine Option.
Gefunden in Ankündigungen:
MQL5: TERMINAL_SCREEN_DPI Wert zur ENUM_TERMINAL_INFO_INTEGER Client-Terminal-Eigenschaftsliste hinzugefügt - die Auflösung der Bildschirmausgabe wird in der Anzahl der Punkte pro Linearzoll (DPI) gemessen. Wenn Sie diesen Parameter kennen, können Sie grafische Objekte so vergrößern, dass sie auf Monitoren mit unterschiedlichen Auflösungen gleich aussehen.
Ich habe es in der Ankündigung gefunden: TERMINAL_SCREEN_DPI
Wird das helfen?
Bitte helfen Sie bei diesem Fehler,
Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien
FEHLER!!! OnChartEvent im Indikator funktioniert nicht CHARTEVENT_MOUSE_MOVE, bis Sie es auf den EA-Chart laden.
Vladislav Andruschenko, 2016.05.13 12:29
OnChartEvent funktioniert nicht im Indikator CHARTEVENT_MOUSE_MOVE, bis Sie ihn in den Chart von Expert Advisor laden
Die eigentliche Sabotage.
2016.05.13:23:49.434 Windows 7 Ultimate (x64 basierter PC), IE 11.00, 8 x Intel Core i7-6700 @ 3.40GHz, RAM: 22784 / 32684 Mb, HDD: 16315 / 1498122 Mb, GMT+02:00
Also.
es gibt ein Prüfzeichen
der Code ist minimal:
Wenn der Indikator an das Diagramm angehängt ist, zeigt der Kommentar also nicht die aktuelle Position des Mauszeigers an,
Wenn Sie auf das Diagramm klicken, werden die letzten Koordinaten angezeigt und beim Verschieben nicht verändert, d.h. der Parameter CHARTEVENT_MOUSE_MOVE funktioniert in diesem Fall nicht
Das Problem kann nur auf folgende Weise gelöst werden
wenn ein Expert Advisor an einen Chart angehängt ist - weiterhin aktualisiert der Indikator den Kommentar normal, d.h. er folgt dem Cursor und zeigt seine Koordinaten an.
Auch wenn Sie den Expert Advisor dann aus dem Chart entfernen - der Indikator zeigt normalerweise die Cursor-Koordinaten an.
Die Reihenfolge der Aktionen:
1. Öffnen Sie eine neue Karte
2. Werfen Sie den Testindikator
3. Kommentar zeigt das KennzeichenCHARTEVENT_MOUSE_MOVE nicht an(id=0)
4. Ich setze einen beliebigen Expert Advisor auf das Diagramm
5. Der Indikator beginnt normalerweise mit der Anzeige der AktionCHARTEVENT_MOUSE_MOVE (id=10)
OnChartEvent im Indikator, CHARTEVENT_MOUSE_MOVE funktioniert nicht, bis Sie den Expert Advisor auf den Chart laden
Bitte helfen Sie bei diesem Fehler,
Die erste Frage, die Ihnen die Entwickler stellen werden, lautet: Ist CHART_EVENT_MOUSE_MOVE eingeschaltet?
Ich danke Ihnen. Etwas, das ich nicht wusste. ... .. .... ...