28.03.2013, 19:19
|
#11
|
Любитель
Регистрация: 17.02.2013
Сообщений: 469
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Закрываем все сделки в пятницу
Цитата:
extern int MyHour=22;
extern int MyMinute=00;
// 5 - Friday
#define MyDay 5
datetime LastTradeTime;
//+------------------------------------------------------------------+
int init()
{
// установим время последней торговой операции вчерашним днем
LastTradeTime = CurTime()-24*60*60;
return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
int start()
{
//----
// проверим, не закрывали ли мы все уже сегодня
// если да - выходим
if (TimeDayOfYear(CurTime())==TimeDayOfYear(LastTrade Time)) return(0);
// если не пятница - выходим
if (DayOfWeek()!=MyDay) return(0);
// проверим, не наступило ли время закрывать позиции
if (((TimeHour(CurTime())==MyHour)&&(TimeMinute(CurTi me())>=MyMinute))
||(TimeHour(CurTime())>MyHour))
{
// закроем все позиции и удалим ордера
while (OrdersTotal()>0)
{
// выделим первую позицию или ордер в списке
if (!OrderSelect(0, SELECT_BY_POS)) break; // в случае неудачи выйти из цикла
// если отложенный ордер, то удалить
if (OrderType()>OP_SELL)
{
if (!OrderDelete(OrderTicket()))
{
Print("Ошибка ", GetLastError()," при удалении отложенного ордера ",
OrderTicket());
break;
}
}
// если открытая позиция, то закрыть
else
{
double price;
if (OrderType()==OP_SELL)
price = MarketInfo(OrderSymbol(), MODE_ASK);
else
price = MarketInfo(OrderSymbol(), MODE_BID);
if (!OrderClose(OrderTicket(), OrderLots(), price, 3))
{
Print("Ошибка ", GetLastError()," при закрытии позиции ", OrderTicket());
break;
}
}
// пауза 10 секунд
Sleep(10000);
}
if (OrdersTotal()==0) LastTradeTime = CurTime();
}
return(0);
}
//+------------------------------------------------------------------+
|
А слвиг в 7 баров не сможем убрать, иначе смысл во второй линии (красной) теряется.
|
|
|