Бета-тестирование MetaTrader 5 началось! - страница 120
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
И не понятно почему при открытии и закрытии позиции, функция OnTrade() выполняется два раза подряд. А в остальных (модификация, отложник и тд) случаях один раз.
Приходят два события - одно на изменение в списке ордеров, второе на изменение в списке позиций. Обычно к моменту обработки второго события все необходимые изменения уже отслеживаются в процессе обработки первого события. Но теоретически, это может быть и не так. Например, выставлена заявка на покупкку по биржевому инструменту с условием обязательной заливки всего объема. необходимый объем не был найден на одной встречной заявке, тогда формируется еще одна заявка на остаточный объем. В итоге на один OrderSend() может придти и два, и три и более торговых событий.
Приходят два события - одно на изменение в списке ордеров, второе на изменение в списке позиций. Обычно к моменту обработки второго события все необходимые изменения уже отслеживаются в процессе обработки первого события. Но теоретически, это может быть и не так. Например, выставлена заявка на покупкку по биржевому инструменту с условием обязательной заливки всего объема. необходимый объем не был найден на одной встречной заявке, тогда формируется еще одна заявка на остаточный объем. В итоге на один OrderSend() может придти и два, и три и более торговых событий.
Теперь понятно. Спасибо.Последняя справка которую я скачал и она нормально открылась (остальные не хотят).... :(
Ну да тоже не открывается... зазипованная открывалась.
При совершении сделок иногда полный ступор на 1-2 минуты, комп. не реагирует на нажатие кнопок, клики мыши.
А что функцию AccountFreeMarginCheck() убрали навсегда, ее не будет? Или подождать - появится?
А что функцию AccountFreeMarginCheck() убрали навсегда, ее не будет? Или подождать - появится?
Возможно, появится. Пока не решено.
Что касается торгового потока. Поясню. Интересует эффективный и надежный способ открытия нескольких позиций подряд с минимальным временным разрывом. Это необходимо при использовании мультивалютных советников и, особенно арбитража.
Вот такой отвлеченный пример:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool OpenArbitrage()
{
string SMain="EURUSD";//ведущий
string SPrim="GBPUSD";//ведомый
//проверяем возможность открытия на обоих инструментах
if(SymbolInfoInteger(SMain,SYMBOL_TRADE_MODE)!=SYMBOL_TRADE_MODE_FULL)return(false);//проверяем первый инструмент на возможность открытия
if(SymbolInfoInteger(SPrim,SYMBOL_TRADE_MODE)!=SYMBOL_TRADE_MODE_FULL)return(false);//проверяем второй инструмент на возможность открытия
//установим параметры первого инструмента
m_request0.action =TRADE_ACTION_DEAL;
m_request0.symbol =SMain;
m_request0.volume =0.1;
m_request0.type =ORDER_TYPE_BUY;//тут покупаем
m_request0.sl =0.0;
m_request0.tp =0.0;
m_request0.type_filling=ORDER_FILLING_AON;
//---
//установим параметры второго инструмента
m_request1.action =TRADE_ACTION_DEAL;
m_request1.symbol =SPrim;
m_request1.volume =0.1;
m_request1.type =ORDER_TYPE_SELL;//тут продаем
m_request1.sl =0.0;
m_request1.tp =0.0;
m_request1.type_filling=ORDER_FILLING_AON;
//---
OrderSend(m_request0,m_result0);//отсылаем первый ордер
OrderSend(m_request1,m_result1);//отсылаем второй ордер
...//проверяем два резалта
}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Для арбитража очень важно открыть две сделки подряд, с минимальной разницей по времени.
Так вопрос вот в чем. Перед какдым OrderSend надо делать какую-нибудь проверку на занятость потока? А если таких советников стоит десяток на 20 инструментах, что будет с потоком?
Здравствуйте, господа,
Обращаюсь в первую очередь к разработчикам, в MT4 было ограничение на минимальное время истечения отложенных ордеров (не менее 10 минут с момента установки ордера). Судя по всему, в MT5 это ограничение сохранилось. Несмотря на то, что документально я подтверждения этому не нашел, при попытке установить время истечения ордера через 60 секунд после его выставления генерируется ошибка Invalid expiration.
Код:
MqlTradeRequest request;
MqlTradeResult result;
request.action=TRADE_ACTION_PENDING;
...
request.type=ORDER_TYPE_BUY_STOP;
request.type_filling=ORDER_FILLING_AON;
request.type_time=ORDER_TIME_SPECIFIED;
request.expiration=TimeCurrent()+60;
OrderSend(request,result);
Результат:
2009.11.16 14:28:26 Trades '28144' : failed buy stop 0.10 EURUSD at 1.50000 sl: 0.00000, tp: 0.00000 [Invalid expiration]
Это ограничение так и будет сохранено в MT5? Если да, то зачем оно нужно?
С Уважением,
Антон.
pronych писал(а) >>
Так вопрос вот в чем. Перед какдым OrderSend надо делать какую-нибудь проверку на занятость потока?
Да. Как вариант, циклиться с маленьким промежутком времени.
А если таких советников стоит десяток на 20 инструментах, что будет с потоком?
Если советник один -- торговый поток всегда будет свободен (теоретически), если больше -- всегда есть вероятность уткнуться в проблему его занятости.
Чем больше сделок -- тем больше вероятность.