//+------------------------------------------------------------------+//| 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);
}
}
//+------------------------------------------------------------------+
Est-il possible de connaître le PPI(pixels par pouce) dans les paramètres du graphique ? J'en ai vraiment besoin pour mon panneau. WinAPI n'est pas une option.
Andrey Voytenko: Est-il possible de connaître la valeur PPI(pixels par pouce) par le biais des paramètres graphiques ? J'en ai vraiment besoin pour mon panneau. WinAPI n'est pas une option.
Trouvé dans les annonces :
MQL5 : Ajout de la valeur TERMINAL_SCREEN_DPI à la liste des propriétés du terminal client ENUM_TERMINAL_INFO_INTEGER - la résolution de la sortie écran est mesurée en nombre de points par pouce linéaire (DPI). La connaissance de ce paramètre vous permet de dimensionner les objets graphiques de manière à ce qu'ils aient le même aspect sur des moniteurs de résolutions différentes.
Lors de la rédaction d'un article, lorsqu'on essaie d'insérer une image, il n'y a pas de filtre "images uniquement" - le dossier sélectionné affiche absolument tous les fichiers, même ceux qui n'ont rien à voir avec des images.
ainsi, lorsque l'indicateur est attaché au graphique - le commentaire n'affiche pas la position actuelle du curseur de la souris,
Si vous cliquez sur le graphique, il affiche les dernières coordonnées et ne les modifie pas en cas de déplacement, c'est-à-dire que le paramètre CHARTEVENT_MOUSE_MOVE ne fonctionne pas dans ce cas.
Le problème ne peut être résolu que de la manière suivante
lorsqu'un Expert Advisor est attaché à un graphique - l'indicateur met ensuite à jour le commentaire normalement, c'est-à-dire qu'il suit le curseur et affiche ses coordonnées.
Même si vous retirez ensuite le conseiller expert du graphique, l'indicateur affiche normalement les coordonnées du curseur.
La séquence d'actions :
1. ouvrir un nouveau graphique
2. Lancez l'indicateur de test
3. Le commentaire n'affiche pas l'indicateurCHARTEVENT_MOUSE_MOVE (id=0)
4. Je place n'importe quel conseiller expert sur le graphique
5. L'indicateur commence à afficher l'actionCHARTEVENT_MOUSE_MOVE (id=10) normalement.
Vladislav Andruschenko: OnChartEvent dans l'indicateur, CHARTEVENT_MOUSE_MOVE ne fonctionne pas, jusqu'à ce que vous téléchargiez le conseiller expert sur le graphique.
Veuillez m'aider à résoudre cette erreur,
La première question que les développeurs vous poseront est la suivante : CHART_EVENT_MOUSE_MOVE est-il activé ?
Après la dernière mise à jour du terminal, les ordres SELL STOP et BUY STOP dans le testeur sont exécutés aux prix d'achat et de vente, mais pas au prix de passage de l'ordre - ceci est seulement dans les prix d'ouverture en mode test.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Erreur de compilation
ArrayIsSeries() produit toujours false dans ce script :
Est-il possible de connaître la valeur PPI(pixels par pouce) par le biais des paramètres graphiques ? J'en ai vraiment besoin pour mon panneau. WinAPI n'est pas une option.
Trouvé dans les annonces :
MQL5 : Ajout de la valeur TERMINAL_SCREEN_DPI à la liste des propriétés du terminal client ENUM_TERMINAL_INFO_INTEGER - la résolution de la sortie écran est mesurée en nombre de points par pouce linéaire (DPI). La connaissance de ce paramètre vous permet de dimensionner les objets graphiques de manière à ce qu'ils aient le même aspect sur des moniteurs de résolutions différentes.
Trouvé dans l'annonce : TERMINAL_SCREEN_DPI
Est-ce que ça va aider ?
Veuillez m'aider à résoudre cette erreur,
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading
ERREUR ! !! OnChartEvent dans l'indicateur ne fonctionne pas CHARTEVENT_MOUSE_MOVE jusqu'à ce que vous le chargiez sur le graphique EA.
Vladislav Andruschenko, 2016.05.13 12:29
OnChartEvent ne fonctionne pas dans l'indicateur CHARTEVENT_MOUSE_MOVE, jusqu'à ce que vous le chargiez sur le graphique d'Expert Advisor.
Le vrai sabotage.
2016.05.13:23:49.434 Windows 7 Ultimate (PC basé sur x64), IE 11.00, 8 x Intel Core i7-6700 @ 3.40GHz, RAM : 22784 / 32684 Mb, HDD : 16315 / 1498122 Mb, GMT+02:00
Donc.
il y a un indicateur de contrôle
le code est minimal :
ainsi, lorsque l'indicateur est attaché au graphique - le commentaire n'affiche pas la position actuelle du curseur de la souris,
Si vous cliquez sur le graphique, il affiche les dernières coordonnées et ne les modifie pas en cas de déplacement, c'est-à-dire que le paramètre CHARTEVENT_MOUSE_MOVE ne fonctionne pas dans ce cas.
Le problème ne peut être résolu que de la manière suivante
lorsqu'un Expert Advisor est attaché à un graphique - l'indicateur met ensuite à jour le commentaire normalement, c'est-à-dire qu'il suit le curseur et affiche ses coordonnées.
Même si vous retirez ensuite le conseiller expert du graphique, l'indicateur affiche normalement les coordonnées du curseur.
La séquence d'actions :
1. ouvrir un nouveau graphique
2. Lancez l'indicateur de test
3. Le commentaire n'affiche pas l'indicateurCHARTEVENT_MOUSE_MOVE (id=0)
4. Je place n'importe quel conseiller expert sur le graphique
5. L'indicateur commence à afficher l'actionCHARTEVENT_MOUSE_MOVE (id=10) normalement.
OnChartEvent dans l'indicateur, CHARTEVENT_MOUSE_MOVE ne fonctionne pas, jusqu'à ce que vous téléchargiez le conseiller expert sur le graphique.
Veuillez m'aider à résoudre cette erreur,
La première question que les développeurs vous poseront est la suivante : CHART_EVENT_MOUSE_MOVE est-il activé ?
Merci. Quelque chose que je ne savais pas. . . .. .... ...
Après la dernière mise à jour du terminal, les ordres SELL STOP et BUY STOP dans le testeur sont exécutés aux prix d'achat et de vente, mais pas au prix de passage de l'ordre - ceci est seulement dans les prix d'ouverture en mode test.