Я писал в сервисдеск чтобы в документацию внесли такую фишку, что можно при закрытии ордера использовать OrderClosePrice() но они молчат. Может решают не отключить-ли такой прибамбас...
И одно незначительное замечание по коду, строка
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
равнозначна строке
if(OrderType() < OP_SELLLIMIT)
но проверка короче...
...
но проверка короче...
В каком смысле короче? Но не факт, что лучше
А чем хуже?
Очень интересно, вы хотите, чтобы я ответил на ваш вопрос, но на мой вопрос не отвечая?
Дмитрий, я уже говорил тебе что я самоучка. Только в институте чуток учили васик, а С# и подобные языки вообще не знаю. Поэтому не хотелось-бы повторять всё что я читал на форумах по этому поводу. В этом случае можно и в ахинею поверить и выдавать её за истину, но мне не хотелось-бы выглядеть "комсомольцем".
Ну как минимум в проверке if(OrderType() == OP_BUY || OrderType() == OP_SELL) две проверки, а в OrderType() < OP_SELLLMIT только одна. То-есть в два раза меньше затрат времени.
1. В следующем выражении:
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
предполагая, что в природе существует примерно одинаковое количество ордеров buy и ордеров sell в половине случаев будет выполняться только половина выражения. Если OrderType() == OP_BUY, а знак |, то второе выражение не будет вычисляться.
2. Проверка на равенство менее затратна, чем проверка на больше или меньше.
3. Предопределенные константы подразумевают только какое-то значение и больше не несут в себе никакого смысла. Поэтому, используя предопределенные константы следует выполнять проверку только на равенство.
1. В следующем выражении:
предполагая, что в природе существует примерно одинаковое количество ордеров buy и ордеров sell в половине случаев будет выполняться только половина выражения. Если OrderType() == OP_BUY, а знак |, то второе выражение не будет вычисляться.
2. Проверка на равенство менее затратна, чем проверка на больше или меньше.
3. Предопределенные константы подразумевают только какое-то значение и больше не несут в себе никакого смысла. Поэтому, используя предопределенные константы следует выполнять проверку только на равенство.
Наконец-то я сподобился проверить что пишут и пришёл к выводу что все мнения сугубо личные.
Вот скрипт
/********************Script program start function********************/ void OnStart() { ulong start = GetMicrosecondCount(); int i, n = 0, t = OrdersTotal(); for(i = 0; i <= 100000; i++) { for(n = 0; n < t; n++) { if(OrderSelect(n, SELECT_BY_POS)) if(OrderType() == OP_SELL || OrderType() == OP_BUY) int k = i;//OrderType() < OP_SELLLIMIT) int k = i;// } } static ulong time = 0; time = MathMax(GetMicrosecondCount()-start, time); Alert("Ордеров ", n, " if(OrderType() == OP_SELL || OrderType() == OP_BUY) ", time); }/********************************************************************/
Вот результат
Если разница и есть, то настолько незначительна, что заострять на этом внимание себе дороже.
Дмитрий, я уже говорил тебе что я самоучка. Только в институте чуток учили васик, а С# и подобные языки вообще не знаю. Поэтому не хотелось-бы повторять всё что я читал на форумах по этому поводу. В этом случае можно и в ахинею поверить и выдавать её за истину, но мне не хотелось-бы выглядеть "комсомольцем".
Ну как минимум в проверке if(OrderType() == OP_BUY || OrderType() == OP_SELL) две проверки, а в OrderType() < OP_SELLLMIT только одна. То-есть в два раза меньше затрат времени.
влезу в ваш весёлый диалог :-)
Господа, вы сравниваете муравьёв на фоне Эвереста - время выполнения любых операторов уничижающе мало по сравнению с OrderClose.
вот так:
OrderType() < OP_SELLLMIT
Иначе в весёлый день будут пересмотрены коды операций и микрооптимизация превратит программу в тыкву. Если память не изменяет такое уже было с ENUM_TIMEFRAME при переходе MT4->MT5.
А вот чего действительно нехватает скрипту - это вызова RefreshRates и повторной попытки, если при закрытии получена ошибка Requote. Закрытие - это операция непредсказуемой длительности и цена вполне успеет убежать за пределы проскальзывания.
влезу в ваш весёлый диалог :-)
Господа, вы сравниваете муравьёв на фоне Эвереста - время выполнения любых операторов уничижающе мало по сравнению с OrderClose.
вот так:
OrderType() < OP_SELLLMIT
Иначе в весёлый день будут пересмотрены коды операций и микрооптимизация превратит программу в тыкву. Если память не изменяет такое уже было с ENUM_TIMEFRAME при переходе MT4->MT5.
А вот чего действительно нехватает скрипту - это вызова RefreshRates и повторной попытки, если при закрытии получена ошибка Requote. Закрытие - это операция непредсказуемой длительности и цена вполне успеет убежать за пределы проскальзывания.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Close All:
Автор: Jiayu Fu