Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Продавай свои разработки в Маркете. Это безопасно!
Вячеслав
4
Вячеслав 2011.05.15 10:29 

Здравствуйте уважаемые форумчане Помогите избавится от ошибки 129 Вот часть исходного кода:

/////

if(GlobalVariableGet("LotCloseRestrictionTotal")==2)
{
for( ccc=SymbolTrades;ccc>=1;ccc--)
{
GlobalVariableSet("ccc",ccc);
string Symbol_X=Symbol_X();
double Point_Symb=MarketInfo(Symbol_X,MODE_POINT);
double Bid_X=MarketInfo(Symbol_X,MODE_BID );
double Ask_X=MarketInfo(Symbol_X,MODE_ASK );
double Spread=MarketInfo(Symbol_X,MODE_SPREAD );
double Level=MarketInfo(Symbol_X,MODE_STOPLEVEL );
int Majic=Majic();



if(FlagRestrictionSell()==1)
{
for(int ddd=OrdersTotal( ) ;ddd>=0;ddd--)
{
if(OrderSelect(ddd, SELECT_BY_POS, MODE_TRADES)==true)
{

if (OrderSymbol( ) ==Symbol_X&&OrderType( ) ==OP_SELL&&OrderMagicNumber( ) ==Majic() &&OrderOpenPrice()==OpenPriceSellSymbolMin())

{

if(LotCloseRestr()>OrderLots())
{
LotClRestr=NormalizeDouble(LotCloseRestr()-OrderLots(),2);

Print("LotCloseRestr",Symbol_X,LotCloseRestr());


RefreshRates();
Ask_X=NormalizeDouble(MarketInfo(Symbol_X,MODE_ASK),4);

if(OrderClose(OrderTicket(),OrderLots(),Ask_X,3,CLR_NONE)==true)
{


GlobalVariableSet("LotCloseRestr",LotClRestr);
LotCloseRestrCreat();

}

}



if(LotCloseRestr()<=OrderLots()&&LotCloseRestr()>0)
{


LotClRestr=LotCloseRestr();
RefreshRates();
Ask_X=NormalizeDouble(MarketInfo(Symbol_X,MODE_ASK),4);

if(OrderClose(OrderTicket(),LotClRestr,Ask_X,3,CLR_NONE)==true)
{
GlobalVariableSet("LotCloseRestr",0);
LotCloseRestrCreat();
GlobalVariableSet("FlagRestrictionSell",0);
FlagRestrictionSellCreat();

}
}

}
}
}
}

}

}

Эксперт прикреплён к одному окну графика EURUSD но работает с многими валютными парами путём использования общей глобальной переменной "ссс " перебирая строковые имена валютных пар в цикле for и формирует значения Ask и Bid с помощью функции MarketInfo() для закрытия ордеров У меня к вам вопрос что происходит при запуске функции RefreshRates() Обновляются данные только текущего фининструмента к которому прикреплён эксперт или всех валютных пар в окне Обзор рынка?И как можно обновить данные других валютных пар?Как в эксперте можно организовать перебор открытых окон валютных пар в цикле for с помощью какой служебной функции если таковая вообще есть чтобы попытаться обновить данные используя переменную Symbol() для получения строкового имени активного текущего окна и обновления данных функцией RefreshRates последовательно для каждого выбранного окна?Мне кажется что ошибка 129 происходит из-за устаревания данных Ask и Bid при обращении к ним по разным валютным парам Так как эксперт запускается при каждом новом тике по евродоллару А по другим парам данные уже сформированы и при работе эксперта естественно происходит какая то временная задержка при вычислениях и данные устаревают Может кто подскажет как это обойти?

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