Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 321

 
C-4:

Еще раз (читайте внимательно):

В MetaTrader4 можно закрывать ордера лишь последовательно: отправили приказ на закрытие ордера, дождались его исполнения, перешли к следующему ордеру и т.д. По этой причине  время на закрытие пачки ордеров в MetaTrader4 значительно и тривиальным путем его нельзя снизить. Однако, можно загрузить несколько экспертов каждый на свой график и сделать так, что бы они могли обмениваться информацией друг с другом и по общей команде закрывали ордера. Каждый эксперт закрывал бы ордера только на своем инструменте. Благодаря тому, что торговых потоков в MetaTrader4 несколько, они бы не блокировали друг друга и отправляли приказы параллельно друг другу, за счет чего общая скорость существенно бы возросла. Однако, организация такого пула экспертов сложна, и судя по вашему уровню знаний советовать Вам нечто подобное я бы не стал.

Если по-прежнему Вам кажется что я написал слишком много букафф, вот краткое резюме:

1. ответ на ваш вопрос отрицательный, запустить скрипт из эксперта нельзя. 

2. Повысить скорость исполнения торговых приказов в MetaTrader4 не прибегая к сложным методам нельзя.

3. Нормальное решение вашего вопроса возможно только с помощью функции OrderSendAsync, которой в MetaTrader4 нет.

Большое спасибо за подробный ответ! Если не затруднит, поделитесь мыслями о такой идеи:

Добавить в эксперт, который закрывает все ордера по общему профиту, 2 параметра для сортировки ордеров:
(1 параметр - 1-сортировка по магику по убыванию или 2-по возрастанию и 2 - 0-sell и buy, 1-sell ордера, 2-buy ордера)
Открыть 4 терминала с 1 счетом и 1 общим графиком одной пары, что бы тики совпадали, и задать разные параметры, типа: 1-1, 1-2, 2-1, 2-2
таким образом получится разбивка на 4 потока: минимальный магик селл, минимальный магик бай, максимальный магик селл, максимальный магик бай

Или я снова в чем то туплю? И да, о моем уровне знаний Вы судите верно!

 
Novikov:

Большое спасибо за подробный ответ! Если не затруднит, поделитесь мыслями о такой идеи:

Добавить в эксперт, который закрывает все ордера по общему профиту, 2 параметра для сортировки ордеров:
(1 параметр - 1-сортировка по магику по убыванию или 2-по возрастанию и 2 - 0-sell и buy, 1-sell ордера, 2-buy ордера)
Открыть 4 терминала с 1 счетом и 1 общим графиком одной пары, что бы тики совпадали, и задать разные параметры, типа: 1-1, 1-2, 2-1, 2-2
таким образом получится разбивка на 4 потока: минимальный магик селл, минимальный магик бай, максимальный магик селл, максимальный магик бай

Или я снова в чем то туплю? И да, о моем уровне знаний Вы судите верно!

Да, так можно сделать. Но несколько терминалов запускать не к чему. Запустите один терминал, а в нем 4 окна. На каждое окно повесьте по одному и тому же роботу. В качестве одного из параметров этого робота используйте числа: 1-4. Т.е. на первое окно повесьте робота с параметром равным 1, на второе с равным двум и т.д. Когда придет время закрыть ордера, каждый из роботов сравнит маджик выбранного ордера с маджиком параметра и закроет его. Ордера с другими маджиками будут предоставлены для закрытия другим экспертам.
 
C-4:
Да, так можно сделать. Но несколько терминалов запускать не к чему. Запустите один терминал, а в нем 4 окна. На каждое окно повесьте по одному и тому же роботу. В качестве одного из параметров этого робота используйте числа: 1-4. Т.е. на первое окно повесьте робота с параметром равным 1, на второе с равным двум и т.д. Когда придет время закрыть ордера, каждый из роботов сравнит маджик выбранного ордера с маджиком параметра и закроет его. Ордера с другими маджиками будут предоставлены для закрытия другим экспертам.

На форуме mt5, на то что я изначально рассматривал 4 окна, как Вы предлагаете, мне один программист ответил: "Терминал-то один. Значит и "дырочка" одна", т.е. в терминале для обращения к серверу есть только одна маленькая "дырочка", размером в один запрос, которую и используют все советники и скрипты, которые крутятся в терминале. И пока один запрос не обработан больше никто не может получить доступ к серверу.

Так все же, как будет лучше и вернее - 4 графика в 1 терминале или все же 4 терминала?

 
Novikov:

На форуме mt5, на то что я изначально рассматривал 4 окна, как Вы предлагаете, мне один программист ответил: "Терминал-то один. Значит и "дырочка" одна", т.е. в терминале для обращения к серверу есть только одна маленькая "дырочка", размером в один запрос, которую и используют все советники и скрипты, которые крутятся в терминале. И пока один запрос не обработан больше никто не может получить доступ к серверу.

Так все же, как будет лучше и вернее - 4 графика в 1 терминале или все же 4 терминала?

Вы сами подумайте над ответом этого "программиста". Если бы это было так, то торговать несколькими экспертами в одном терминале было бы невозможно. Они постоянно получали бы context busy, т.е. блокировали бы друг друга. Раньше в лохматых версиях МТ4 действительно была такая ошибка и на нее можно было нарваться, но сейчас на сколько я знаю ее даже убрали, потому что теперь она стала неактуальна. Многопоточность исполнения приказов в МТ4 была существенно расширена и уже давно.

В любом случае, пишите как я посоветовал, если что не сложно будет перенести часть экспертов на другой терминал. 

 
Novikov:

На форуме mt5, на то что я изначально рассматривал 4 окна, как Вы предлагаете, мне один программист ответил: "Терминал-то один. Значит и "дырочка" одна", т.е. в терминале для обращения к серверу есть только одна маленькая "дырочка", размером в один запрос, которую и используют все советники и скрипты, которые крутятся в терминале. И пока один запрос не обработан больше никто не может получить доступ к серверу.

Так все же, как будет лучше и вернее - 4 графика в 1 терминале или все же 4 терминала?

Где вы таких "программистов" находите?
 

Уважаемые, еще вопросик: поможет ли функция OrderCloseBy для ускорения закрытия большой пачки ордеров?

Например: при достижении заданного профита, на паре(ах) открыть еще 1 ордер, что бы уровнять лотность бай и селл ордеров, а потом запустить "закрытие перекрытых ордеров".

Котировки 5ти значные.

 

Ребята подскажите по такому вопросу, возможно, он организационного характера. Код индикатора показать не могу. Он написан грамотно, раньше всё тестировалось.

Начало вопроса отсюда: https://www.mql5.com/ru/forum/6343/page323

Установил терминал с сайта MQ - там по умолчанию был предложен демо сервер Альп. В итоге при запуске теста на евробаксе:

Как я понял - это ожидание данных с фунта-доллара. Сделки не открываются ни где.

Далее при запуске на фунто-баксе пишет:

ожидание данных для USDJPY.

 

И только при запуске на USDJPY - нет никакого ожидания данных - но при этом всё равно сделки не открываются.

Явно в коде пару для открытия сделок не указывал, т.е. для примера

всё для любого символа _Symbol. Да и дело тут не в вопросе открытия ордеров... В чем причина может быть? Благодарю.

 for(int i=0;i<10;i++)
     {
      volume=NormalizeDouble(volume,1);
      if(volume<=0) break;
      if(Type==POSITION_TYPE_SELL)
        {
         request.type=ORDER_TYPE_SELL;
         request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
         if(TP!=0) takeprofit = request.price-TP*_Point;
         if(SL!=0) stoploss = request.price+SL*_Point;
        }
      if(Type==POSITION_TYPE_BUY)
        {
         request.type=ORDER_TYPE_BUY;
         request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
         if(TP!=0) takeprofit = request.price+TP*_Point;
         if(SL!=0) stoploss = request.price-SL*_Point;
        }
      request.action = TRADE_ACTION_DEAL;
      request.symbol = _Symbol;
      request.volume = MathMin(volume,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX));
      request.sl = stoploss;
      request.tp = takeprofit;
      request.deviation=SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
      request.type_filling=ORDER_FILLING_FOK;
      request.comment=" ";//DoubleToString(Money,2)+"$";
      if(!OrderCheck(request,check))
        {
         if(check.margin_level<100) volume-=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
 

Причём всё написано грамотно, хэндлы и всё остальное обозначено, индикатор присваивает веса каждому инструменту,  в итоге получается типа кластерного анализа. В тестере не хочет работать. В чём может быть причина? Благодарю.

Причём агенты работают исправно, всё заряжено и готово к старту...


 
R0MAN:

Причём всё написано грамотно, хэндлы и всё остальное обозначено, индикатор присваивает веса каждому инструменту,  в итоге получается типа кластерного анализа. В тестере не хочет работать. В чём может быть причина? Благодарю.

Причём агенты работают исправно, всё заряжено и готово к старту...


Напишите в сервисдеск. Им, правда, придется дать код.
Причина обращения: