Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Вся активность участников MQL5.community на одной странице!
fredd
13
fredd 2013.03.18 10:50 

Доброго времени суток!

Хочу создать простенький скрипт, чтобы закрывал все открытые позиции. Набросал такой код

int start()
  {
//----
int VSE=OrdersTotal();
int i;
for (i=0; i<=VSE; i++)
{
OrderSelect(i, SELECT_BY_POS);
double price;
if (OrderType()==OP_BUY) price=Bid;
if (OrderType()==OP_SELL) price=Ask;
OrderClose(OrderTicket(),OrderLots(),price,3);
Print("Ошибка - ", GetLastError());
Sleep(500);
} 
//----
   return(0);
  }

Если открыто несколько позиций на разных инструментах, то закрываются только те, на график которого брошен скрипт.

Тоесть, если открыты позиции по евро, фунту, франку и бросить скрипт на график евро то закроется только позиция по евро. А как сделать так, чтоб закрылись все.

З.Ы. Хочу разобраться сам. Готовые решения не нужны. Спс.

ilunga
744
ilunga 2013.03.18 10:52  
fredd:

Доброго времени суток!

Хочу создать простенький скрипт, чтобы закрывал все открытые позиции. Набросал такой код

Если открыто несколько позиций на разных инструментах, то закрываются только те, на график которого брошен скрипт.

Тоесть, если открыты позиции по евро, фунту, франку и бросить скрипт на график евро то закроется только позиция по евро. А как сделать так, чтоб закрылись все.

З.Ы. Хочу разобраться сам. Готовые решения не нужны. Спс.


Ну правильно, вы закрываете по Bid/Ask. Он их берет с текущего символа.



Сейчас курс EURUSD 1.295, а GBPUSD - 1.513

Естественно GBPUSD SELL-ордер по 1.295 не закроется

Dmitry Fedoseev
41167
Dmitry Fedoseev 2013.03.18 10:55  

Неправильный цикл. 

for (i=0; i<=VSE; i++)

Правильнй должен быть такой:

for (i=0; i<VSE; i++)

А при закрытии вообще цикл надо куртить в обратную сторону: 

for (i=VSE-1; i>=0; i--)

Но с циклом это не главное. 

Главное в том, что Bid и Ask это цены символа графика, а ордер может быть открыт на другом символе. Для него цены можно получить через MarketInfo() - MarketInfo(OrderSymbol(),MODE_BID). 

fredd
13
fredd 2013.03.18 10:57  
ilunga:

Ну правильно, вы закрываете по Bid/Ask. Он их берет с текущего символа.

Ясно. А не подскажете как в этот код запихнуть цены нужного инструмента? :-)
fredd
13
fredd 2013.03.18 10:58  
Integer:

Неправильный цикл. 

Правильнй должен быть такой:

А при закрытии вообще цикл надо куртить в обратную сторону: 

Но с циклом это не главное. 

Главное в том, что Bid и Ask это цены символа графика, а ордер может быть открыт на другом символе. Для него цены можно получить через MarketInfo() - MarketInfo(OrderSymbol(),MODE_BID). 

 

 

 


Спасибо.
Alexander
2441
Alexander 2013.03.18 14:18  
fredd:

Ясно. А не подскажете как в этот код запихнуть цены нужного инструмента? :-)



Замените

OrderClose(OrderTicket(),OrderLots(),price,3);

на

OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий