[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 375

 
Chiripaha:

Я не готов согласиться. - Потому что из такого положения теряется логика сохранения корректности работы и расчета советниками и денег и позиций. - Это раз. Второе. - Если у меня советник спит, к примеру, 100 миллисекунд, и в это время начинает работать другой, то, что же получится, что, как только пройдут эти 100 миллисекунд, то другой должен будет остановить свою работу... и передать на середине своей обратно этому и так бесконечно... С другой стороны. Я встречал (не редко) в советниках когда они на каждом блоке выполнения операций отправляют "спать" на минуты и по множеству раз. - Тогда, если в это время все остальные совы не работают, - тоже как-то неправильно. - Поэтому вопрос достаточно актуальный. Хотелось бы понимать логику работы в этот момент. Но в официальных документах детального разъяснения я не встретил.

 Ну а я готов согласится. Как вариант, изначально, когда появился mql4 ещё ни кто не думал о мультивалютниках, и о пачкам сов на одном терминале.. Так что есть вариант, что это нормально.

 

Chiripaha:

Но из двух зол я выбрал бы последнее. В этом случае я бы просто оставлял ту сову, в которой уверен. Если этого не делать, то все равно: хотя бы сохраняется корректность пересчетов, хотя и тормозиться их работа.

Логичнее использовать несколько сигналов, т.е. по каждому символу свой сигнал.. Тогда в массив собираем сколько нужно сигналов, и всё торгуется одним советником. Так как логика та же, то зачем много советников?

 

Chiripaha:

Проблема не настолько тривиальна, как кажется. - Дело в том, как показали мои опыты, что, когда снимается галочка "Разрешить советнику торговать", то работа советника не останавливается - так же проходят все расчеты на каждом тике. Просто сделки советника не выводятся к серверу. Но, если в этих расчетах напиханы эти "слипы" (не совсем корректно), то если таких советников стоит 5-10, то они конкретно могут тормозить исполнение актуального советника, который сейчас торгует.

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

Видимо да, эта кнопка "Разрешить советнику торговать" работает по назначению, только в случает если в коде эксперта это предусмотрено.
 
Chiripaha:

Я не готов согласиться. - Потому что из такого положения теряется логика сохранения корректности работы и расчета советниками и денег и позиций. - Это раз. Второе. - Если у меня советник спит, к примеру, 100 миллисекунд, и в это время начинает работать другой, то, что же получится, что, как только пройдут эти 100 миллисекунд, то другой должен будет остановить свою работу... и передать на середине своей обратно этому и так бесконечно... С другой стороны. Я встречал (не редко) в советниках когда они на каждом блоке выполнения операций отправляют "спать" на минуты и по множеству раз. - Тогда, если в это время все остальные совы не работают, - тоже как-то неправильно. - Поэтому вопрос достаточно актуальный. Хотелось бы понимать логику работы в этот момент. Но в официальных документах детального разъяснения я не встретил.

Но из двух зол я выбрал бы последнее. В этом случае я бы просто оставлял ту сову, в которой уверен. Если этого не делать, то все равно: хотя бы сохраняется корректность пересчетов, хотя и тормозиться их работа.

Проблема не настолько тривиальна, как кажется. - Дело в том, как показали мои опыты, что, когда снимается галочка "Разрешить советнику торговать", то работа советника не останавливается - так же проходят все расчеты на каждом тике. Просто сделки советника не выводятся к серверу. Но, если в этих расчетах напиханы эти "слипы" (не совсем корректно), то если таких советников стоит 5-10, то они конкретно могут тормозить исполнение актуального советника, который сейчас торгует.

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

Спасибо Arles за вопрос, что напомнил и актуализировал. Раньше у меня опыта не хватало понять что писали на эту тему. Сейчас заново полажу.


Не вдаваясь в тонкости процессорной обработки кода, остановимся на общей "картинке": во время Sleep() - пауза по дальнейшей обработке именно этого кода (все остальные коды обрабатываются в НЕЗАВИСИМЫХ параллельных потоках).
 
TarasBY:
Не вдаваясь в тонкости процессорной обработки кода, остановимся на общей "картинке": во время Sleep() - пауза по дальнейшей обработке именно этого кода (все остальные коды обрабатываются в НЕЗАВИСИМЫХ параллельных потоках).

Ну, вот... А это уже "засада". Если я правильно понял сказанное. - Уточню...

Если я правильно Вас понял, Игорь, то советники вообще обрабатываются не последовательно (как у меня получалось при моих опытах), а параллельно? И, если это так, то получается, что Arles прав и могут открываться сразу 2 сделки параллельно, если каждый сигнал получил нужные условия?

Мне почему это важно - это поможет правильно организовать работу. Когда не понимаешь, что и как происходит, можно накосячить прилично.
 

Тоже, навскидку, в тестере Sleep() не работает, это даже где-то в документации написано..

Запуск советника происходит в функции Start() c приходом каждого тика. Если у Вас стоит десяток советников, попробуйте обработать ошибки, должны выдаваться. Если Вы напхаете кучу запросов к ДЦ, скорей всего будет ошибка типа "Поток занят".

По поводу галочки "Разрешит советнику торговать" . Да, советник работает, но только сделки запрещены, смотрите журнал, в нем будет всё написано. 

 

Здравствуйте, подскажите что это за скрипт

//+------------------------------------------------------------------+
//|                                                        close.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property show_confirm

//+------------------------------------------------------------------+
//| script "close first market order if it is first in the list"     |
//+------------------------------------------------------------------+
int start()
  {
   bool   result;
   double price;
   int    cmd,error;
//----
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
      cmd=OrderType();
      //---- first order is buy or sell
      if(cmd==OP_BUY || cmd==OP_SELL)
        {
         while(true)
           {
            if(cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
   else Print( "Error when order select ", GetLastError());
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
alex12:

Здравствуйте, подскажите что это за скрипт

Там же написано: "Закрыть первый рыночный ордер, если он первый в списке".
 
alex12:

Здравствуйте, подскажите что это за скрипт


Алекс, тут же написано:

script "close first market order if it is first in the list"

Скрипт закрывающий первый рыночный ордер, если это первый ордер в списке.

Т.е. как я понимаю из логики кода, то скорее первый открытый ордер закроется. Если у Вас, к примеру, открыто 10 ордеров, то закроется ордер номер 1. Т.е. тот, который был открыт первым.

 
Chiripaha:

Ну, вот... А это уже "засада". Если я правильно понял сказанное. - Уточню...

Если я правильно Вас понял, Игорь, то советники вообще обрабатываются не последовательно (как у меня получалось при моих опытах), а параллельно? И, если это так, то получается, что Arles прав и могут открываться сразу 2 сделки параллельно, если каждый сигнал получил нужные условия?

Мне почему это важно - это поможет правильно организовать работу. Когда не понимаешь, что и как происходит, можно накосячить прилично.

Сергей, а где Вы взяли такой постулат что "Все советники терминалом обрабатываются последовательно"? - в век параллельных вычислений. ;)

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

P.S. Где-то читал (от разработчика), что текущий билд МТ4 может параллельно обрабатывать до 8-ми (если мне не изменяет память) торговых приказов, хотя с "моей колокольни" не понятно при чём здесь пользовательский терминал - это регулирует сервер ДЦ ("на другом конце провода"). ;)

 
Chiripaha:

... 

Т.е. как я понимаю из логики кода, то скорее первый открытый ордер закроется. Если у Вас, к примеру, открыто 10 ордеров, то закроется ордер номер 1. Т.е. тот, который был открыт первым.


Да. Но только если этот первый ордер рыночный. Если отложенный, то ничего не будет. 
 
TarasBY:

Сергей, а где Вы взяли такой постулат что "Все советники терминалом обрабатываются последовательно"? - в век параллельных вычислений. ;)

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

В том то и дело (за правильность постановки параметров эксперимента). Именно я поэтому и задаю вопросы, т.к. я не уверен в собственных силах и поэтому пытаюсь выявить - возможно, что-то я неправильно делал, если эти результаты расходятся. Это, скорее, к вопросу тестирования - в такие моменты, казалось бы правильно написанная программа выдает сбои и понимаешь, что нужно где-то искать.

У меня эти "опыты" получились случайно. Я писал программы тоже для параллельной работы - сейчас я ушел от этого способа, т.к. у меня это эффективности не увеличило (может в других проектах реализуется). В итоге получалась такая штука, что пока первая программа не будет обработана - не получатся данные то вторая не запускалась (или точнее, ругалась). И последовательность эта зависела от того, на какое окно я поставил (т.е. в каком порядке) блоки советников. - Отсюда вывод - Раз последовательность окон важна, значит, советники обрабатываются последовательно, а не параллельно. И последовательность эта зависит от нумерации окон в списке терминала.

В этом вся сущность полученного опыта была.

Но, опять же, возможно, это неправильная интерпретация полученных мной результатов. Поэтому и настойчиво пытаюсь разрешить теперь уже и этот вопрос, а не только с "слипом" связанный.