[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 1114

 
pr0fess0r64


1. Нужно убрать из кода &&OrderSymbol()==Symbol()

2. Нужна нормализация бида и аска.

3. Проскальзывание лучше ставить не 10 пунктов, а вычислять динамически. Например, если ордер по золоту и этот инструмент ходит по 50 пунктов за тик, то 10 пунктов проскальзывания замучают Вас реквотами. Поэтому лучше вычислить размер минимального тика и умножить его на эти 10.

4. В код нужно вставить обработку ошибок. Иначе в случае сбоя будете не понимать причин, почему ордера не закрылись

 
drknn:


1. Нужно убрать из кода &&OrderSymbol()==Symbol()

2. Нужна нормализация бида и аска.

3. Проскальзывание лучше ставить не 10 пунктов, а вычислять динамически. Например, если ордер по золоту и этот инструмент ходит по 50 пунктов за тик, то 10 пунктов проскальзывания замучают Вас реквотами. Поэтому лучше вычислить размер минимального тика и умножить его на эти 10.

4. В код нужно вставить обработку ошибок. Иначе в случае сбоя будете не понимать причин, почему ордера не закрылись

это общий вид, а дотошностей можно вагон и маленькую тележку придумать.
 
pr0fess0r64:
Спасибо огромное, попробую в тестере, а по поводу модификации ордеров совета не найдется?
ошибки в журнале есть при модификации?
 

Куда посылает return?

Тут понятно, на 0 строку и ждем тик

int start()
  {
//----
   
//----
   return(0);
  }

тут вроде тоже понятно - останов

   if(Lot_s<=0){
    Alert("Не выбран лот!");
    return;

а тут?

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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(выражение); прекращает выполнение текущей функции с передачей результата. Выражение оператора заключается в круглые скобки и не должно содержать оператор присваивания.

 
Vinin:

return() никого никуда не посылает.

Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Использование return(выражение); прекращает выполнение текущей функции с передачей результата. Выражение оператора заключается в круглые скобки и не должно содержать оператор присваивания.

А, т. е. вместо явного присваивания ko результата передаем его через return? Вроде, понял, спасибо.
 
А как тогда правильно остановить работу советника при невыполнении условий? Не усыпить, а совсем остановить.
 
Abzasc:
А как тогда правильно остановить работу советника при невыполнении условий? Не усыпить, а совсем остановить.

Что значит "усыпить" и что значит "остановить"?
 
Vinin:

Что значит "усыпить" и что значит "остановить"?

Усыпить - sleep поставить, тогда он снова попытается запуститься.

Остановить - совсем, чтобы советник перестал работать (изменил "рожицу").

Например, советник под евробакс, а его бросил на евройену. Он проверяет символ, и при несоответствии выкидывает алерт и больше работать не пытается до перезапуска вручную.

 
Abzasc:

Усыпить - sleep поставить, тогда он снова попытается запуститься.

Остановить - совсем, чтобы советник перестал работать (изменил "рожицу").

Например, советник под евробакс, а его бросил на евройену. Он проверяет символ, и при несоответствии выкидывает алерт и больше работать не пытается до перезапуска вручную.


Зачем так сложно

Достаточно в функции старт() предусмотреть обработку условий

int start(){
  if (Symbol()!="EURUSD") {
     Alert("Советник должен работать только на EURUSD");
     return(0);
  }
  // Далее обработка, принятие решений

}
В данном случае закинув советника на не тот инструмент будете засыпаны Алертами, пока его (советник) не отключите сами

Можно еще добавить звук сирены, то тогда точно тут же его вырубите

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