Скачать MetaTrader 5

Не работает простой скрипт

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
fredd
13
fredd  

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

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

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  
fredd:

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

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

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

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

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


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



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

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

Dmitry Fedoseev
47912
Dmitry Fedoseev  

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

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  
ilunga:

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

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

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

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

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

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

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

 

 

 


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

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



Замените

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

на

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