[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 30

 
AndrewX:

Подскажите как в условии открытия позиции правильно задать проверку на то - существует ли открытая поза по данному инструменту или нет. И если поза по инструменту есть(любая селл или бай), то открытие не происходит в противном случае сигнал на открытие отрабатывается?

Вот код (как я думаю, отвечающий за открытие поз):

Вроде по логике правильно, но не работает все равно открывает по несколько поз по одному инструменту.

P.S. Я не программист. Если можно поподробнее объясните чайнику.


Это не сложно. Лучше всего организовать 2 подпрограммы, которые подсчитывают ордера.

// =================================================================================================
// ************************* Счётчики ордеров ******************************************************
// =================================================================================================


//=========== SchBuy()  ===============================
//  Функция возвращает количество Buy-ордеров
//   SchBuy      - счётчик Buy ордеров
//-----------------------------------------------------------
int SchBuy(int MAGIC){
  string SMB=Symbol();
  int SchBuy=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--) {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGIC){ continue;}
      if(OrderType()==OP_BUY){ 
        SchBuy++;
      }  
    }
  }
  return(SchBuy);
}                  
//==================================================================================================


//=========== SchSell()  ===============================
//  Функция возвращает количество Sell-ордеров
//  SchSell  - счётчик Sell ордеров
//-----------------------------------------------------------
int SchSell(int MAGIC){
  string SMB=Symbol();
  int SchSell=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue;} 
      if(OrderType()==OP_SELL){
        SchSell++;
      }
    }
  }
 return(SchSell);     
}                  
//==================================================================================================

Далее, в самом коде пришем:

if(SchBuy(MAGIC)+SchSell(MAGIC)<=0){
// ордеров нет - устанавливаем ордер при наличии торгового сигнала
}

Константу MAGIC лучше объявить в пользовательских переменных. Вот так:

extern int      MAGIC=467223; // У ордеров открытых вручную MAGIC=0
 

Попробовал


if (NumberOfPositions(Symbol_1,-1,Magic)<1

все равно не пашет
 
drknn:


Это не сложно. Лучше всего организовать 2 подпрограммы, которые подсчитывают ордера.

Далее, в самом коде пришем:

Константу MAGIC лучше объявить в пользовательских переменных. Вот так:

Спасибо посмотрю, но для меня это наверное сложновато.
 
AndrewX:
Спасибо посмотрю, но для меня это наверное сложновато.

К этому посту я прицепил файл советника. Посмотрите.
Файлы:
 
Доброе утро ! Может, мой вопрос по поводу того, что не идёт оптимизация - сложный или не представляет никакого интереса ?
 
volshebnik:
Доброе утро ! Может, мой вопрос по поводу того, что не идёт оптимизация - сложный или не представляет никакого интереса ?

Возможных причин для этого множество. Начиная от тривиального - отсутствие истории до варианта - нет прибыльных вариантов. Хотя может бть и проще - ошибка в советнике
 

Скажите пожалуйста, если робот создает отложенные ордера.

Команды по отложенным ордерам псылаются на сервер.

Отображаются ли на терминале отложенные ордера поставленные в очередь?

Таж же, как и если бы я установил отложенные ордера вручную? открытые ордера сверху, снизу отложенные ордера поставленные в очередь? 

 
Jaguar1974:

Скажите пожалуйста, если робот создает отложенные ордера.

Команды по отложенным ордерам псылаются на сервер.

Отображаются ли на терминале отложенные ордера поставленные в очередь?

Таж же, как и если бы я установил отложенные ордера вручную? открытые ордера сверху, снизу отложенные ордера поставленные в очередь?


Что значит поставленные в очередь? Советник посылает серверу приказ установить отложенный ордер. Если с параметрами приказа всё в порядке, то сервер устанавливает отложку, что тут же отображается в терминале. Если советник посылает приказ расставить отложки с определённым шагом (делает это через цикл), то каждый новый приказ обрабатывается сервером отдельно. Именно приказы встают в очередь - советник приказал - сервер ответил. Советник снова приказал и снова ждёт ответа сервера.

Что значт ордера, поставленные в очередь? Что Вы под этим подразумеваете?

 
Vinin:

Возможных причин для этого множество. Начиная от тривиального - отсутствие истории до варианта - нет прибыльных вариантов. Хотя может бть и проще - ошибка в советнике
Я проверил - история минуток есть с 1999 года. Галочка стоит показывать все варианты (неприбыльные тоже). Ставлю на оптимизацию даже только один параметр МА, например от 100 до 110 и всё - оптимизация "умирает" - нет ни результатов, ни графика.... Не говоря уже о включении других параметров.
 
volshebnik:
Я проверил - история минуток есть с 1999 года. Галочка стоит показывать все варианты (неприбыльные тоже). Ставлю на оптимизацию даже только один параметр МА, например от 100 до 110 и всё - оптимизация "умирает" - нет ни результатов, ни графика.... Не говоря уже о включении других параметров.

Надо советник смотреть. Так ничего сказать не получится
Причина обращения: