Здравствуйте Андрей!
В настоящее время он работает с этим кодом.
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
}
}
}
}
}
void OnTick()
if(TimeCurrent()-OrderOpenTime()>=Exit)
{
CloseAll(0);
}
if(TimeCurrent()-OrderOpenTime()>=Exit)
{
CloseAll(1);
}
Но это проблема. Причина проблемы в том, что торгуются 24 валютные пары и CloseAll (); функция закрывает все заказы. На самом деле для меня важно, чтобы при открытии каждого ордера он закрывал этот открытый ордер в назначенное время и не касался других ордеров.
Напишите мне код, который работает в этом случае.
Комментарии (20)
35 AM2 Сообщений: 16266 - Андрей
17 Sirojiddin Автор Сообщений: 62
Напишите мне CloseAll () вот так.
17 Sirojiddin Автор Сообщений: 62
Редактирован: 28 сентября 2021, 20:54
14 verta81 Сообщений: 390
Дайте ссылку на советник или прикрепите код, конечно если хотите получить возможность помощи.
16 ssg Сообщений: 817
17 Sirojiddin Автор Сообщений: 62
Или стоит на 24-х парах? Редактирован: 28 сентября 2021, 20:52
14 verta81 Сообщений: 390
17 Sirojiddin Автор Сообщений: 62
17 Sirojiddin Автор Сообщений: 62
17 Sirojiddin Автор Сообщений: 62
17 Sirojiddin Автор Сообщений: 62
extern int Exit = 14400;
4 часа * 3600 секунд = 14400 секунд
16 ssg Сообщений: 817
Например: у меня есть ордер на покупку gbpusd, у меня есть ордер на продажу eurusd, и у меня есть другие ордеры.
Ордер gbpusd закрывается через 4 часа и закрывает все ордеры(Это проблема).
gbpusd должен закрываться через 4 часа и не закрывать другие ордера. Редактирован: 29 сентября 2021, 05:40
17 Sirojiddin Автор Сообщений: 62
//| Закрытие позиции по типу ордера |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
int dig=0;
double bid=0,ask=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
bid=MarketInfo(OrderSymbol(),MODE_BID);
dig=(int)MarketInfo(OrderSymbol(),MODE_DIGITS);
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(bid,dig),33,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
ask=MarketInfo(OrderSymbol(),MODE_ASK);
dig=(int)MarketInfo(OrderSymbol(),MODE_DIGITS);
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(ask,dig),33,White);
}
}
}
}
void OnTick()
if(TimeCurrent()-OrderOpenTime()>=Exit)
{
CloseAll(0);
}
if(TimeCurrent()-OrderOpenTime()>=Exit)
{
CloseAll(1);
}
Я думаю, что это неправильно. Редактирован: 29 сентября 2021, 05:45
17 Sirojiddin Автор Сообщений: 62
Редактирован: 29 сентября 2021, 08:25
16 ssg Сообщений: 817
Замените:
Дальше записываете:
Только и в функции открытия позиции надо прописать нужную пару. Редактирован: 29 сентября 2021, 08:27
16 ssg Сообщений: 817
17 Sirojiddin Автор Сообщений: 62
Здесь есть ошибка? Редактирован: 29 сентября 2021, 09:15
17 Sirojiddin Автор Сообщений: 62
17 Sirojiddin Автор Сообщений: 62
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий