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(). Все можно делать несколькими способами.
По ходу практически нам нужно другое, на сколько я понимаю. А нужно нам последние Ask и Bid серверные, а не локальные терминальные. Ведь так?
Вот потому тут я развёл дискуссию, чтоб раз и на всегда понять, как логичнее и правильнее это организовывать. Ибо теоритически то верно, а практически...
Сервер где-то там, а нам дан терминал для контакта с сервером. Если связь есть, значит последняя цена в терминале будет соответствовать последней цене на сервере. Если же связи нет, то и без разницы какие там вообще цены.
После выполнения первого или второго оператора if, мне необходимо прервать следующие операторы if и передать управление в блок с другими торговыми критериями. В циклах есть прерывание оператором continue, но мне нужно прервать исполнение серии операторов. Как это сделать? Подскажите.
Добрый день. Я сейчас работаю над дипломом по торговым роботам. Ничего грандиозного изобретать не нужно, так как я экономист, а не программист. Но была идея, хотя я думаю, она много кому приходила связать parabolic sar и (так как sar не очень на флэтах) bollinger bands. в принципе со стандартными настройками, а покупать, когда свеча касается нижней границы BB (а параболика повляется снизу), а следующая закрывается выше предыдущей (а параболика отходит дальше от цены из-за accel и показывает тренд). То же самое сверху при продаже. Было бы интересно использовать трейлинг-стоп, настройки которого можно было бы задавать вручную... У кого-нибудь случайно нет подобной идеи уже в mql? или мало ли кто-нибудь может помочь, потому что я очень бы хотел реально это протестировать...заранее благодарю
1. Просто так. Функция объявлена как double, значит при вызове вернет double независимо от того, вызывался ли в ней return. Если добавить else... но пока этого else нет.
2. Если без разницы, нажать ли 3 клавиши или 30, то и не нужны эти Bid и Ask. Если эксперт не делает длительных вычислений, то все нормально, удобно пользоваться Bid и Ask. А если делает длительные вычисления, то можно использовать RefreshRates(). Все можно делать несколькими способами.
1. Да, я просто переутомился видать, вот и написал глупость..
2. Длительные это понятие относительное. Вы предлагаете замерять скорость вычислений среднюю?
Integer:
Сервер где-то там, а нам дан терминал для контакта с сервером. Если связь есть, значит последняя цена в терминале будет соответствовать последней цене на сервере. Если же связи нет, то и без разницы какие там вообще цены.
Если предположить, как Вы написали, что у терминала последнее значение переменной рыночных данных, в нашем случае цены, соответствует последнему значению сервера, то получается терминал сам обновляет переменные рыночного окружения при наличии связи с сервером, а из этого следует, что функция RefreshRates() не нужна. Но это не так, потому что функция то есть, а значит, не всегда видать цены обновлены будут ,верно?
Я не спорю, а спрашиваю, аргументируя свою точку зрения.. Прошу это заметить!
Если предположить, как Вы написали, что у терминала последнее значение переменной рыночных данных, в нашем случае цены, соответствует последнему значению сервера, то получается терминал сам обновляет переменные рыночного окружения при наличии связи с сервером, а из этого следует, что функция RefreshRates() не нужна. Но это не так, потому что функция то есть, а значит, не всегда видать цены обновлены будут ,верно?
Я не спорю, а спрашиваю, аргументируя свою точку зрения.. Прошу это заметить!
Если во время расчетов в советнике пришли новые тики (при работе функции start()), советник о них (тиках) не узнает. RefreshRates() позволяет использовать последние, обновленные цены, но эта функция не обращается к серверу. Обновляется рыночное окружение известное терминалу. Ни одна функция, кроме торговых, не обращается к серверу
Если во время расчетов в советнике пришли новые тики (при работе функции start()), советник о них (тиках) не узнает. RefreshRates() позволяет использовать последние, обновленные цены, но эта функция не обращается к серверу. Обновляется рыночное окружение известное терминалу. Ни одна функция, кроме торговых, не обращается к серверу
Так если запрос локальный, а не к серверу, значит эта функция должно отрабатывать мгновенно! А выше было сказано, что функция RefreshRates() может не успеть обновить данные рыночного окружения...
Так если запрос локальный, а не к серверу, значит эта функция должно отрабатывать мгновенно! А выше было сказано, что функция RefreshRates() может не успеть обновить данные рыночного окружения...
Она и отрабатывает. И обновляет, если есть что обновить. Но если нового тика не было, обновлять нечего
Она и отрабатывает. И обновляет, если есть что обновить. Но если нового тика не было, обновлять нечего
Так если нового тика не было, цена не изменится.. и есс-но прежние цены будут актуальны. Значит не нужно нечего усложнять!
А Вадим сверху писал, что типа нужно проверять этот момент. Но логики в его словах я не нашёл, и аргументации тоже. Странно... Получается где угодно я вставляю RefreshRates(), в тот же миг последние известные данные с терминала становяться используемыми вместо предыдущих, и всё идёт как нужно. При условии, что RefreshRates() вернула ТРУ. А если False значит, данные не изменились, и работает с предыдущими ценами... Я верно рассуждаю?
Выходит, что не нужно заморачиваться. вызвал RefreshRates() и всё отработается с актуальными данными..
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(). Все можно делать несколькими способами.
По ходу практически нам нужно другое, на сколько я понимаю. А нужно нам последние Ask и Bid серверные, а не локальные терминальные. Ведь так?
Вот потому тут я развёл дискуссию, чтоб раз и на всегда понять, как логичнее и правильнее это организовывать. Ибо теоритически то верно, а практически...
Сервер где-то там, а нам дан терминал для контакта с сервером. Если связь есть, значит последняя цена в терминале будет соответствовать последней цене на сервере. Если же связи нет, то и без разницы какие там вообще цены.
1. Просто так. Функция объявлена как double, значит при вызове вернет double независимо от того, вызывался ли в ней return. Если добавить else... но пока этого else нет.
2. Если без разницы, нажать ли 3 клавиши или 30, то и не нужны эти Bid и Ask. Если эксперт не делает длительных вычислений, то все нормально, удобно пользоваться Bid и Ask. А если делает длительные вычисления, то можно использовать RefreshRates(). Все можно делать несколькими способами.
1. Да, я просто переутомился видать, вот и написал глупость..
2. Длительные это понятие относительное. Вы предлагаете замерять скорость вычислений среднюю?
Сервер где-то там, а нам дан терминал для контакта с сервером. Если связь есть, значит последняя цена в терминале будет соответствовать последней цене на сервере. Если же связи нет, то и без разницы какие там вообще цены.
Если предположить, как Вы написали, что у терминала последнее значение переменной рыночных данных, в нашем случае цены, соответствует последнему значению сервера, то получается терминал сам обновляет переменные рыночного окружения при наличии связи с сервером, а из этого следует, что функция RefreshRates() не нужна. Но это не так, потому что функция то есть, а значит, не всегда видать цены обновлены будут ,верно?
Я не спорю, а спрашиваю, аргументируя свою точку зрения.. Прошу это заметить!
Если предположить, как Вы написали, что у терминала последнее значение переменной рыночных данных, в нашем случае цены, соответствует последнему значению сервера, то получается терминал сам обновляет переменные рыночного окружения при наличии связи с сервером, а из этого следует, что функция RefreshRates() не нужна. Но это не так, потому что функция то есть, а значит, не всегда видать цены обновлены будут ,верно?
Я не спорю, а спрашиваю, аргументируя свою точку зрения.. Прошу это заметить!
Если во время расчетов в советнике пришли новые тики (при работе функции start()), советник о них (тиках) не узнает. RefreshRates() позволяет использовать последние, обновленные цены, но эта функция не обращается к серверу. Обновляется рыночное окружение известное терминалу. Ни одна функция, кроме торговых, не обращается к серверу
Если во время расчетов в советнике пришли новые тики (при работе функции start()), советник о них (тиках) не узнает. RefreshRates() позволяет использовать последние, обновленные цены, но эта функция не обращается к серверу. Обновляется рыночное окружение известное терминалу. Ни одна функция, кроме торговых, не обращается к серверу
Так если запрос локальный, а не к серверу, значит эта функция должно отрабатывать мгновенно! А выше было сказано, что функция RefreshRates() может не успеть обновить данные рыночного окружения...
Так если запрос локальный, а не к серверу, значит эта функция должно отрабатывать мгновенно! А выше было сказано, что функция RefreshRates() может не успеть обновить данные рыночного окружения...
Она и отрабатывает. И обновляет, если есть что обновить. Но если нового тика не было, обновлять нечего
Она и отрабатывает. И обновляет, если есть что обновить. Но если нового тика не было, обновлять нечего
Так если нового тика не было, цена не изменится.. и есс-но прежние цены будут актуальны. Значит не нужно нечего усложнять!
А Вадим сверху писал, что типа нужно проверять этот момент. Но логики в его словах я не нашёл, и аргументации тоже. Странно... Получается где угодно я вставляю RefreshRates(), в тот же миг последние известные данные с терминала становяться используемыми вместо предыдущих, и всё идёт как нужно. При условии, что RefreshRates() вернула ТРУ. А если False значит, данные не изменились, и работает с предыдущими ценами... Я верно рассуждаю?
Выходит, что не нужно заморачиваться. вызвал RefreshRates() и всё отработается с актуальными данными..