да мне надо закрыть все открытые ордера неважно в плюсе они или в минусе примерно в 23:50
отложенные ордера у меня закрываются по expiration с этим проблем нет.
Ок. Для тотального закрытия всех открытых позиций (не отложенных ордеров), без приверки на символ и магик-номер, можно так:
if (Hour()==23 && Minute()>=50)
{ if (OrdersTotal()>0)
{ for (int i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderType()==OP_BUY)
{ RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Bid,1000);
return(0);
}
if (OrderType()==OP_SELL)
{ RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Ask,1000);
return(0);
}
}
} } }
В этом случае у вас будет только 10 мин на закрытие. Если очень много позиций то сами смотрите много это времени или мало. Тут сделал так что после выслания приказа на закрытие следующий приказ будет обработан на новом тике. Ночью может дойти до дого, что 1 тик придётся на 1-2 минуты и можно не успеть.
Если бы я делал для себя советник с таким алгоритмом, то я бы на первых тиках нового дня закрывал все открытые позиции, а только потом "открывал дорогу" для дальшей части кода:
if (OrdersTotal()>0)
{ for (int i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderType()==OP_BUY && OrderOpenTime()<iTime(Symbol,PERIOD_D1,0)
{ RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Bid,1000);
return(0);
}
if (OrderType()==OP_SELL && OrderOpenTime()<iTime(Symbol,PERIOD_D1,0))
{ RefreshRates();
OrderClose(OrderTicket(),OrderLots(),Ask,1000);
return(0);
}
}
} }
Если бы я делал для себя советник с таким алгоритмом, то я бы на первых тиках нового дня закрывал все открытые позиции, а только потом "открывал дорогу" для дальшей части кода:
Какой смысл ставить промежуточную точку на первых тиках нового дня, особенно если этот день - понедельник? Т.е. резкое увеличение спрэдов под занавес в пятницу Вам пофигу? А Гэп, любящий понедельники, никто не обещал что он будет в Вашу сторону?
Надо, чтобы советник в определенное время по магик номеру находил свои ордера и закрыл все ордера через 5 минут, после окончания торгов, которое задается в настройках.
Функция торговли по времени есть, могу ее написать, а вот с поиском ордеров не совсем понимаю как правильно написать. Помогите пожалуйста.
Надо, чтобы советник в определенное время по магик номеру находил свои ордера и закрыл все ордера через 5 минут, после окончания торгов, которое задается в настройках.
Функция торговли по времени есть, могу ее написать, а вот с поиском ордеров не совсем понимаю как правильно написать. Помогите пожалуйста.
Надо для mt5
Здравствуйте! Здесь в примерах всё подробно описано, как искать отложенные ордера и позиции.
Структура торгового запроса - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
тут зависит еще от на newbar или на каждом тике идет работа
для newbar нужна перестраховка, иначе могут не закрываться все позиции
для newbar такой использовал:
#include <Trade\Trade.mqh>
CTrade m_trade;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---- закрываем все открытые позиции по текущему символуfor(uint count=0; count<10 && !IsStopped(); count++) // цикл повторов
{
int total=PositionsTotal();
if(!total)
return; // все позиции закрытыwhile(total>=0 && !IsStopped())
{
ulong ticket=ulong(PositionGetTicket(total));
PositionSelectByTicket(ticket);
m_trade.PositionClose(ticket);
total--;
Sleep(70);
}
Sleep(200);
}
//---Print("Close pos: ",PositionsTotal());
}
для потиковой торговли более короткий вариант
void CloseAllPositions()
{
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties// && m_position.Magic()==MagicNumber)
m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
}
https://docs.mql4.com/ru/dateandtime
Смотрите Hour() и Minute() ! Нельзя же быть таким беспомощным и ленивым!
как вычислить время я знаю.
у меня вопрос как закрыть ордер по этому времени.
вы не нервничайте) можете просто не отвечать)
да мне надо закрыть все открытые ордера неважно в плюсе они или в минусе примерно в 23:50
отложенные ордера у меня закрываются по expiration с этим проблем нет.
Ок. Для тотального закрытия всех открытых позиций (не отложенных ордеров), без приверки на символ и магик-номер, можно так:
В этом случае у вас будет только 10 мин на закрытие. Если очень много позиций то сами смотрите много это времени или мало. Тут сделал так что после выслания приказа на закрытие следующий приказ будет обработан на новом тике. Ночью может дойти до дого, что 1 тик придётся на 1-2 минуты и можно не успеть.Ок. Для тотального закрытия всех открытых позиций (не отложенных ордеров), без приверки на символ и магик-номер, можно так:
спасибо!
сегодня вечером буду пробовать)
Если бы я делал для себя советник с таким алгоритмом, то я бы на первых тиках нового дня закрывал все открытые позиции, а только потом "открывал дорогу" для дальшей части кода:
Если бы я делал для себя советник с таким алгоритмом, то я бы на первых тиках нового дня закрывал все открытые позиции, а только потом "открывал дорогу" для дальшей части кода:
мне нужно похожую функцию написать.
Надо, чтобы советник в определенное время по магик номеру находил свои ордера и закрыл все ордера через 5 минут, после окончания торгов, которое задается в настройках.
Функция торговли по времени есть, могу ее написать, а вот с поиском ордеров не совсем понимаю как правильно написать. Помогите пожалуйста.
Надо для mt5
мне нужно похожую функцию написать.
Надо, чтобы советник в определенное время по магик номеру находил свои ордера и закрыл все ордера через 5 минут, после окончания торгов, которое задается в настройках.
Функция торговли по времени есть, могу ее написать, а вот с поиском ордеров не совсем понимаю как правильно написать. Помогите пожалуйста.
Надо для mt5
Здравствуйте! Здесь в примерах всё подробно описано, как искать отложенные ордера и позиции.
С уважением, Владимир.
как закрыть все ордера в назначенное время в 22-00 ? подскажите
объявил переменную EndWork
sinput string a2 = "----------- ФИЛЬТР РАБОТЫ ПО ВРЕМЕНИ -----------";//.
input bool UseTimeFilter = false; // Использовать фильтр
input string TimeTrade = "00:00 - 23:59"; // Время работы
input bool TimeClose = false; // Закрывать ордера по окончанию работы
input string EndWork ="22:00"; //время закрытия всех сделок
дальше не знаю. ругается отладчик. пишу такое:
if TimeCurrent() > EndWork ();
else CloseOrder("Sell"); CloseOrder("Buy");
'if' - open parenthesis expected
'else' - illegal 'else' without matching 'if'
тут зависит еще от на newbar или на каждом тике идет работа
для newbar нужна перестраховка, иначе могут не закрываться все позиции
для newbar такой использовал:
для потиковой торговли более короткий вариант