Проблемы с функциями MarketInfo и iHigh

 
MarketInfo(string symbol, int type); iHigh(string symbol, int timeframe, int shift); Фукции по идее должны работать одинаково с символами, однако если советник стоит на EURUSD а запрашивается MarketInfo(“USDJPY”, MODE_POINT), то возвращается ноль(0!), ставим на JPY, дает по ней, теперь по EUR ноль?.

При этом iHigh(“USDJPY”,1440,1) дает четко по любым символам!

В чем прикол?

Спасибо заранее.

 
Эти функции совершенно разные.
Приложите точный код, пожалуйста. Что-то не понятно, что Вы имели в виду.
 
Renat:
Эти функции совершенно разные.
Приложите точный код, пожалуйста. Что-то не понятно, что Вы имели в виду.

Советник стоит на Евро , вот это место

// Нет открытых позиций.

if (!PosExist && OldBar!=Time[0])
{
double DeltEURUSD=NormalizeDouble(Porog1*MarketInfo("EURUSD",MODE_POINT), Digits);
double DeltUSDJPY=NormalizeDouble(Porog1*MarketInfo("USDJPY",MODE_POINT), Digits);
double DeltUSDCAD=NormalizeDouble(Porog1*MarketInfo("USDCAD",MODE_POINT), Digits);
Print(" DeltEURUSD ",DeltEURUSD);// == 0.0001
Print(" DeltEURUSD ",DeltUSDJPY);// == 0
Print(" DeltEURUSD ",DeltUSDCAD);// == 0

Print(" iClose ",NormalizeDouble(iClose("USDJPY",TF1, 1),Digits)); // == 116.30

за //  это в журнале ...
 
А у Вас все эти символы в MarketWatch открыты?
 
Renat:
А у Вас все эти символы в MarketWatch открыты?

Да, конечно. Просто перед открытием позиции по Евро хотел посмотреть пробила ли Йена предыдущий лоу ниже на n пунктов,
вполне уместное желание... Тогда не ясно как это реализовать.
 
 
Сделайте проще - выводите результат вызова MarketInfo сразу же в Print, а не прогоняйте через нормализацию.

Кстати, нормализуете то Вы всегда на Digits от текущего символа, а не на Digits каждого желаемого символа, что и может быть причиной зануления.
 

Если Вы запустите этого скрипта на йене, у которой Digits=2, то по всем остальным парам, у которых Digits=4, Вы получите законные нули.

Почему бы не сделать так:

   double DeltEURUSD=NormalizeDouble(Porog1*MarketInfo("EURUSD",MODE_POINT),MarketInfo("EURUSD",MODE_DIGITS));
 double DeltUSDJPY=NormalizeDouble(Porog1*MarketInfo("USDJPY",MODE_POINT),MarketInfo("USDJPY",MODE_DIGITS));
 double DeltUSDCAD=NormalizeDouble(Porog1*MarketInfo("USDCAD",MODE_POINT),MarketInfo("USDCAD",MODE_DIGITS));
 
stringo писал (а):

Если Вы запустите этого скрипта на йене, у которой Digits=2, то по всем остальным парам, у которых Digits=4, Вы получите законные нули.

Почему бы не сделать так:

   double DeltEURUSD=NormalizeDouble(Porog1*MarketInfo("EURUSD",MODE_POINT),MarketInfo("EURUSD",MODE_DIGITS));
 double DeltUSDJPY=NormalizeDouble(Porog1*MarketInfo("USDJPY",MODE_POINT),MarketInfo("USDJPY",MODE_DIGITS));
 double DeltUSDCAD=NormalizeDouble(Porog1*MarketInfo("USDCAD",MODE_POINT),MarketInfo("USDCAD",MODE_DIGITS));
double DeltEURUSD=NormalizeDouble(Porog1*MarketInfo("EURUSD",MODE_POINT), MarketInfo("EURUSD",MODE_DIGITS));

Да, скосячил немного, но проблема осталась MarketInfo выдает только по символу где тестируется советник и больше ни чего.
Ставишь на Йену показывает ее, а Евро становится 0, ну и т.д.
 
Ну так сразу надо было сказать, что это в тестере.

В тестере MarketInfo ограничен и не выдает текущих рыночных данных других символов, так как тестер не моделирует развития чужих символов во время теста.

Из статьи "Особенности и ограничения тестирования в MetaTrader 4"
Использование функции MarketInfo формирует ошибку ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE(4059), однако выдается корректная информация о текущих ценах тестируемого символа, о размере уровней стопов, размере пункта, размере спреда любого символа, присутствующего в окне котировок.
 
Renat:
Ну так сразу надо было сказать, что это в тестере.

В тестере MarketInfo ограничен и не выдает текущих рыночных данных других символов, так как тестер не моделирует развития чужих символов во время теста.

Из статьи "Особенности и ограничения тестирования в MetaTrader 4"
Использование функции MarketInfo формирует ошибку ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE(4059), однако выдается корректная информация о текущих ценах тестируемого символа, о размере уровней стопов, размере пункта, размере спреда любого символа, присутствующего в окне котировок.
А в реале аналогично? Интересно, ограничение принципиально или ... Обойти конечно можно, но уже без аппетита.
Спасибо за разяснение.
 
В реале ограничений нет, можно пользоваться любыми функциями.
Ограничение только в тестере, так как он не занимается моделированием других символов. Но моделированием других таймфремов этого же символа он занимается и делает это точно.