Бета версия онлайновой книги по программированию на MQL4 - автор Сергей Ковалев (SK.) - страница 9
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Таки нашёл классную статью по сложному учёту ордеров автора SK 'Учёт ордеров в большой программе'
Чесно сказать задумался насчёт всего этого мероприятия, не замануха ли это???
Но в отличие от персонажа описываемого в статье про грааль, я не думаю как он: "Только я!". Я думаю что тут что-то не то или просто повезло сейчас. Хотя глядя на результаты чемпионата, можно увидеть намного лучший результат за три месяца, что в принципе означает нет ничего невозможного. И всё же не даёт покоя мысль, кто даст так "стремительно" развиваться на реале?
И всё же не даёт покоя мысль, кто даст так "стремительно" развиваться на реале?
Это простой вопрос. И ответ на него очевиден: тот, кто работает честно (брокеров здесь не обсуждают).
Более сложный вопрос - действительно ли советник даёт устойчивые, высокие результаты? Или же это подгонка под историю или случайность?
Более сложный вопрос - действительно ли советник даёт устойчивые,
высокие результаты? Или же это подгонка под историю или случайность?
Просто раньше у меня были намного скромнее результаты. И вообще за время изучения вашей книги (почти месяц) и всего языка в целом, о трейдинге я узнал очень много нового, чего за 2 года знакомства с форексом ещё не знал и не подозревал. Я даже сейчас думаю как я мог раньше столького незная, хоть что-то заработать)) Просто когда я впервые попробовал торговать на дэмо, у меня сложилось устойчивое впечатление, что заработать можно, но не больше 300 долларов в месяц. Что в принципе тоже не плохо, учитывая что ты никому ничего не должен, работаешь когда хочешь и как хочешь, особенно учитывая мою аллергию на всякого рода начальство:)
Первого советника я написал в течении недели после первого прочтения книги. Но это скорей не написал, а скопировал, заменив только блок содержащий торговый критерий, а остальное взяв из примера советника с использованием МА. Но писав его я расчитывал всего лишь узнать, а что если сделать так. Т.е. просто ипользовать возможности тестера, чтоб не проверять вручную долго и нудно. Мыслей как в статье про грааль у меня и в помине не было. В этом плане я более приземлённый:) Ну и соответственно остался доволен результатом, увидев полный слив депозита (доволен тем что одним вариантом стало меньше). Идея была проста до безобразия, поэтому грех было её не проверить. Но последняя стратегия более сложна (для меня) в плане описания её средствами MQL4, поэтому пока волей неволей приходится работать ручками. Но её результаты в ручном режиме просто требуют дальнейшего написания эксперта. Вот и пытаюсь, медленно, но пишу.
..Просто раньше у меня были намного скромнее результаты. И вообще за время изучения вашей книги (почти месяц) и всего языка в целом, о трейдинге я узнал очень много нового, чего за 2 года знакомства с форексом ещё не знал и не подозревал. Я даже сейчас думаю как я мог раньше столького незная, хоть что-то заработать))..
..Но последняя стратегия более сложна (для меня) в плане описания её средствами MQL4, поэтому пока волей неволей приходится работать ручками. Но её результаты в ручном режиме просто требуют дальнейшего написания эксперта. Вот и пытаюсь, медленно, но пишу.
to SK
Переменные, .
У Вас написано следующее:
" Все массивы являются статическими изначально, т.е. имеют вид static, даже если при инициализации это явно не указано "
Однако
допустим индикатор, в вызывающей подпрограмме прописан массив:
1)
double summ[]; //вызвается стандартная функция .................................... ..........
i=ArrayMinimum(summ,iter,0); // Ошибка на втором вызове: <incorrred start position 0 for ArrayMinimum function>
2) вариант ошибки
static double summ[];
//..............................................
i=ArrayMinimum(summ,iter,0); // Та же самая ошибка на втором вызове: <incorrred start position 0 for ArrayMinimum function>
3) вариант безошибочный
double summ[1000];
..............................................
i=ArrayMinimum(summ,iter,0); // Нормальное выполнение
4) вариант безошибочный
static double summ[1000];
..............................................
i=ArrayMinimum(summ,iter,0); // Нормальное выполнение
Из примера 1 и 2 следует, что массивы распределяются динамически.
Из приера 2 следует что массив без указания размерности не инициалицирется как статический (что очевидно), однако в ошибках компиляции это не появляется (((
Из примера 3 4 следует, что статическое распределение присуще только предопределенным массивам .
Интересно, что исполняющая система вылавливает Ошибку и определяет из примера 1 и 2, что говорит о хорошо продуманной системе реального времени терминала . Т.е. массив ведет себя как объект. Респект разработчикам.
Однако, не все так гладко с простыми переменными
double instik(int &t) // эта функция изменяет переменную в вызывающей программе
{
t++;
}
Этот вызов считает на каждом тике, если
//...........................................
static int tik;
instik(tik);
Print (" tick=",tik);
//...............................
А этo не считает так как распределение памяти динамическое, и отлинкованный адрес на втором вызове не совпадает.
................
int tik;
instik(tik);
Print (" tick=",tik);
//подпрограмма instik дает приращение неизвестному байту, но терминал нерушится!!!! Еще раз респект разработчикам.
Но справедливости
ради нужно также сказать, что вникая в подробности программирования
трейдер начинает смотреть на всё явление рынок-трейдинг-стратегия
более ясным взглядом. И по мере накопления опыта отсеиваются
ошибочные направления мыслей и определяются перспективные.
to SK
Переменные, статические переменные.
...Думается, что Вы выпускаете из виду то обстоятельство, что специальные функции запускаются на каждом тике заново. При этом статические переменные сохраняют свои значения и не инициализируются, а нестатические инициализируются в соответствии с кодом. В Вашем коде целая переменная tik по умолчанию инициализируется нулём
В функции instik() всё происходит как и задумано. В start() к моменту Alert() значение переменной tik равно 1, что и выводит Аlert().
Но это не вся правда. Поскольку переменная tik не объявлена как статическая, её значение не сохраняется. Т.е. при следующем вызове на исполнение спец. функции start() переменная tik будет снова проинициализирована нолём. И всё начинается снова. Поэтому Алерт благополучно выводит единицу за единицей.
Релиз учебника по языку MQL4 назначен на 1 февраля и он уже интегрирован в сайт MQL4.community. Перевод на английский язык идет полным ходом.
Как реализовать в советнике возможность закрытия ордера - встречным? В учебнике я этого не нашел...