[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 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);
  }
  // Далее обработка, принятие решений

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

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