Мне нужно определить дату открытия самого первого ордера (ордера открыты по разным валютным парам). Попробовал воспользоваться массивами. Данные записываються в массив коректно. При поиске элемента с максимальным значением функция ArrayMaximum() возвращает позицию максимального элемента в массиве тоже правельно. Но вот функция ArrayMinimum() возвращает -1... Почему так? Пробовал вставлять в массив значения более меньшие чем те которые выдаёт OrderOpenTime(), да функция ArrayMinimum() начинает работать коректно, но почему тогда функция ArrayMaximum() работает с большими цифрами, а функция ArrayMinimum() не хочет? И как же мне зафиксировать дату открытия первого ордера?
- [ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда.
- как найти ArrayMaximum () и минимальная (), не абсолютные значения?
- Ошибка в функции ArrayMinimum()
Как фиксировать дату первого ордера я догодался:
Но появился новый парадокс. На сколько я знаю при просчёте счётчиком ордера "выстраиваються" по алфавиту:
При счётчике в таком виде
Счётчик в противоположную сторону
КАК ЭТО ПОНЯТЬ ??? Вчём у меня ошибка, или что я не могу понять? И вопрос по массивам тоже не снимаеться.
//+------------------------------------------------------------------+ //| Проверка 2.mq4 | //| Сергей | //| | //+------------------------------------------------------------------+ #property copyright "Сергей" #property link "" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- datetime date;int ord;string symbol; for(int pos=OrdersTotal()-1;pos>=0;pos--) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true) { Print("date ",TimeToStr(OrderOpenTime(),TIME_DATE|TIME_MINUTES)," ",pos," ",OrderSymbol()); if(date>OrderOpenTime() || date==0) { date=OrderOpenTime();ord=pos;symbol=OrderSymbol(); } } else Print("Ошибка ",GetLastError()); } Print("DATEOPEN ",TimeToStr(date,TIME_DATE|TIME_MINUTES)," ",ord," ",symbol); //---- return(0); } //+------------------------------------------------------------------+
Но появился новый парадокс. На сколько я знаю при просчёте счётчиком ордера "выстраиваються" по алфавиту:
При счётчике в таком виде
for(int pos=OrdersTotal()-1;pos>=0;pos--)Print() выдаёт вот это :
Счётчик в противоположную сторону
for(int pos=0;pos<OrdersTotal();pos++)результаты принт выдаёт правельно:
КАК ЭТО ПОНЯТЬ ??? Вчём у меня ошибка, или что я не могу понять? И вопрос по массивам тоже не снимаеться.
Ну всё я вобще не чего не понемаю??????????? Стоило перезагрузить терминал и счётчик
for(int pos=OrdersTotal()-1;pos>=0;pos--)стал тоже правельно считать.....
По-моему, дело в том, что номер позиции будет зависеть от типа сортировки в окне терминала по различным полям. По крайней мере, для истории счета такое наблюдается. Для терминала не проверял, но думаю там организованно все по такому же принципу.
Scriptong:
По-моему, дело в том, что номер позиции будет зависеть от типа сортировки в окне терминала по различным полям. По крайней мере, для истории счета такое наблюдается. Для терминала не проверял, но думаю там организованно все по такому же принципу.
Тоесть, если я вас правельно понял, то отсортировав в терменале по какому-то из полей например по "Времени" или по "Символу", счётчик также будет просчитывать... Нет я это проверял, просчёт идёт по алфавиту, и если попадаються ордера с одинаковыми парами их он раставляет по времени.По-моему, дело в том, что номер позиции будет зависеть от типа сортировки в окне терминала по различным полям. По крайней мере, для истории счета такое наблюдается. Для терминала не проверял, но думаю там организованно все по такому же принципу.
Сегодня я опять запускал и в ту и в другую сторону, просчёт ведёться правельно, вчера скорей всего был просто глюк.
Но вот с МАССИВАМИ у меня вопрос так и не разрешился............... может кто то подскажет, в чём проблема?
Я тут кое что дописал в код для проверки... вот что получилось:
Цифра
//+------------------------------------------------------------------+ //| Проверка.mq4 | //| Сергей | //| | //+------------------------------------------------------------------+ #property copyright "Сергей" #property link "" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- datetime date[];string symbol[]; int TotalOrders=OrdersTotal(); ArrayResize(date,TotalOrders); ArrayResize(symbol,TotalOrders); Print("OrdersTotal ",OrdersTotal()); for(int pos=0;pos<OrdersTotal();pos++) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true) { date[pos]=OrderOpenTime(); symbol[pos]=OrderSymbol(); Print("Массив date[",pos,"] ",TimeToStr(date[pos],TIME_DATE|TIME_MINUTES)," ",symbol[pos]); } else Print("Ошибка ",GetLastError()); } date[5]=2567809; symbol[5]="ПРОВЕРКА"; //---- int mindate=ArrayMinimum(date); Print("MinDataOpen ",mindate," ",TimeToStr(date[mindate],TIME_DATE|TIME_MINUTES)," ",symbol[mindate]); int maxdate=ArrayMaximum(date); Print("MaxDataOpen ",maxdate," ",TimeToStr(date[maxdate],TIME_DATE|TIME_MINUTES)," ",symbol[maxdate]); //---- return(0); } //+------------------------------------------------------------------+
Цифра
2567809
маленькая иint mindate=ArrayMinimum(date);обработала её верно !!!!
//+------------------------------------------------------------------+ //| Проверка.mq4 | //| Сергей | //| | //+------------------------------------------------------------------+ #property copyright "Сергей" #property link "" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- datetime date[];string symbol[]; int TotalOrders=OrdersTotal(); ArrayResize(date,TotalOrders); ArrayResize(symbol,TotalOrders); Print("OrdersTotal ",OrdersTotal()); for(int pos=0;pos<OrdersTotal();pos++) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true) { date[pos]=OrderOpenTime(); symbol[pos]=OrderSymbol(); Print("Массив date[",pos,"] ",TimeToStr(date[pos],TIME_DATE|TIME_MINUTES)," ",symbol[pos]); } else Print("Ошибка ",GetLastError()); } date[5]=1402874590; symbol[5]="ПРОВЕРКА"; //---- int mindate=ArrayMinimum(date); Print("MinDataOpen ",mindate," ",TimeToStr(date[mindate],TIME_DATE|TIME_MINUTES)," ",symbol[mindate]); int maxdate=ArrayMaximum(date); Print("MaxDataOpen ",maxdate," ",TimeToStr(date[maxdate],TIME_DATE|TIME_MINUTES)," ",symbol[maxdate]); //---- return(0); } //+------------------------------------------------------------------+????
date[5]=1402874590;
conys писал (а):
Тоесть, если я вас правельно понял, то отсортировав в терменале по какому-то из полей например по "Времени" или по "Символу", счётчик также будет просчитывать... Нет я это проверял, просчёт идёт по алфавиту, и если попадаються ордера с одинаковыми парами их он раставляет по времени.
Сегодня я опять запускал и в ту и в другую сторону, просчёт ведёться правельно, вчера скорей всего был просто глюк.
Но вот с МАССИВАМИ у меня вопрос так и не разрешился............... может кто то подскажет, в чём проблема?
Сегодня я опять запускал и в ту и в другую сторону, просчёт ведёться правельно, вчера скорей всего был просто глюк.
Но вот с МАССИВАМИ у меня вопрос так и не разрешился............... может кто то подскажет, в чём проблема?
на сортировку автоматом я бы не надеялся.
а что до массивов, попробуй
double date[];
Shu:
а что до массивов, попробуй
double date[];
Да я с double тоже попробовал, всё нормально проходит:
Просто надеялся что представители Метаквота обьяснят что за причина сбоя при обьявлении массива как datetime.
conys:
Просто надеялся что представители Метаквота обьяснят что за причина сбоя при обьявлении массива как datetime.
Просто надеялся что представители Метаквота обьяснят что за причина сбоя при обьявлении массива как datetime.
ну, я бы не называл это сбоем. всё-таки чётко прописано:
int ArrayMinimum( double array[], int count=WHOLE_ARRAY, int start=0)
Shu:
Да конечно, я это видел, и естественно если обьявитьconys:
Просто надеялся что представители Метаквота обьяснят что за причина сбоя при обьявлении массива как datetime.
Просто надеялся что представители Метаквота обьяснят что за причина сбоя при обьявлении массива как datetime.
ну, я бы не называл это сбоем. всё-таки чётко прописано:
int ArrayMinimum( double array[], int count=WHOLE_ARRAY, int start=0)
string date[];
//+------------------------------------------------------------------+ //| Проверка.mq4 | //| Сергей | //| | //+------------------------------------------------------------------+ #property copyright "Сергей" #property link "" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- string date[4]={"xor","xer","xom","sox"}; //---- int mindate=ArrayMinimum(date); Print("MinDataOpen ",mindate," ",date[mindate]); int maxdate=ArrayMaximum(date); Print("MaxDataOpen ",maxdate," ",date[maxdate]); //---- return(0); } //+------------------------------------------------------------------+
то не чего из этого не получеться, точнее получиться вот это:
но обьявив
int date[];
//+------------------------------------------------------------------+ //| Проверка.mq4 | //| Сергей | //| | //+------------------------------------------------------------------+ #property copyright "Сергей" #property link "" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- int date[4]={3,6,15,8}; //---- int mindate=ArrayMinimum(date); Print("MinDataOpen ",mindate," ",date[mindate]); int maxdate=ArrayMaximum(date); Print("MaxDataOpen ",maxdate," ",date[maxdate]); //---- return(0); } //+------------------------------------------------------------------+получим то что хотим тоесть вот это:
или
datetime date[];
//+------------------------------------------------------------------+ //| Проверка.mq4 | //| Сергей | //| | //+------------------------------------------------------------------+ #property copyright "Сергей" #property link "" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- datetime date[2]={3,6,15,8}; //---- int mindate=ArrayMinimum(date); Print("MinDataOpen ",mindate," ",date[mindate]); int maxdate=ArrayMaximum(date); Print("MaxDataOpen ",maxdate," ",date[maxdate]); //---- return(0); } //+------------------------------------------------------------------+получаем опять так же что хотим:
Так чем же цифра 3 отличаеться от цифры 1402874590 ? Только размером или ещё чемто?
Но влюбом случае спасибо буду знать теперь как массив "date" обзывать :)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь