вопросы:

 

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

1) чем отличается return, return(), return (0) и return (qwerty) и где их изпользуют .. про первую я понимаю, но про остальных - пока не разбираюсь.
2) почему часто сперва присваиваете значение переменной и только потом ее използуете.

пример
pp=OrderOpenPrice();
sl=OrderStopLoss();
tp=OrderTakeProfit();
ticket=OrderModify(OrderTicket(), pp, sl, tp, 0, cl);
почему нельзя так ? (медленнее работает, некоректно работает, итд ...? )
ticket=OrderModify(OrderTicket(), OrderOpenPrice(), sl,
OrderTakeProfit();, 0, Red);

3) что и ПОЧЕМУ обязательно надо писать в инициализации и деинициализации. Цто еще можно там писать? До конца мне не понятна сама нужда в инициализации...


4) почему иногда пишут iMA(NULL,0,13,8,MODE_SMA,PRICE_CLOSE,0);
а другой раз iMA(Symbol(),0,13,8,MODE_SMA,PRICE_CLOSE,0);
иногда sy=Symbol(); iMA(sy,0,13,8,MODE_SMA,PRICE_CLOSE,0);
в чем приимущесто или недостатки....


5) еще я не совсем понимаю про модификацию Ордеров ( недавныи пост в форуме) - разве достаточно только одного "fm == true",
чтобы убедится в правильности исполнения модификациии? ЧТО показывает переменная fm? Номер ticket при модификации ненизменяется - как можно определить правильность модификации? Я все время использовал :
if (NormalizeDouble(sl,Digits)==NormalizeDouble(OrderStopLoss(),Digits))break;
получается цто это не нужно и лишнее


6) Почему вы пишите:
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
нельзя в место dg писать Digits ??? в чем пиимущесто варианта?

Удачного вам дня!

 

Вы не пробовали заглянуть в Учебник по MQL4 ?

 

Некоторые вопросы очуметь:)

Попробую помочь, вроде человек пытался подумать.

1) return() - возвращает пустое значение, return (0)- возвращает 0, и return (qwerty) - возвращает значение переменной qwerty;

2) можно и так и так, принципиальной разницы (при условии что Вы понимаете что делаете, знаете как работает OrderSelect и т.д) не будет, просто удобства ради. Что проще каждый раз писать OrderStoploss() или sl?

3) Ничего писать необязательно, там можно например провести какие-то расчеты необходимые для начала работы советника/индикатора, подчистить с чарта при деинициализации следы жизнедеятельности и т.д.

4) см. пункт 2.

5) Тут у Вас бред... Извините.

6) Именно Digits нельзя, слово зарезервировано, Это если имеется ввиду писать int Digits=MarketInfo(OrderSymbol(), MODE_DIGITS).

Упс.. Может я не совсем понял, короче:

MarketInfo(OrderSymbol(), MODE_DIGITS) - возвращает кол-во символов после запятой для инструмента рассматриваемого ордера

Digits - возвращает кол-во символов после запятой для инструмента текущего чарта.

 
1 разница в возврате\невозврате значений. Для более детального изучения Вам нужно несколько детальнее изучить язык С\С++ и разобратиься с функциями возвращающими значения (собственно, функциями в интерпретации других языков) и не возвращающими (процедуры). По типу возвращаемого значения и переменная в скобках/без скобок (тоже допускается).
2. Главный критерий работы программ, при правильно реализованном  алгоритме - его эффективность. То есть минимум затрачиваемого времени на выполнение алгоритма. Следствие - везде, где возможно, избегать дорогих в смысле вычислительных затрат (времени) реализаций. Здесь нужно обратиться к разделу сравнения вычислительных затрат на операцию. Самая длительнавя - это вызов функции, потом деление чисел с плавающей точкой, .....  ет сетера....
В этом примере если функции вызываются по одному разу, то присвоение результата работы функции в переменную, выигрыша по времени не даст, даже ситуацию усугубит, но если результат используется более одного раза 
(а если еще в цикле...), то выигрыш весьма существенный.
3. Инициализацию желательно проводить всегда - ибо иначе в переменной инаходится мусор - случайное негарантированное значение. Использорвание  переменных без инициализации может приводить к нестабильным результатам работы, в том числе и со сменой как программного, так и аппаратного обеспечения ... В С\С++ (MS VS2005) по этому поводу есть даже предупреждение - "использование переменной до инициализации". В МКЛ нет - можно по невнимательномсти использовать. Это для вылавливания одни из самых сложных ошибок. Конечно если кода на 20 строк - найти не проблема, а если на 10К ? ;).

4 аналог 2

5 не понятно

6 можно, если речь идет о текущем инструменте (то есть тот, на котором "завешен" эксперт). Разница - см. п2.

Успехов.
 
вопросы уместные вполне, так как язык не совсем в стандарте, и его исполняющая система туда же.
Много неопределенностей кои не описаны, но выявляются на практике. Та же семантика return ))).
Имеются дыры, выражено недоверие к языку, т.к. заранее не ясно будет работать некая конструкция или нет.
Всему есть Единственная и по сущуству правильная Объяснительная - это специализированный язык,
на котором былые Си-привычки только вредят. Не сравнивайте MQL-4 и Си, - только настроение себе испортите.
поэтому пишут MQL-проги скромно, без размаха, небольшими кусками с отладкой через Print,
и потому поэтому, из-за отладочной печати не ставят вызов функции в параметры функции,
чтобы при случае посмотреть что возвращается.)))
Конечный результат можно было бы и причесать, но зачем? Память давно уже не экономят.
Скорострельности хватает.
 

Вам надо почитать учебник по MQL

так же паралельно почитайте какую нибудь книгу по языку Си, желательно для изучения языка а не для продвинутых

могу порекомендовать старую добруд книгу которую написали разработчики языка Си Керниган Ритчи

попробуйте ее найти в простора интернета

может кто то ссылку подскажет

 

Спасибо всем! Учебник читал по несколько раз но там все описания всетаки недостаточно информации чтобы все было понятно человеку который не работает програмистом...
почти все понял за изключением 5). попробую еще раз другими словами..
Если делаем модификацию ордера, например меняем СтопЛос, то вопрос - как проверить произошла ли модификация успешно или где то застряла в просторах интернета. Я сравнивал желаемое значение СтопЛоса с реальнои:
if (NormalizeDouble(sl,Digits)==NormalizeDouble(OrderStopLoss(),Digits))break;
в 'Полезные функции от KimIV' у КimIV видел другой вариант:
fm=OrderModify(OrderTicket(), pp, sl, tp, 0, cl);
if (fm) break;
Непонял как и по каким признакам, только с false или true можно определить какое СтопЛос цена у Ордера - старое или новое?
и еще непонятно - если вызов функции самая медленная операция, тогда почему например КimIV в своих примерах използует почти все только из набора функций? Понимаю - писать так наверное легче - но как с быстродеисвыем если вычисления сложные ??

* сразу новый вопрос - в эксперте быстрее будет работать :

iMA(NULL,0,13,8,MODE_SMA,PRICE_MEDIAN,i);


или весь код вычисления полностю вписанный в эксперт ....

 

Очень интересно... :)))
В ближайших планах было задать практически эти-же вопросы.

Так что не удивляйтесь и не бить ногами с посылом в эту тему... ;)
ибо по логике продолжить тут: 'Опубликован первый учебник по MQL4'

 

bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)

Изменяет параметры ранее открытых позиций или отложенных ордеров. Возвращает TRUE при успешном завершении функции. Возвращает FALSE при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

OrderModify -возвращает результат операции, проверки как у Игоря вполне достаточно.

Далось Вам это быстродействии, когда Вы созреете до программ на MQL, где быстродействии станет серьезным препятствием, этот вопрос отпадет сам собой.

 
sasa999:

Непонял как и по каким признакам, только с false или true можно определить какое СтопЛос цена у Ордера - старое или новое?

Если функция OrderModify выполнилась без ошибки (т.е. сделала все, что ей было положено), она вернет true. Соответственно, при любой ошибке результат будет false. Перебирать ордера и проверять результат выполнения функции в общем случае не имеет смысла.

sasa999:

и еще непонятно - если вызов функции самая медленная операция, тогда почему например КimIV в своих примерах използует почти все только из набора функций?

Вас дезинформировали =)
На вызове функции теряется очень мало (недавно Rosh приводил результаты сравнения).

sasa999:

сразу новый вопрос - в эксперте быстрее будет работать :
iMA(NULL,0,13,8,MODE_SMA,PRICE_MEDIAN,i);
или весь код вычисления полностю вписанный в эксперт ....

Встроенные индикаторы - самые индикаторные индикаторы из всех индикаторов! =)
Быстрее будет работать (опять же, в общем случае) встроенная функция iMA.
 
sasa999:

Спасибо всем! Учебник читал по несколько раз но там все описания всетаки недостаточно информации чтобы все было понятно человеку который не работает програмистом...
почти все понял за изключением 5). попробую еще раз другими словами..
Если делаем модификацию ордера, например меняем СтопЛос, то вопрос - как проверить произошла ли модификация успешно или где то застряла в просторах интернета. Я сравнивал желаемое значение СтопЛоса с реальнои:
if (NormalizeDouble(sl,Digits)==NormalizeDouble(OrderStopLoss(),Digits))break;
в 'Полезные функции от KimIV' у КimIV видел другой вариант:
fm=OrderModify(OrderTicket(), pp, sl, tp, 0, cl);
if (fm) break;
Непонял как и по каким признакам, только с false или true можно определить какое СтопЛос цена у Ордера - старое или новое?
и еще непонятно - если вызов функции самая медленная операция, тогда почему например КimIV в своих примерах използует почти все только из набора функций? Понимаю - писать так наверное легче - но как с быстродеисвыем если вычисления сложные ??

* сразу новый вопрос - в эксперте быстрее будет работать :
iMA(NULL,0,13,8,MODE_SMA,PRICE_MEDIAN,i);
или весь код вычисления полностю вписанный в эксперт ....


Korey:
вопросы уместные вполне, так как язык не совсем в стандарте, и его исполняющая система туда же.
Много неопределенностей кои не описаны, но выявляются на практике. Та же семантика return ))).
Имеются дыры, выражено недоверие к языку, т.к. заранее не ясно будет работать некая конструкция или нет.
Всему есть Единственная и по сущуству правильная Объяснительная - это специализированный язык,
на котором былые Си-привычки только вредят. Не сравнивайте MQL-4 и Си, - только настроение себе испортите.
поэтому пишут MQL-проги скромно, без размаха, небольшими кусками с отладкой через Print,
и потому поэтому, из-за отладочной печати не ставят вызов функции в параметры функции,
чтобы при случае посмотреть что возвращается.)))
Конечный результат можно было бы и причесать, но зачем? Память давно уже не экономят.
Скорострельности хватает.


Некоторые люди (межу нами-девочками, по моим наблюдениям это 99%) воспринимают деликатность и сдержанность как слабость и робость. Интересно наблюдать как меняется их (иногда капризно-требовательный, иногда бахвально-поучительный) тон, когда тебе уже просто надоест внимать той блевотине, что они неосознанно (не отдавая себе отчёт зачем и почему) несут. Иногда (из озорства просто, а вовсе не надеясь, что будет хоть какой-то толк) рявкнешь, нахмуришься и паузу выдержишь, показывая всем своим видом свою непоколебимую решимость и уверенность..:) И О! Опять ничего нового.. та же реакция - притихнут, глазюки свои изумлённо выпучат.. типа новые вводные впитывают.

sasa999, Что касается Ваших вопросов. Если бы Вы читали Учебник не то, что несколько раз, а хотя бы раз, Вы бы эти детские вопросы здесь не задавали. Натрудитесь немного. И будут Вам ответы.

Korey, Не стоит, право, с таким остервенением. Повод вывалить негатив всегда найдётся. Причины иные.

Причина обращения: