Я совсем потерялся - страница 3

 
FMIC В этой документации есть вещи, которые не совсем имеют смысл. Тот, кто писал это, явно писал это для целевой аудитории, которая никогда не писала программы на gwbasic или псевдокоде, не говоря уже о знакомстве с концепциями программирования более высокого уровня. Или, по крайней мере, намерением автора было, чтобы она была понятна таким людям, а не обязательно, чтобы она была направлена исключительно на таких людей. Я склонен пропускать части о операторах if/else, циклах for и о том, что такое переменная, ради всего святого, так что нет, я не буду читать ее от начала до конца. И все же, когда я пропускаю эти части, в следующих разделах оказывается, что автор не совсем удачно рассмотрел это с точки зрения относительного новичка, потому что появляется кто-то вроде меня, имеющий ограниченный опыт программирования, и части все равно не стыкуются друг с другом, когда дело доходит до определенного момента в литературе. Вот еще один пример. Тип данных datetime. Я иду сюда: http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx и вижу, что переменные datetime по стандарту гораздо сложнее, чем написано в этой документации. Например, здесь содержится информация о MILLISECONDS. Это может быть любой год вплоть до 9999 года нашей эры. И все же эта документация ПРЕДПОЛАГАЕТ, что это не так, но не вдается в достаточные подробности. Возможно, тогда это не стандартная переменная C++ datetime, а что-то специфическое для MQL4? Количество секунд с начала 1970 года, действительное до конца 2037 года. Так вот, в этом интервале времени почти 2^31 секунды. Это говорит о том, что это знаковое длинное целое число, поскольку беззнаковое длинное целое число, начиная с 1970 года, фактически попало бы в 22-й век. Могу ли я использовать его в арифметических операциях, как если бы это было знаковое длинное целое число? Здесь не сказано. Это двусмысленно. Это МОЖЕТ быть прославленная строкоподобная переменная, только с определенными ограничениями на то, чем может быть строка. Здесь также показано несколько неполных способов ее использования. Но это не достаточно четко описывает все способы доступа к ней или манипулирования ею. Могу ли я просто использовать его в целочисленной арифметике наряду с интами? Если я читаю временной индекс образца, могу ли я просто вычесть один 1-минутный график из другого 1-минутного графика и, если это последовательные минуты, ожидать, что они будут отличаться на 60 (возможно, плюс или минус 1)?

Есть еще одна вещь, с которой у меня уже была проблема - описание ArrayCopySeries неоднозначно. В одних частях оно говорит о том, что в array[] записывается, а в других - что нет. И я смотрю и совершенно не понимаю назначения функции, если она НЕ копирует данные о валюте в массив.

Вот еще одна вещь, которую я хотел бы знать. Здесь говорится, что советник может иметь 3 основные функции. init, deinit и start. init выполняется один раз при первом запуске, start выполняется каждый раз, когда появляется новый тик, и ничего не говорится о deinit. Пример здесь https://book.mql4.com/samples/expert даже не имеет init. У него есть старт. У него есть несколько сложных вещей для обработки ошибок, например Fun_Error, что бы это ни делало. Никакого init. Что насчет переменных. Являются ли переменные, определенные в init, все еще действительными, когда он завершен и когда запущен "start"? Или они должны быть объявлены вне обеих переменных? Очищаются ли переменные, объявленные внутри start, каждый раз, когда start запускается снова? Объявляются ли переменные вне его? Надеюсь, что нет! Я даже не совсем уверен, что мне разрешено изменять переменные, которые объявлены вне любой функции. Похоже, что все они могут быть глобальными статическими переменными из того, что я видел.

Кстати, символы валют, используемые в функциях типа iTime, должны заключаться в одинарные или двойные кавычки. "USDCHF" или 'USDCHF'. Тысяча подобных мелочей. Любая из них, я уверен, приведет к тому, что программа не будет скомпилирована, когда я дойду до конца. И с тысячей различных мелких случайных ошибок, там будет делать отладку его.

RaptorUK о, конечно, у вас нет никаких обязательств помогать мне. И если ваше представление о хорошем времяпрепровождении - это троллинг людей на форумах, высмеивание их за то, что они находятся на форуме и просят о помощи, когда ОЧЕВИДНО, что цель посещения любого форума в первую очередь - это троллинг людей, тогда я вижу, что вы действительно наслаждаетесь собой и выполняете то, что вы считаете правильной ролью пользователя форума. Что касается меня, то если бы я был КВАЛИФИЦИРОВАН помочь кому-либо, ответив на вопрос, на который я могу ответить, то гипотетически я вполне могу быть готов это сделать. Например, если у вас есть дюжина показателей, которые не являются статистически независимыми, я знаю, как оптимально объединить их в составной показатель таким образом, чтобы компенсировать тот факт, что они статистически зависимы. Конечно, сейчас я не собираюсь помогать ВАМ ничем. Ей-богу, если бы я увидел вас с ногой, застрявшей в железнодорожных путях, я бы сказал: "Я мог бы вам помочь, но что мне с этого?".

 
zortharg:
FMIC есть вещи в этой документации, которые не совсем имеют смысл. ...

Мне не составило труда прочитать всю книгу от начала до конца, несмотря на то, что я хорошо разбираюсь в языках высокого и низкого уровня.

Мне 45 лет, я занимаюсь разработкой программного обеспечения с 1986 года и имею степень бакалавра технических наук (слаботочная электроника). Я хорошо знаю языки C, C++, C#, Pascal, Cobol, Fortran, Perl и многие другие, которые уже давно исчезли. Я также хорошо разбираюсь в программировании на ассемблере для архитектур x86, Z-80, Pics и многих других. Еще раз говорю, что мне не составило труда прочитать и освоить MQL4.

Таким образом, все, что я могу заключить, это то, что ваше высокомерное отношение к критике документации, вместо того, чтобы сосредоточиться на реальной цели изучения MQL, может означать только одно - вы на самом деле более глупы, чем те непрограммисты, для которых была написана документация.

Если вы считаете, что MetaTrader и MQL настолько ниже вас, тогда зачем вы здесь? Серьезно! Зачем?

Есть много других торговых приложений и алгоритмических систем. Выбирайте и разбирайтесь с ними!

Кстати, "RaptorUK" является МОДЕРАТОРОМ на форуме. ТРОЛЛЬ здесь - ВЫ!

Это мое последнее сообщение в этой теме! Вы не стоите усилий.

 
zortharg:

RaptorUK о, конечно, у вас нет никаких обязательств помогать мне. И если ваше представление о хорошем времяпрепровождении - это троллинг людей на форумах, высмеивание их за то, что они находятся на форуме и просят о помощи, когда ОЧЕВИДНО, что цель посещения любого форума в первую очередь - это троллинг людей, тогда я вижу, что вы действительно наслаждаетесь собой и выполняете то, что вы считаете правильной ролью пользователя форума. Что касается меня, то если бы я был КВАЛИФИЦИРОВАН помочь кому-либо, ответив на вопрос, на который я могу ответить, то гипотетически я вполне могу быть готов это сделать. Например, если у вас есть дюжина показателей, которые не являются статистически независимыми, я знаю, как оптимально объединить их в составной показатель таким образом, чтобы компенсировать тот факт, что они статистически зависимы. Конечно, сейчас я не собираюсь помогать ВАМ ничем. Ей-богу, если бы я увидел вас с ногой, застрявшей в железнодорожных путях, я бы сказал: "Я мог бы вам помочь, но что мне с этого?".

Может быть, вам стоит объяснить этот ваш комментарий?

Дерзость людей на этом форуме!


Многие люди на этом форуме отдают свое свободное время, чтобы попытаться помочь... . а вы приходите и ожидаете, что вам помогут, как будто это ваше право! Я думаю, все были бы рады помочь вам, пока вы не продемонстрировали свое отношение ... вы должны проявить немного смирения, когда просите о помощи.

Вы можете навешивать на меня ярлыки, как хотите, мне действительно все равно, я знаю, почему я здесь, и некоторые люди даже благодарят меня за попытку помочь. . . Полагаю, это выше ваших сил.

 
zortharg:

Значит, я должен загружать исторические цены по одной за раз с помощью iclose? https://docs.mql4.com/series/iClose Проблема с этим, как я вижу, заключается в том, что данные могут обновляться, пока я нахожусь в середине загрузки. Было бы очень хорошо загружать все в виде блока. Я предполагаю, что могу загрузить время с помощью iTime, ПОТОМ использовать iclose и ПОТОМ снова использовать iTime на том же индексе, и если он изменился, то начался новый интервал времени бара, и мне нужно вернуться на номер индекса назад. Правильно ли я рассуждаю или я чего-то не понимаю?


Почему функция ArrayCopySeries() требует, чтобы вы сами копировали серию?

Вы объявляете массив, но не указываете его размер.

Когда вы обращаетесь к массиву, mql делает "волшебство" и (надеюсь) нужное значение появляется в нужном месте.

На странице есть пример.

Однако онлайновая документация на данный момент не синхронизирована, поэтому используйте справку в метаредакторе в качестве основного справочника.

Смотрите на пример, пока он не станет понятным!

 
zortharg:
Тип данных datetime. Я иду сюда: http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx и вижу, что переменные datetime по стандарту гораздо сложнее, чем сказано в этой документации. Например, она содержит информацию о МИЛЛИСЕКУНДАХ. Это может быть любой год вплоть до 9999 года нашей эры. И все же эта документация ПРЕДПОЛАГАЕТ, что это не так, но не вдается в достаточные подробности. Возможно, тогда это не стандартная переменная C++ datetime, а что-то специфическое для MQL4? Количество секунд с начала 1970 года, действительное до конца 2037 года. Так вот, в этом интервале времени почти 2^31 секунды. Это говорит о том, что это знаковое длинное целое число, поскольку беззнаковое длинное целое число, начиная с 1970 года, фактически попало бы в 22-й век. Могу ли я использовать его в арифметических операциях, как если бы это было знаковое длинное целое число? Здесь не сказано. Это двусмысленно. Это МОЖЕТ быть прославленная строкоподобная переменная, только с определенными ограничениями на то, чем может быть строка. Здесь также показано несколько неполных способов ее использования. Но это не достаточно четко описывает все способы доступа к ней или манипулирования ею. Могу ли я просто использовать его в целочисленной арифметике наряду с интами? Если я читаю временной индекс образца, могу ли я просто вычесть его из 1-минутного графика из другого 1-минутного графика и, если это последовательные минуты, ожидать, что они будут отличаться на 60 (возможно, плюс или минус 1)?

Зачем так много слов, чтобы спросить простую вещь :)

Старый MQL: https://docs.mql4.com/dateandtime Группа функций, обеспечивающих работу с данными типа datetime(целое число , представляющее количество секунд, прошедших с полуночи 1 января 1970 года).

Новый MQL: https://www.mql5.com/en/docs/basis/types/integer/datetime - Типdatetime предназначен для хранения даты и времени в виде количества секунд, прошедших с 01 января 1970 года. Этот тип занимает 8 байт памяти.

Большинство языков, которые использовали старое 32-битное целое число для хранения времени, перешли на 64-битное, чтобы избежать разрушений, когда наступит 2038 год.

Вы просто складываете и вычитаете, как вы догадываетесь. Но сохраните его как тип данных datetime и избегайте соблазна хранить егов длинной переменной.

 

СПАСИБО, ydrol!

Хммммм... Я не знаю, существует ли static_cast в mql4, но могу ли я тогда просто использовать любые обычные арифметические операции над датами, пока я сохраняю результат в другом времени? Например, если X[] - это массив дат, и я хочу работать с номером минуты, я могу взять Y=(X[17]+30)/60, при условии, что Y - это дататайм, а не лонг? Верно? Или, скорее, я мог бы взять Y=(X[17]-X[16]+30)/60, потому что будет плохо, если X[17] будет 29 mod 60, а X[16] будет 30 mod 60, он будет думать, что они находятся в 2 минутах друг от друга, если я сделаю это первым способом.

Боже, код, который я сделал до сих пор, уже такой длинный, и все, что было сделано, это чтение данных, и теперь я должен компенсировать пропуск данных в течение нескольких минут (или целых выходных!) путем смещения данных вокруг больше и интерполяции, интересно, какова вероятность того, что эта индейка будет работать, когда я закончу с ней, ха-ха. Все это из программы matlab, которая показывает, что у меня наконец-то есть торговый метод, который может побить спред/комиссию, но применение его на практике - это нечто другое.

Всем, кто не ydrol, окей, я объявляю вас победителями ваших соответствующих конкурсов, так что поздравляю, и поскольку вы выиграли, вы можете прекратить писать в этой теме сейчас.

 

Hmmmmm. I don't know if static_cast even exists in mql4, but can I just use any regular arithmetic operations on datetimes then, so long as I save the result in another datetime?

Если результат вашей арифметики все еще является точкой во времени (т.е. все еще значением, которое является количеством секунд с 1970 года), то сохраните его как datetime, в противном случае вы можете привести его к long или int. (Это не обязательно, но это поможет избежать путаницы в дальнейшем).

Не стоит всех перессорить, просто измените подход, чтобы получить желаемую помощь :)

 

Ну, после написания некоторого кода мне действительно кажется очень сложным избежать сохранения результатов арифметики с датами в качестве входных данных в ints. Но теоретически static_cast<long> будет работать так же, как и в C++? Я не вижу никакого упоминания в документации.

Кстати, часовой пояс. Это UTC? В книге просто постоянно указывается количество секунд с 1 января 1970 года в 0:00. Я мог бы предположить, что это UTC, как время UNIX, но мы уже выяснили, что между переменными "datetime" здесь и тем, что использует C++, есть по крайней мере некоторые расхождения (например, нет миллисекунд) - что, конечно, само по себе не является временем UNIX, но тем не менее называется "datetime" - так что только потому, что это поверхностно похоже на время UNIX из-за начала 1970 года, я не должен считать, что это оно и есть. Обязательно ли это UTC или возможно, что каждый брокер может иметь собственное смещение, основанное на его часовом поясе, и что мне нужно иметь это в коде, чтобы он мог определить, где находится начало недели, по модулю 10080 минут, на основе данных? Смысл в том, чтобы знать время по модулю 10080, когда начинается и заканчивается торговля, поскольку рынок открыт только 7200 из этих 10080 минут, чтобы можно было сворачивать позиции по мере приближения выходных, а не начинать на полную катушку в самом начале или, что гораздо хуже, принимать радикальные торговые решения на основе разрывов в ценах между концом одной недели и началом следующей, или даже не обращать внимания на перерывы при определении такой информации, как волатильность - которую я определяю как среднее квадратичное изменение цены через 1 минуту - и затем я добавляю 1/4 от среднего квадратичного изменения цены через 2 минуты, 1/9 от среднего квадратичного изменения цены через 3 и 1/16 от среднего квадратичного изменения цены через 4, а затем умножаю все это на 1/(1+1/2+1/3+1/4)=0.48.

Эй, что я могу сказать, я пришел с просьбой о помощи, а они были противны и враждебны ко мне с самого начала. Если кто-то просит о помощи, я делаю так: либо не даю ее, либо даю. Если я не знаю ответа на вопрос, который кто-то задает, я не веду светскую беседу вместо того, чтобы ответить на него, а если я не хочу тратить время на то, чтобы ответить на вопрос должным образом, я не трачу время на то, чтобы высмеять его за то, что он задал его, или дать ему бесполезный неответ. В последнем случае я делаю поблажку для тех, кто задает вопрос, на который должен знать ответ, если они прожили на планете Земля больше одного дня, или если вопрос риторический и особенно если он предназначен для оскорбления определенной группы людей. Я - человек, который сразу переходит к делу, и я действую в соответствии с этическим кодексом. Я вежлив с людьми, пока они не станут мне неприятны, и тогда я перестаю быть вежливым, и я также честен с людьми, пока они не станут лгать, обманывать и красть у меня, и тогда мой стандартный кодекс гражданского поведения вылетает в окно, и я буду лгать, обманывать и красть в обмен, не проявляя ни жалости, ни сдержанности. Возможно, это упрощенный взгляд на мир, но я упрям и непрощаю.

Но вам спасибо за помощь. И если есть что-то, с чем я могу вам помочь, спрашивайте. Не то чтобы я предполагал, что вы ищете помощи в чем-либо, в чем я мог бы помочь.

 
zortharg:

Ну, после написания некоторого кода мне действительно кажется очень сложным избежать сохранения результатов арифметики с датами в качестве входных данных в ints. Но теоретически static_cast<long> будет работать так же, как и в C++? Я не вижу упоминания в документации.

Кстати, часовой пояс. Это UTC?


Оно не зависит от часового пояса. Сколько секунд между 14:00 и 15:00? Вам не нужно знать часовой пояс, чтобы ответить 3600... Если это поможет, просто предположите, что время начала, полночь 1 января 1970 года, и время, которое вас интересует, находятся в одном часовом поясе.
 

EDIT: Упс, как уже было отмечено, для datetime не существует определенного часового пояса. Это зависит от того, откуда вы его получили! (это вызывает ненужные сложности, в отличие от UnixTime, на котором он в конечном итоге был основан!)

Часовой пояс для datetime (секунды после 1970 года) основан на UTC. Так же, как и время Unix. Это UnixTime - 64-битное unix-время.

Уникальное истинное время UTC, время Unix игнорирует високосные секунды (см. 1-й параграф) и тому подобное, поэтому арифметика по модулю работает для минут и часов.

datetime - datetime = long (длительность в секундах) - хотя, если говорить о торговле, то это будет int в большинстве случаев, которые я могу себе представить!

datetime +/- seconds(long) = datetime(another date)

datetime +/- seconds(int) = datetime(другая дата)