Понимать надо не меня, а документацию. О сортировке я предположил на основании списка ордеров или позиций. И ещё в одной из тем Slava говорил, что достаточно, просто скрыть объект и вновь отобразить, чтобы он был выше всех остальных и первым получил событие «клик крыски». Если ошибся, извиняйте. Разберитесь как список сортируется и расскажите всем. Я тоже поменяю своё мнение.
После долгих мучений и экспериментов на ум приходит что в MQL5 есть баг с очерёдностью объектов в списке объектов. Потому как попробовав этот код в MQL4 без особой уже надежды на корректную обработку, обнаружил что 4 созданых по порядку фибо уровня, имеют правильную нумерацию в списке объектов 0.1.2.3. первый ==0, второй ==1, итд., в следствии чего код отработал их с заданой логикой. В MQL5 же созданные один за другим 4 фибо, имеют нумерацию с потолка, и только если им изменить имена они выстраиваются в порядки очерёдности смены имён. Как быть то??? Проверьте кто у себя, может у меня терминал криво встаёт, хотя уже на 3 компах пробовал(((
//+------------------------------------------------------------------+//| F.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| Fibo_Massiv.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+string NameFiboUp[15]; // Объявление массиваstring NameFiboDown[15]; // Объявление массиваstring NameFibo[9]; // Объявление массива//+------------------------------------------------------------------+intOnInit()
{
//---
NameFiboUp[1]="FiboUp1 ";
NameFiboDown[1]="FiboDown1 ";
NameFiboUp[2]="FiboUp2 ";
NameFiboDown[2]="FiboDown2";
NameFiboUp[3]="FiboUp3";
NameFiboDown[3]="FiboDown3 ";
NameFiboUp[4]="FiboUp4 ";
NameFiboDown[4]="FiboDown4 ";
NameFiboUp[5]="FiboUp5";
NameFiboDown[5]="FiboDown5 ";
NameFiboUp[6]="FiboUp6 ";
NameFiboDown[6]="FiboDown6 ";
NameFiboUp[7]="FiboUp7 ";
NameFiboDown[7]="FiboDown7 ";
NameFiboUp[8]="FiboUp8 ";
NameFiboDown[8]="FiboDown8 ";
NameFiboUp[9]="FiboUp9 ";
NameFiboDown[9]="FiboDown9 ";
NameFiboUp[10]="FiboUp10 ";
NameFiboDown[10]="FiboDown10";
NameFiboUp[11]="FiboUp11 ";
NameFiboDown[11]="FiboDown11 ";
NameFiboUp[12]="FiboUp12 ";
NameFiboDown[12]="FiboDown12 ";
NameFiboUp[13]="FiboUp13 ";
NameFiboDown[13]="FiboDown13";
NameFiboUp[14]="FiboUp14 ";
NameFiboDown[14]= "FiboDown14";
//---------------------------------------------
NameFibo[1]="M1";
NameFibo[2]="M5";
NameFibo[3]="M15";
NameFibo[4]="H1";
NameFibo[5]="H4";
NameFibo[6]="Da";
NameFibo[7]="We";
NameFibo[8]="Mo";
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
int UP=1;
int Down=1;
string nameUP = "FiboUp";
string nameDown = "FiboDown";
double FiboDown[4][10],FiboUp[4][10]; // 2x мерный массив// Alert("ArraySize(FiboDown)= ", ArraySize(FiboDown));int Fibo_Koll = ObjectsTotal(0,0,OBJ_FIBO); //Запрос колличества объектов Fibo//_________________________________________________________if(Fibo_Koll==0) //Если нет не одного фибо выход //return; ////_________________________________________________________//int Koll[]; //Индексация и запись в массив по порядку появления фибо в окне инструментовint Tip[]; //Запись типа Fibo в массив по порядку появления фибо в окне инструментовArrayResize(Koll,Fibo_Koll); // Устанавливает новый размер в первом измерении массива Koll []ArrayResize(Tip,Fibo_Koll); // Устанавливает новый размер в первом измерении массива Tip []for(int i=0; i < Fibo_Koll; i++)
{
string n=ObjectName(0,0,0,OBJ_FIBO);
//--------------------------------------------------------//----------------------------------------------------------------------------------------double Fibo_Level_0= ObjectGetDouble(
0, // идентификатор графика
n, // имя объектаOBJPROP_PRICE, // идентификатор свойства0// модификатор свойства
);
double Fibo_Level_1= ObjectGetDouble(
0, // идентификатор графика
n, // имя объектаOBJPROP_PRICE, // идентификатор свойства1// модификатор свойства
);
//------------------------------------------------------------------------------------------------------if(Fibo_Level_0>Fibo_Level_1)
{
//вызов функции расчёта уровня 78.6double Fibo_78_Up = Function_Up(Fibo_Level_0, Fibo_Level_1);
//Изменение имени объекта/* bool l = StringSetLength( //Устанавливает для строки указанную длину в символах 2
n, // строка
2 // новая длина строки
);
//-----------------------------------------------------------
int N = 1;
string q;
for(int e = 1; N != 0; e++) // пока N не == 0, гоняем функцию StringCompare. сравнивая обрезанную переменную(StringSetLength) с массивом NameFibo[]
{
N= StringCompare(
n, // первая сравниваемая строка
NameFibo[e], // вторая сравниваемая строка
true // режим учета регистра букв при сравнении
);
q= NameFibo[e];
}
n= q+NameFiboUp[1];*///--------------------------------------------------------------------
FiboUp[UP][1]=1; // Тип обектов 1 == FiboUp
FiboUp[UP][2]=UP; // Нумерация обектов FiboUp по типу
FiboUp[UP][3]=Fibo_78_Up; // 78.6%
FiboUp[UP][4]=0; // 61.8%
FiboUp[UP][5]=0; // 50%//----------------------------------------------------------------------------------------------------------bool F =ObjectSetString(0,n,OBJPROP_NAME,NameFiboUp[UP]);
UP++;
}
//----------------------------------------------------------------------------------else
{
//вызов функции расчёта уровня 78.6double Fibo_78_Down = Function_Down(Fibo_Level_0, Fibo_Level_1);
//Изменение имени объекта/* bool l = StringSetLength( //Устанавливает для строки указанную длину в символах 2
n, // строка
2 // новая длина строки
);
//-----------------------------------------------------------
int N = 1;
string q;
for(int e = 1; N != 0; e++) // пока N не == 0, гоняем функцию StringCompare. сравнивая обрезанную переменную(StringSetLength) с массивом NameFibo[]
{
N= StringCompare(
n, // первая сравниваемая строка
NameFibo[e], // вторая сравниваемая строка
true // режим учета регистра букв при сравнении
);
q= NameFibo[e];
}
n= q+NameFiboUp[1];*///-------------------------------------------------------------------
FiboDown[Down][1]=2; // // Тип обектов 2 == FiboDown
FiboDown[Down][2]=Down; // Нумерация обектов по типу
FiboDown[Down][3]=Fibo_78_Down; // 78.6%
FiboDown[Down][4]=0; // 61.8%
FiboDown[Down][5]=0; // 50%//------------------------------------------------------------------//Изменение имени объектаbool F =ObjectSetString(0,n,OBJPROP_NAME,NameFiboDown[Down]);
Down++;
}
}
//+------------------------------------------------------------------+ArrayPrint(
FiboUp, // выводимый массив2, // количество десятичных знаков после запятойNULL, // разделитель между значениями полей структуры0, // индекс первого выводимого элементаWHOLE_ARRAY, // количество выводимых элементовARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
);
ArrayPrint(
FiboDown, // выводимый массив2, // количество десятичных знаков после запятойNULL, // разделитель между значениями полей структуры0, // индекс первого выводимого элементаWHOLE_ARRAY, // количество выводимых элементовARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
);
}
// for(int i=0; i<ArraySize(Koll); i++)// printf("Koll[%d] = %d",i,Koll[i]);//------------------------------------------------------------------------------------------------------//+------------------------------------------------------------------+//+------------------------------------------------------------------+double Function_Up(double a, double b) // имя функции и список параметров
{
double Sum_100 = a - b; //Вычисляем 100% В пунктах от точек построения фибоdouble Sum_78 = Sum_100 * 78.6 / 100; //Вычисляем 78.6% В пунктахreturn (Sum_78 + b); // Вычисляем 78.6% в цене инструмента
}
//+------------------------------------------------------------------+double Function_Down(double a, double b) // имя функции и список параметров
{
double Sum_100 = b - a ; //Вычисляем 100% В пунктах от точек построения фибоdouble Sum_78 = Sum_100 * 21.4 / 100; //Вычисляем 78.6% В пунктахreturn (Sum_78 + a); // Вычисляем 78.6% в цене инструмента
}
//+------------------------------------------------------------------+
Приветствую! Тут немного странная ситуация, по одной из подписок на сигналы сделки копируются с задержкой 2-5 мин., а закрываются четко синхронно, как надо. Счет на VPS. На других счетах все четко. Решил проверить, может проблема в хостинге, открыл еще терминал на компе, соответственно открываются мои 2 одинаковые сделки на одну сделку провайдера(сигнала), одна с VPS, другая с терминала в одно время с одинаковой задержкой, значит VPS работает нормально. В итоге сигнал в прибыли, а на моем терминале сделки закрываются с убытком или с небольшим профитом. Сигнал копируется с брокера Global Premier на Alpari. Подскажите, пожалуйста, как решить вопрос?
После долгих мучений и экспериментов на ум приходит что в MQL5 есть баг с очерёдностью объектов в списке объектов.
Да, результат ObjectName имеет явное противоречие с Документацией - там сказано, что параметр
int pos, // номер в списке объектов
Однако Список объектов в Терминале и результат, полученный через MQL, имеют разный порядок, что видно в частности при ручном создании объектов: список объектов в Терминале - формируется в порядке их создания, а результат, полученный через MQL - в алфавитном порядке
Помимо прочего очевидно, что тратится лишнее время на сортировку по имени... а зачем? Если нужно пользователь и сам в состоянии отсортировать
Да, результат ObjectName имеет явное противоречие с Документацией - там сказано, что параметр
Однако Список объектов в Терминале и результат, полученный через MQL, имеют разный порядок, что видно в частности при ручном создании объектов: список объектов в Терминале - формируется в порядке их создания, а результат, полученный через MQL - в алфавитном порядке
Помимо прочего очевидно, что тратится лишнее время на сортировку по имени... а зачем? Если нужно пользователь и сам в состоянии отсортировать
И самый прикол в том, что в МТ4 всё это работает согласно документации))) Не в курсе как быстро фиксят найденые баги?
Вот например я сообщал 3 года (!) назад, что не работает заливка прямоугольника... и до сих пор - не работает!
Зачем так однобоко? Баги фиксят в соответствии с внутренними приоритетами. Часто бывает, что кто-то повторно наталкивается на то, что ты описывал еще год назад, и после этого дефект фиксят буквально в считанные дни... А иногда бывает и наоборот - по десятку раз все подряд наталкиваются и ни чего не происходит...
В Сигнале такое предупреждение.
С чем может быть это связано? Данные доступа к счету не менялись.
В Сигнале такое предупреждение.
С чем может быть это связано? Данные доступа к счету не менялись.
бывает периодически. Потом переподключится. Ничего делать не надо.
Понимать надо не меня, а документацию. О сортировке я предположил на основании списка ордеров или позиций. И ещё в одной из тем Slava говорил, что достаточно, просто скрыть объект и вновь отобразить, чтобы он был выше всех остальных и первым получил событие «клик крыски». Если ошибся, извиняйте. Разберитесь как список сортируется и расскажите всем. Я тоже поменяю своё мнение.
После долгих мучений и экспериментов на ум приходит что в MQL5 есть баг с очерёдностью объектов в списке объектов. Потому как попробовав этот код в MQL4 без особой уже надежды на корректную обработку, обнаружил что 4 созданых по порядку фибо уровня, имеют правильную нумерацию в списке объектов 0.1.2.3. первый ==0, второй ==1, итд., в следствии чего код отработал их с заданой логикой. В MQL5 же созданные один за другим 4 фибо, имеют нумерацию с потолка, и только если им изменить имена они выстраиваются в порядки очерёдности смены имён. Как быть то??? Проверьте кто у себя, может у меня терминал криво встаёт, хотя уже на 3 компах пробовал(((
После долгих мучений и экспериментов на ум приходит что в MQL5 есть баг с очерёдностью объектов в списке объектов.
Да, результат ObjectName имеет явное противоречие с Документацией - там сказано, что параметр
Однако Список объектов в Терминале и результат, полученный через MQL, имеют разный порядок, что видно в частности при ручном создании объектов: список объектов в Терминале - формируется в порядке их создания, а результат, полученный через MQL - в алфавитном порядке
Помимо прочего очевидно, что тратится лишнее время на сортировку по имени... а зачем? Если нужно пользователь и сам в состоянии отсортировать
Да, результат ObjectName имеет явное противоречие с Документацией - там сказано, что параметр
Однако Список объектов в Терминале и результат, полученный через MQL, имеют разный порядок, что видно в частности при ручном создании объектов: список объектов в Терминале - формируется в порядке их создания, а результат, полученный через MQL - в алфавитном порядке
Помимо прочего очевидно, что тратится лишнее время на сортировку по имени... а зачем? Если нужно пользователь и сам в состоянии отсортировать
И самый прикол в том, что в МТ4 всё это работает согласно документации))) Не в курсе как быстро фиксят найденые баги?
Не в курсе как быстро фиксят найденые баги?
Вот например я сообщал 3 года (!) назад, что не работает заливка прямоугольника... и до сих пор - не работает!
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
A100, 2017.08.11 16:53
Не отображается заливка фигуры Прямоугольник
GBPUSD, M15. Вставка\Объекты\Фигуры\Прямоугольник - нарисовать (рисунок 1) и далее изменить значения: верх 50000, низ 0 (рисунок 2). Результат: пусто... карандаш прямоугольник испарился
Вот например я сообщал 3 года (!) назад, что не работает заливка прямоугольника... и до сих пор - не работает!
Зачем так однобоко?
Баги фиксят в соответствии с внутренними приоритетами.
Часто бывает, что кто-то повторно наталкивается на то, что ты описывал еще год назад, и после этого дефект фиксят буквально в считанные дни...
А иногда бывает и наоборот - по десятку раз все подряд наталкиваются и ни чего не происходит...
Зачем так однобоко?
Баги фиксят в соответствии с внутренними приоритетами.
Речь шла о графических объектах, а там судя по всему - низкий приоритет
Речь шла о графических объектах, а там судя по всему - низкий приоритет... вот еще пример: луч у вертикальной линии
Может вы не совсем понимаете что такое луч у вертикальной линии?