3. Проскальзывание лучше ставить не 10 пунктов, а вычислять динамически. Например, если ордер по золоту и этот инструмент ходит по 50 пунктов за тик, то 10 пунктов проскальзывания замучают Вас реквотами. Поэтому лучше вычислить размер минимального тика и умножить его на эти 10.
4. В код нужно вставить обработку ошибок. Иначе в случае сбоя будете не понимать причин, почему ордера не закрылись
3. Проскальзывание лучше ставить не 10 пунктов, а вычислять динамически. Например, если ордер по золоту и этот инструмент ходит по 50 пунктов за тик, то 10 пунктов проскальзывания замучают Вас реквотами. Поэтому лучше вычислить размер минимального тика и умножить его на эти 10.
4. В код нужно вставить обработку ошибок. Иначе в случае сбоя будете не понимать причин, почему ордера не закрылись
это общий вид, а дотошностей можно вагон и маленькую тележку придумать.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Возвращает количество ордеров. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любой ордер) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), ko=0, ot;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot>1 && ot<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) ko++;
}
}
}
}
return(ko);
}
Значение кол-во ордеров - это ko, и след. функцию писать следом, используя ko? Что тут return делает?
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Использование return(выражение); прекращает выполнение текущей функции с передачей результата. Выражение оператора заключается в круглые скобки и не должно содержать оператор присваивания.
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Использование return(выражение); прекращает выполнение текущей функции с передачей результата. Выражение оператора заключается в круглые скобки и не должно содержать оператор присваивания.
А, т. е. вместо явного присваивания ko результата передаем его через return? Вроде, понял, спасибо.
Усыпить - sleep поставить, тогда он снова попытается запуститься.
Остановить - совсем, чтобы советник перестал работать (изменил "рожицу").
Например, советник под евробакс, а его бросил на евройену. Он проверяет символ, и при несоответствии выкидывает алерт и больше работать не пытается до перезапуска вручную.
Усыпить - sleep поставить, тогда он снова попытается запуститься.
Остановить - совсем, чтобы советник перестал работать (изменил "рожицу").
Например, советник под евробакс, а его бросил на евройену. Он проверяет символ, и при несоответствии выкидывает алерт и больше работать не пытается до перезапуска вручную.
Зачем так сложно
Достаточно в функции старт() предусмотреть обработку условий
int start(){
if (Symbol()!="EURUSD") {
Alert("Советник должен работать только на EURUSD");
return(0);
}
// Далее обработка, принятие решений
}
В данном случае закинув советника на не тот инструмент будете засыпаны Алертами, пока его (советник) не отключите сами
Можно еще добавить звук сирены, то тогда точно тут же его вырубите
1. Нужно убрать из кода &&OrderSymbol()==Symbol()
2. Нужна нормализация бида и аска.
3. Проскальзывание лучше ставить не 10 пунктов, а вычислять динамически. Например, если ордер по золоту и этот инструмент ходит по 50 пунктов за тик, то 10 пунктов проскальзывания замучают Вас реквотами. Поэтому лучше вычислить размер минимального тика и умножить его на эти 10.
4. В код нужно вставить обработку ошибок. Иначе в случае сбоя будете не понимать причин, почему ордера не закрылись
1. Нужно убрать из кода &&OrderSymbol()==Symbol()
2. Нужна нормализация бида и аска.
3. Проскальзывание лучше ставить не 10 пунктов, а вычислять динамически. Например, если ордер по золоту и этот инструмент ходит по 50 пунктов за тик, то 10 пунктов проскальзывания замучают Вас реквотами. Поэтому лучше вычислить размер минимального тика и умножить его на эти 10.
4. В код нужно вставить обработку ошибок. Иначе в случае сбоя будете не понимать причин, почему ордера не закрылись
Спасибо огромное, попробую в тестере, а по поводу модификации ордеров совета не найдется?
Куда посылает return?
Тут понятно, на 0 строку и ждем тик
тут вроде тоже понятно - останов
а тут?
Значение кол-во ордеров - это ko, и след. функцию писать следом, используя ko? Что тут return делает?return() никого никуда не посылает.
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Использование return(выражение); прекращает выполнение текущей функции с передачей результата. Выражение оператора заключается в круглые скобки и не должно содержать оператор присваивания.
return() никого никуда не посылает.
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Использование return(выражение); прекращает выполнение текущей функции с передачей результата. Выражение оператора заключается в круглые скобки и не должно содержать оператор присваивания.
А как тогда правильно остановить работу советника при невыполнении условий? Не усыпить, а совсем остановить.
Что значит "усыпить" и что значит "остановить"?
Что значит "усыпить" и что значит "остановить"?
Усыпить - sleep поставить, тогда он снова попытается запуститься.
Остановить - совсем, чтобы советник перестал работать (изменил "рожицу").
Например, советник под евробакс, а его бросил на евройену. Он проверяет символ, и при несоответствии выкидывает алерт и больше работать не пытается до перезапуска вручную.
Усыпить - sleep поставить, тогда он снова попытается запуститься.
Остановить - совсем, чтобы советник перестал работать (изменил "рожицу").
Например, советник под евробакс, а его бросил на евройену. Он проверяет символ, и при несоответствии выкидывает алерт и больше работать не пытается до перезапуска вручную.
Зачем так сложно
Достаточно в функции старт() предусмотреть обработку условий
В данном случае закинув советника на не тот инструмент будете засыпаны Алертами, пока его (советник) не отключите самиМожно еще добавить звук сирены, то тогда точно тут же его вырубите