[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 405

 
hoz:
  1. С чего бы то вдруг? Тут просто нужно через else, добавить, что функция возвращало ещё какое-то значение, что будет значить, что мол " Нет цены ". По ходу логично. Когда накидал функцию, думал больше о предыдущей логике, потом не обратил внимания на конец её. А почему функция 0 вернёт сама по себе что-то я не понял...

2. А зачем тогда Ask вообще (если уж говорить о цене покупки канкретно), если можно всегда использовать MarketInfo(fs_symbol, MODE_ASK) ? Ведь если так посмотреть, обращаясь к Ask нельзя быть уверенным что он точный в данный момент времени? 

1. Просто так. Функция объявлена как double, значит при вызове вернет double независимо от того, вызывался ли в ней return. Если добавить else... но пока этого else нет.

2. Если без разницы, нажать ли 3 клавиши  или 30, то и не нужны эти Bid и Ask. Если эксперт не делает длительных вычислений, то все нормально, удобно пользоваться Bid и Ask. А если делает длительные вычисления, то можно использовать RefreshRates(). Все можно делать несколькими способами.

 
hoz:


По ходу практически нам нужно другое, на сколько я понимаю. А нужно нам последние Ask и Bid серверные, а не локальные терминальные. Ведь так?

Вот потому тут я развёл дискуссию, чтоб раз и на всегда понять, как логичнее и правильнее это организовывать. Ибо теоритически то верно, а практически... 

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

 
После выполнения первого или второго оператора if, мне необходимо прервать следующие операторы if и передать управление в блок с другими торговыми критериями. В циклах есть прерывание оператором continue, но мне нужно прервать исполнение серии операторов. Как это сделать? Подскажите.
 
break; пробовали?
 
Добрый день. Я сейчас работаю над дипломом по торговым роботам. Ничего грандиозного изобретать не нужно, так как я экономист, а не программист. Но была идея, хотя я думаю, она много кому приходила связать parabolic sar и (так как sar не очень на флэтах) bollinger bands. в принципе со стандартными настройками, а покупать, когда свеча касается нижней границы BB (а параболика повляется снизу), а следующая закрывается выше предыдущей (а параболика отходит дальше от цены из-за accel и показывает тренд). То же самое сверху при продаже. Было бы интересно использовать трейлинг-стоп, настройки которого можно было бы задавать вручную... У кого-нибудь случайно нет подобной идеи уже в mql? или мало ли кто-нибудь может помочь, потому что я очень бы хотел реально это протестировать...заранее благодарю
 
Integer:

1. Просто так. Функция объявлена как double, значит при вызове вернет double независимо от того, вызывался ли в ней return. Если добавить else... но пока этого else нет.

2. Если без разницы, нажать ли 3 клавиши  или 30, то и не нужны эти Bid и Ask. Если эксперт не делает длительных вычислений, то все нормально, удобно пользоваться Bid и Ask. А если делает длительные вычисления, то можно использовать RefreshRates(). Все можно делать несколькими способами.

 

1. Да, я просто переутомился видать, вот и написал глупость..

2. Длительные это понятие относительное. Вы предлагаете замерять скорость вычислений среднюю?

 

Integer:

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

 Если предположить, как Вы написали, что у терминала последнее значение переменной рыночных данных, в нашем случае цены, соответствует последнему значению сервера, то получается терминал сам обновляет переменные рыночного окружения при наличии связи с сервером, а из этого следует, что функция RefreshRates() не нужна. Но это не так, потому что функция то есть, а значит, не всегда видать цены обновлены будут ,верно?

 Я не спорю, а спрашиваю, аргументируя свою точку зрения.. Прошу это заметить!

 
hoz:

 Если предположить, как Вы написали, что у терминала последнее значение переменной рыночных данных, в нашем случае цены, соответствует последнему значению сервера, то получается терминал сам обновляет переменные рыночного окружения при наличии связи с сервером, а из этого следует, что функция RefreshRates() не нужна. Но это не так, потому что функция то есть, а значит, не всегда видать цены обновлены будут ,верно?

 Я не спорю, а спрашиваю, аргументируя свою точку зрения.. Прошу это заметить!


Если во время расчетов в советнике пришли новые тики (при работе функции start()),  советник о них (тиках) не узнает. RefreshRates() позволяет использовать последние, обновленные цены, но эта функция не обращается к серверу. Обновляется рыночное окружение известное терминалу. Ни одна функция, кроме торговых, не обращается к серверу
 
Vinin:

Если во время расчетов в советнике пришли новые тики (при работе функции start()),  советник о них (тиках) не узнает. RefreshRates() позволяет использовать последние, обновленные цены, но эта функция не обращается к серверу. Обновляется рыночное окружение известное терминалу. Ни одна функция, кроме торговых, не обращается к серверу

Так если запрос локальный, а не к серверу, значит эта функция должно отрабатывать мгновенно! А выше было сказано, что функция RefreshRates() может не успеть обновить данные рыночного окружения...
 
hoz:

Так если запрос локальный, а не к серверу, значит эта функция должно отрабатывать мгновенно! А выше было сказано, что функция RefreshRates() может не успеть обновить данные рыночного окружения...

Она и отрабатывает. И обновляет, если есть что обновить. Но если нового тика не было, обновлять нечего
 
Vinin:

Она и отрабатывает. И обновляет, если есть что обновить. Но если нового тика не было, обновлять нечего


Так если нового тика не было, цена не изменится.. и есс-но прежние цены будут актуальны. Значит не нужно нечего усложнять!

А Вадим сверху писал, что типа нужно проверять этот момент. Но логики в его словах я не нашёл, и аргументации тоже. Странно... Получается где угодно я вставляю RefreshRates(), в тот же миг последние известные данные с терминала становяться используемыми вместо предыдущих, и всё идёт как нужно. При условии, что RefreshRates() вернула ТРУ. А если False значит, данные не изменились, и работает с предыдущими ценами... Я верно рассуждаю?

 Выходит, что не нужно заморачиваться. вызвал RefreshRates() и всё отработается с актуальными данными..

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