Бета версия онлайновой книги по программированию на MQL4 - автор Сергей Ковалев (SK.) - страница 9

 
Climber:
Таки нашёл классную статью по сложному учёту ордеров автора SK 'Учёт ордеров в большой программе'
Чесно сказать задумался насчёт всего этого мероприятия, не замануха ли это???
Это не замануха, но нужно смотреть на мир открытыми глазами. Для большей ясности почитайте сообщения Korey начиная с этой страницы. И посмотрите ещё статью Мой первый "грааль".
 
Про грааль я читал раньше:)
Но в отличие от персонажа описываемого в статье про грааль, я не думаю как он: "Только я!". Я думаю что тут что-то не то или просто повезло сейчас. Хотя глядя на результаты чемпионата, можно увидеть намного лучший результат за три месяца, что в принципе означает нет ничего невозможного. И всё же не даёт покоя мысль, кто даст так "стремительно" развиваться на реале?
 
Climber:
И всё же не даёт покоя мысль, кто даст так "стремительно" развиваться на реале?

Это простой вопрос. И ответ на него очевиден: тот, кто работает честно (брокеров здесь не обсуждают).

Более сложный вопрос - действительно ли советник даёт устойчивые, высокие результаты? Или же это подгонка под историю или случайность?

 
SK. писал (а):
Более сложный вопрос - действительно ли советник даёт устойчивые,
высокие результаты? Или же это подгонка под историю или случайность?
Дык советника ещё и нету, если бы он был, я думаю многое бы прояснилось. Я тоже склоняюсь к случайности. Это я вручную на дэмо пока.

Просто раньше у меня были намного скромнее результаты. И вообще за время изучения вашей книги (почти месяц) и всего языка в целом, о трейдинге я узнал очень много нового, чего за 2 года знакомства с форексом ещё не знал и не подозревал. Я даже сейчас думаю как я мог раньше столького незная, хоть что-то заработать)) Просто когда я впервые попробовал торговать на дэмо, у меня сложилось устойчивое впечатление, что заработать можно, но не больше 300 долларов в месяц. Что в принципе тоже не плохо, учитывая что ты никому ничего не должен, работаешь когда хочешь и как хочешь, особенно учитывая мою аллергию на всякого рода начальство:)

Первого советника я написал в течении недели после первого прочтения книги. Но это скорей не написал, а скопировал, заменив только блок содержащий торговый критерий, а остальное взяв из примера советника с использованием МА. Но писав его я расчитывал всего лишь узнать, а что если сделать так. Т.е. просто ипользовать возможности тестера, чтоб не проверять вручную долго и нудно. Мыслей как в статье про грааль у меня и в помине не было. В этом плане я более приземлённый:) Ну и соответственно остался доволен результатом, увидев полный слив депозита (доволен тем что одним вариантом стало меньше). Идея была проста до безобразия, поэтому грех было её не проверить. Но последняя стратегия более сложна (для меня) в плане описания её средствами MQL4, поэтому пока волей неволей приходится работать ручками. Но её результаты в ручном режиме просто требуют дальнейшего написания эксперта. Вот и пытаюсь, медленно, но пишу.
 
Climber:
..Просто раньше у меня были намного скромнее результаты. И вообще за время изучения вашей книги (почти месяц) и всего языка в целом, о трейдинге я узнал очень много нового, чего за 2 года знакомства с форексом ещё не знал и не подозревал. Я даже сейчас думаю как я мог раньше столького незная, хоть что-то заработать))..
..Но последняя стратегия более сложна (для меня) в плане описания её средствами MQL4, поэтому пока волей неволей приходится работать ручками. Но её результаты в ручном режиме просто требуют дальнейшего написания эксперта. Вот и пытаюсь, медленно, но пишу.
На мой взгляд трудозатраты на создание устойчивой прибыльной стратегии приблизительно на два порядка (в 100 раз) выше, чем тудозатраты на изучение языка. В сущности, программирование - это только техническое средство, в значительной степени предсказуемое, а значит подвластное воле создателя стратегии. Но справедливости ради нужно также сказать, что вникая в подробности программирования трейдер начинает смотреть на всё явление рынок-трейдинг-стратегия более ясным взглядом. И по мере накопления опыта отсеиваются ошибочные направления мыслей и определяются перспективные. В этом смысле практику программирования трудно переоценить. Поэтому же и стократ были правы разработчики, принявшие решение сделать ставку на автотрейдинг.
 

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 дает приращение неизвестному байту, но терминал нерушится!!!! Еще раз респект разработчикам.

 
SK. писал (а):

Но справедливости
ради нужно также сказать, что вникая в подробности программирования
трейдер начинает смотреть на всё явление рынок-трейдинг-стратегия
более ясным взглядом. И по мере накопления опыта отсеиваются
ошибочные направления мыслей и определяются перспективные.
На все 100% согласен. Я даже сначала удивился, вроде пытаюсь изучать прораммирование,  а о трейдинге узнал больше чем знал до этого. Так что буду опыт пока накапливать:)
 
Korey:

to SK

Переменные, статические переменные.

...


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

//----------------------------------------------------------------------------------
int start()
   {
   int tik;                // Инициализация нолём на каждом тике
   instik(tik);            // Вызов функции, передача параметра по ссылке
   Alert (" tick=",tik);   // Всё время выводит 1, как и ожидается
   return;
   }
//----------------------------------------------------------------------------------
double instik(int &t)      // Функция изменяет переменную в вызывающей программе
   {                       // При каждом обращении заходит 0
   t++;                    // Увеличение значения на 1, как и заказано, т.е.
   }                       // ..при каждом исполнении уходит 1
//----------------------------------------------------------------------------------

В функции instik() всё происходит как и задумано. В start() к моменту Alert() значение переменной tik равно 1, что и выводит Аlert().

Но это не вся правда. Поскольку переменная tik не объявлена как статическая, её значение не сохраняется. Т.е. при следующем вызове на исполнение спец. функции start() переменная tik будет снова проинициализирована нолём. И всё начинается снова. Поэтому Алерт благополучно выводит единицу за единицей.

 
Поздравляю Сергея Ковалева!

Релиз учебника по языку MQL4 назначен на 1 февраля и он уже интегрирован в сайт MQL4.community. Перевод на английский язык идет полным ходом.
 
Сергей!
Как реализовать в советнике возможность закрытия ордера - встречным? В учебнике я этого не нашел...
Причина обращения: