//+------------------------------------------------------------------+//| 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: È possibile conoscere il valore PPI(pixel per pollice) attraverso i parametri grafici? Ne ho davvero bisogno per il mio pannello. WinAPI non è un'opzione.
Trovato in annunci:
MQL5: Aggiunto il valore TERMINAL_SCREEN_DPI alla lista delle proprietà del terminale client ENUM_TERMINAL_INFO_INTEGER - la risoluzione dell'output dello schermo è misurata in numero di punti per pollice lineare (DPI). Conoscere questo parametro permette di dimensionare gli oggetti grafici in modo che appaiano uguali su monitor con risoluzioni diverse.
Quando si scrive un articolo, quando si cerca di inserire un'immagine, non c'è un filtro "solo immagini" - la cartella selezionata mostra assolutamente tutti i file, anche quelli che non hanno niente a che fare con le immagini.
così, quando l'indicatore è collegato al grafico - il commento non visualizza la posizione corrente del cursore del mouse,
Se cliccate sul grafico - visualizza le ultime coordinate, e inoltre non le cambia quando si sposta, cioè il parametro CHARTEVENT_MOUSE_MOVE non funziona in questo caso
Il problema può essere risolto solo nel modo seguente
quando qualsiasi Expert Advisor è collegato a un grafico - inoltre l'indicatore aggiorna il commento normalmente, cioè segue il cursore e mostra le sue coordinate.
Anche se poi rimuovi l'Expert Advisor dal grafico, l'indicatore mostra normalmente le coordinate del cursore.
La sequenza delle azioni:
1. aprire un nuovo grafico
2. Lanciare l'indicatore di prova
3. Il commento non mostra il flagCHARTEVENT_MOUSE_MOVE (id=0)
4. Ho messo un qualsiasi Expert Advisor sul grafico
5. L'indicatore inizia a visualizzare l'azioneCHARTEVENT_MOUSE_MOVE (id=10) normalmente
La home page del sito web mostra caratteri HTML nel testo. Chrome 64 Win 10 64.
Errore di compilazione
ArrayIsSeries() produce sempre false in questo script:
È possibile conoscere il valore PPI(pixel per pollice) attraverso i parametri grafici? Ne ho davvero bisogno per il mio pannello. WinAPI non è un'opzione.
Trovato in annunci:
MQL5: Aggiunto il valore TERMINAL_SCREEN_DPI alla lista delle proprietà del terminale client ENUM_TERMINAL_INFO_INTEGER - la risoluzione dell'output dello schermo è misurata in numero di punti per pollice lineare (DPI). Conoscere questo parametro permette di dimensionare gli oggetti grafici in modo che appaiano uguali su monitor con risoluzioni diverse.
Trovato nell'annuncio: TERMINAL_SCREEN_DPI
Questo aiuterà?
Per favore, aiutatemi con l'errore,
Forum sul trading, sistemi di trading automatico e test di strategie di trading
ERRORE!!! OnChartEvent nell'indicatore non funziona CHARTEVENT_MOUSE_MOVE finché non lo carichi sul grafico EA.
Vladislav Andruschenko, 2016.05.13 12:29
OnChartEvent non funziona nell'indicatore CHARTEVENT_MOUSE_MOVE, finché non lo carichi sul grafico di Expert Advisor
Il sabotaggio vero e proprio.
2016.05.13:23:49.434 Windows 7 Ultimate (PC basato su x64), IE 11.00, 8 x Intel Core i7-6700 @ 3.40GHz, RAM: 22784 / 32684 Mb, HDD: 16315 / 1498122 Mb, GMT+02:00
Quindi.
c'è un indicatore di controllo
il codice è minimo:
così, quando l'indicatore è collegato al grafico - il commento non visualizza la posizione corrente del cursore del mouse,
Se cliccate sul grafico - visualizza le ultime coordinate, e inoltre non le cambia quando si sposta, cioè il parametro CHARTEVENT_MOUSE_MOVE non funziona in questo caso
Il problema può essere risolto solo nel modo seguente
quando qualsiasi Expert Advisor è collegato a un grafico - inoltre l'indicatore aggiorna il commento normalmente, cioè segue il cursore e mostra le sue coordinate.
Anche se poi rimuovi l'Expert Advisor dal grafico, l'indicatore mostra normalmente le coordinate del cursore.
La sequenza delle azioni:
1. aprire un nuovo grafico
2. Lanciare l'indicatore di prova
3. Il commento non mostra il flagCHARTEVENT_MOUSE_MOVE (id=0)
4. Ho messo un qualsiasi Expert Advisor sul grafico
5. L'indicatore inizia a visualizzare l'azioneCHARTEVENT_MOUSE_MOVE (id=10) normalmente
OnChartEvent nell'indicatore, CHARTEVENT_MOUSE_MOVE non funziona, finché non si scarica l'Expert Advisor sul grafico
Per favore, aiutatemi con l'errore,
La prima domanda che gli sviluppatori vi faranno è CHART_EVENT_MOUSE_MOVE on?
Grazie. Qualcosa che non sapevo. ... .. .... ...