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

 

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

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

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);
  }

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

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

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

 
fredd:

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

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

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

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

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


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



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

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

 

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

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). 

 
ilunga:

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

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

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

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

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

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

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

 

 

 


Спасибо.
 
fredd:

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



Замените

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

на

OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
Причина обращения: