Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй задачу в сервисе Фриланс и разработчики выполнят ее.
MetaQuotes Software Corp.
Модератор
180303
MetaQuotes Software Corp. 2010.05.25 10:15 

Close_All_if_Profit_or_Loss.mq4:

Закрывает все открытые ордера при изменении эквити на заданное значение. Используется динамический минимальный уровень, поэтому можно использовать как виртуальный трал.

Author: Sergey Guliaev

George
505
George 2010.05.25 12:23  

Сейчас нет терминала под рукой - проверить не могу: никогда так не закрывал активные позиции, как в коде автора OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5);

вроде бы как OrderClosePrice() - это для уже закрытых ордеров, выбранных с помощью SELECT_BY_POS,MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров. Если ордер открыт, неуж-то ему будет назначено автоматом Ask или Bid в зависимости от его типа? Может быть я навсегда отстал от жизни? :)

Nikolay Ivanov
32210
Nikolay Ivanov 2010.05.25 12:29  
да, OrderClosePrice() на открытом ордере вернет 0, но это допустимо, хоть и некорректно и некрасиво. Ордер закроется.
George
505
George 2010.05.25 12:34  
Techno:
да, OrderClosePrice() на открытом ордере вернет 0, но это допустимо, хоть и некорректно и некрасиво. Ордер закроется.

Вот и я подумал, что это как-то не так.
Sergey Guliaev
2301
Sergey Guliaev 2010.05.25 13:45  
Поскольку функция OrderClosePrice( ) не задокументирована, я рискнул предположить, что для открытых ордеров она возвращает текущую цену закрытия, всё заработало. Результат есть, как работает чёрный ящик мне не интересно.
Sergey Guliaev
2301
Sergey Guliaev 2010.05.26 05:18  
Techno:
   допустимо, хоть и некорректно и некрасиво.

А на мой взгляд, даже изящно ))))
George
505
George 2010.05.26 12:18  
valenok2003:
Поскольку функция OrderClosePrice( ) не задокументирована, я рискнул предположить, что для открытых ордеров она возвращает текущую цену закрытия, всё заработало. Результат есть, как работает чёрный ящик мне не интересно.


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

switch(OrderType())

{

case 0 : OrderClose(OrderTicket(),OrderLots(),Bid,slippage); break;

case 1 : OrderClose(OrderTicket(),OrderLots(),Ask,slippage);

}

Николай
2204
Николай 2010.05.26 19:06  
PPC:
valenok2003:
Поскольку функция OrderClosePrice( ) не задокументирована, я рискнул предположить, что для открытых ордеров она возвращает текущую цену закрытия, всё заработало. Результат есть, как работает чёрный ящик мне не интересно.


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

switch(OrderType())

{

case 0 : OrderClose(OrderTicket(),OrderLots(),Bid,slippage); breack;

case 1 : OrderClose(OrderTicket(),OrderLots(),Ask,slippage); break;

}

А изящнее так -

switch (OrderType()) {
case 0: prc=Ask;break;
case 1: prc=Bid; }

OrderClose(OrderTicket(),OrderLots(),prc,slippage);

George
505
George 2010.05.27 12:04  

SHOOTER777 писал(а):

А изящнее так -

switch (OrderType()) {
case 0: prc=Ask;break;
case 1: prc=Bid; }

OrderClose(OrderTicket(),OrderLots(),prc,slippage);


Ага... и на одну переменную больше, + добавляется ненужная операция присваивания :-)
Алексей
38
Алексей 2010.05.27 20:15  

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

George
505
George 2010.05.28 07:28  
alexminak:

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


Абсолютно верно. Кстати, я всегда так и делаю: перекрытые через OrderCloseBy() - просто в данном случае (в рамках предложенного автором советника) я это не рассматривал.
/ /123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий