Немножко покритикую твой "блок выхода"...
//-----------------------------------------------------------общий блок выхода
if (IsTesting( ) == false && Ticket > 0)
{
if (DayOfWeek( )== 1||2||3||4 && MathMod(TimeCurrent(), 86400) >= MathMod(StrToTime("23:55"), 86400))
{
OrderClose(Ticket, Лот_b, Bid, 3);
OrderClose(Ticket, Лот_s, Ask, 3);
}
if (DayOfWeek( )== 5 && MathMod(TimeCurrent(), 86400) >= MathMod(StrToTime("20:00"), 86400))
{
OrderClose(Ticket, Лот_b, Bid, 3);
OrderClose(Ticket, Лот_s, Ask, 3);
}
}
if (IsTesting( ) == true)
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if (DayOfWeek( )== 1||2||3||4 && TimeCurrent() - OrderOpenTime( ) >=86400)
{
if(OrderType() == OP_BUY )
OrderClose(OrderTicket(), Лот_b, Bid, 3);
if(OrderType() == OP_SELL )
OrderClose(OrderTicket(), Лот_s, Ask, 3);
}
if (DayOfWeek( )== 5 && TimeCurrent() - OrderOpenTime( ) >=72000)
{
if(OrderType() == OP_BUY )
OrderClose(OrderTicket(), Лот_b, Bid, 3);
if(OrderType() == OP_SELL )
OrderClose(OrderTicket(), Лот_s, Ask, 3);
}
}1. Снова вижу деление на для теста/для реала - зачем???
2. Используется переменная Ticket, задаваемая вручную во входных параметрах советника... Выходит, что для закрытия нужно заранее ввести тикет и перезапустить советника, а если ордера два???))) Тогда дождаться закрытия первого и указать тикет второго? Нелогично.
Нужно просто использовать
функцию ЗакрытьВсеОрдеры(), вызывая её в нужное время и контролируя Магик при этом, чтобы не закрыть ордеры других советников или открытые вручную. Изобретать её нет необходимости - такие давно написаны.
Немножко покритикую твой "блок выхода"...
[size=50] //-----------------------------------------------------------общий блок выхода
if (IsTesting( ) == false && Ticket > 0)
{
if (DayOfWeek( )== 1||2||3||4 && MathMod(TimeCurrent(), 86400) >= MathMod(StrToTime("23:55"), 86400))
{
OrderClose(Ticket, Лот_b, Bid, 3);
OrderClose(Ticket, Лот_s, Ask, 3);
}
if (DayOfWeek( )== 5 && MathMod(TimeCurrent(), 86400) >= MathMod(StrToTime("20:00"), 86400))
{
OrderClose(Ticket, Лот_b, Bid, 3);
OrderClose(Ticket, Лот_s, Ask, 3);
}
}
if (IsTesting( ) == true)
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if (DayOfWeek( )== 1||2||3||4 && TimeCurrent() - OrderOpenTime( ) >=86400)
{
if(OrderType() == OP_BUY )
OrderClose(OrderTicket(), Лот_b, Bid, 3);
if(OrderType() == OP_SELL )
OrderClose(OrderTicket(), Лот_s, Ask, 3);
}
if (DayOfWeek( )== 5 && TimeCurrent() - OrderOpenTime( ) >=72000)
{
if(OrderType() == OP_BUY )
OrderClose(OrderTicket(), Лот_b, Bid, 3);
if(OrderType() == OP_SELL )
OrderClose(OrderTicket(), Лот_s, Ask, 3);
}
}[/size]
1. Снова вижу деление на для теста/для реала - зачем???
2. Используется переменная Ticket, задаваемая вручную во входных параметрах советника... Выходит, что для закрытия нужно заранее ввести тикет и перезапустить советника, а если ордера два???))) Тогда дождаться закрытия первого и указать тикет второго? Нелогично.
Нужно просто использовать [b]функцию ЗакрытьВсеОрдеры()[/b], вызывая её в нужное время и контролируя Магик при этом, чтобы не закрыть ордеры других советников или открытые вручную. Изобретать её нет необходимости - такие давно написаны.
Последний раз редактировалось
4x_trader 14 ноя 2013, 10:48, всего редактировалось 1 раз.