Возьмите функцию GetTickValue отсюда https://www.mql5.com/ru/forum/351
Заодно и корректное значение этого параметра будете получать всегда и на других валютных парах.
Возьмите функцию GetTickValue отсюда https://www.mql5.com/ru/forum/351
Заодно и корректное значение этого параметра будете получать всегда и на других валютных парах.
Функцию взял. Преобразовал скрипт в следующий вид:
//+------------------------------------------------------------------+ //| EURDKKm.mq4 | //| Copyright © 2006, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern string BaseCurrency = "USD"; //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- int n,i; string ChartList[]; n=GetSymbols(ChartList); for(i=0;i<ArraySize(ChartList);i++) { Print(ChartList[i]," ",DoubleToStr(MarketInfo(ChartList[i],MODE_TICKVALUE),4)," ",DoubleToStr(GetTickValue(ChartList[i]),4)); } //---- return(0); } //+------------------------------------------------------------------+ int GetSymbols(string &SymbolsList[]) { // Открываем файл symbols.raw int hFile = FileOpenHistory("symbols.raw", FILE_BIN|FILE_READ); if(hFile < 0) return(-1); // Определяем количество символов, зарегистрированных в файле int SymbolsNumber = FileSize(hFile) / 1936; ArrayResize(SymbolsList, SymbolsNumber); // Считываем символы из файла for(int i = 0; i < SymbolsNumber; i++) { SymbolsList[i] = FileReadString(hFile, 12); FileSeek(hFile, 1924, SEEK_CUR); } FileClose(hFile); // Возвращаем общее количество инструментов return(SymbolsNumber); } double GetTickValue( string Symb ) { string Str, ProfitCurrency, SymbolPrefix; double Res, PriceExchage; ProfitCurrency = StringSubstr(Symb, 3, 3); SymbolPrefix = StringSubstr(Symb, 6); if (ProfitCurrency == BaseCurrency) Res = MarketInfo(Symb, MODE_LOTSIZE) * MarketInfo(Symb, MODE_TICKSIZE); else { Str = BaseCurrency + ProfitCurrency + SymbolPrefix; if (RealSymbol(Str)) { // PriceExchage = MarketInfo(Str, MODE_BID); // Так считает MetaTrader4 - неправильно PriceExchage = MarketInfo(Str, MODE_ASK); // Правильный вариант Res = MarketInfo(Symb, MODE_LOTSIZE) * MarketInfo(Symb, MODE_TICKSIZE) / PriceExchage; } else { Str = ProfitCurrency + BaseCurrency + SymbolPrefix; PriceExchage = MarketInfo(Str, MODE_BID); Res = MarketInfo(Symb, MODE_LOTSIZE) * MarketInfo(Symb, MODE_TICKSIZE) * PriceExchage; } } return(Res); } bool RealSymbol( string Str ) { return(MarketInfo(Str, MODE_BID) != 0); }
Результат мало что изменил для EURDKKm:
23:14:10 EURDKKm_all_new_function USDJPYm,M15: AUDCADm 0.0954 0.0953
23:14:10 EURDKKm_all_new_function USDJPYm,M15: AUDCHFm 0.0966 0.0965
23:14:10 EURDKKm_all_new_function USDJPYm,M15: AUDJPYm 0.1167 0.1166
23:14:10 EURDKKm_all_new_function USDJPYm,M15: AUDNZDm 0.0706 0.0706
23:14:10 EURDKKm_all_new_function USDJPYm,M15: AUDUSDm 0.1000 0.1000
23:14:10 EURDKKm_all_new_function USDJPYm,M15: CADJPYm 0.1167 0.1166
23:14:10 EURDKKm_all_new_function USDJPYm,M15: CHFJPYm 0.1167 0.1166
23:14:10 EURDKKm_all_new_function USDJPYm,M15: EURAUDm 0.0892 0.0892
23:14:10 EURDKKm_all_new_function USDJPYm,M15: EURCADm 0.0954 0.0953
23:14:10 EURDKKm_all_new_function USDJPYm,M15: EURCHFm 0.0966 0.0965
23:14:10 EURDKKm_all_new_function USDJPYm,M15: EURDKKm 0.0000 0.0000
23:14:10 EURDKKm_all_new_function USDJPYm,M15: EURGBPm 0.1553 0.1553
23:14:10 EURDKKm_all_new_function USDJPYm,M15: EURJPYm 0.1167 0.1166
23:14:10 EURDKKm_all_new_function USDJPYm,M15: EURNZDm 0.0706 0.0706
23:14:10 EURDKKm_all_new_function USDJPYm,M15: EURUSDm 0.1000 0.1000
23:14:10 EURDKKm_all_new_function USDJPYm,M15: GBPCADm 0.0954 0.0953
23:14:10 EURDKKm_all_new_function USDJPYm,M15: GBPCHFm 0.0966 0.0965
23:14:10 EURDKKm_all_new_function USDJPYm,M15: GBPJPYm 0.1167 0.1166
23:14:10 EURDKKm_all_new_function USDJPYm,M15: GBPNZDm 0.0706 0.0706
23:14:10 EURDKKm_all_new_function USDJPYm,M15: GBPUSDm 0.1000 0.1000
23:14:10 EURDKKm_all_new_function USDJPYm,M15: NZDCHFm 0.0966 0.0965
23:14:10 EURDKKm_all_new_function USDJPYm,M15: NZDJPYm 0.1167 0.1166
23:14:10 EURDKKm_all_new_function USDJPYm,M15: NZDUSDm 0.1000 0.1000
23:14:10 EURDKKm_all_new_function USDJPYm,M15: USDCADm 0.0954 0.0953
23:14:10 EURDKKm_all_new_function USDJPYm,M15: USDCHFm 0.0966 0.0965
23:14:10 EURDKKm_all_new_function USDJPYm,M15: USDJPYm 0.1167 0.1166
23:14:10 EURDKKm_all_new_function USDJPYm,M15: USDSGDm 0.0184 0.0184
23:14:10 EURDKKm_all_new_function USDJPYm,M15: USDZARm 0.0034 0.0034
Какие будут ещё предложения?
Какие будут ещё предложения?
Чтобы разобраться, выведите следующие значения: MODE_TICKSIZE, MODE_LOTSIZE, MODE_BID.
Похоже, что проблема не только в MODE_TICKVALUE...
Вот результат работы следующего Print в приведённом выше скрипте
Print(ChartList[i]," ",DoubleToStr(MarketInfo(ChartList[i],MODE_TICKVALUE),4)," ",DoubleToStr(GetTickValue(ChartList[i]),4)," ",DoubleToStr(MarketInfo(ChartList[i],MODE_TICKSIZE),5)," ",MarketInfo(ChartList[i],MODE_LOTSIZE)," ",DoubleToStr(MarketInfo(ChartList[i],MODE_BID),4));
13:35:52 EURDKKm_all_new_function USDJPYm,M15: AUDCADm 0.0954 0.0953 0.00001 10000 0.9355
13:35:52 EURDKKm_all_new_function USDJPYm,M15: AUDCHFm 0.0966 0.0966 0.00001 10000 0.9235
13:35:52 EURDKKm_all_new_function USDJPYm,M15: AUDJPYm 0.1168 0.1167 0.00100 10000 76.3950
13:35:52 EURDKKm_all_new_function USDJPYm,M15: AUDNZDm 0.0707 0.0707 0.00001 10000 1.2612
13:35:52 EURDKKm_all_new_function USDJPYm,M15: AUDUSDm 0.1000 0.1000 0.00001 10000 0.8921
13:35:52 EURDKKm_all_new_function USDJPYm,M15: CADJPYm 0.1168 0.1167 0.00100 10000 81.6390
13:35:52 EURDKKm_all_new_function USDJPYm,M15: CHFJPYm 0.1168 0.1167 0.00100 10000 82.7050
13:35:52 EURDKKm_all_new_function USDJPYm,M15: EURAUDm 0.0892 0.0892 0.00001 10000 1.4240
13:35:52 EURDKKm_all_new_function USDJPYm,M15: EURCADm 0.0954 0.0953 0.00001 10000 1.3325
13:35:52 EURDKKm_all_new_function USDJPYm,M15: EURCHFm 0.0966 0.0966 0.00001 10000 1.3156
13:35:52 EURDKKm_all_new_function USDJPYm,M15: EURDKKm 0.0000 0.0000 0.00001 10000 7.4498
13:35:52 EURDKKm_all_new_function USDJPYm,M15: EURGBPm 0.1553 0.1553 0.00001 10000 0.8180
13:35:52 EURDKKm_all_new_function USDJPYm,M15: EURJPYm 0.1168 0.1167 0.00100 10000 108.8290
13:35:52 EURDKKm_all_new_function USDJPYm,M15: EURNZDm 0.0707 0.0707 0.00001 10000 1.7964
13:35:52 EURDKKm_all_new_function USDJPYm,M15: EURUSDm 0.1000 0.1000 0.00001 10000 1.2708
13:35:52 EURDKKm_all_new_function USDJPYm,M15: GBPCADm 0.0954 0.0953 0.00001 10000 1.6287
13:35:52 EURDKKm_all_new_function USDJPYm,M15: GBPCHFm 0.0966 0.0966 0.00001 10000 1.6078
13:35:52 EURDKKm_all_new_function USDJPYm,M15: GBPJPYm 0.1168 0.1167 0.00100 10000 133.0050
13:35:52 EURDKKm_all_new_function USDJPYm,M15: GBPNZDm 0.0707 0.0707 0.00001 10000 2.1956
13:35:52 EURDKKm_all_new_function USDJPYm,M15: GBPUSDm 0.1000 0.1000 0.00001 10000 1.5531
13:35:52 EURDKKm_all_new_function USDJPYm,M15: NZDCHFm 0.0966 0.0966 0.00001 10000 0.7319
13:35:52 EURDKKm_all_new_function USDJPYm,M15: NZDJPYm 0.1168 0.1167 0.00100 10000 60.5490
13:35:52 EURDKKm_all_new_function USDJPYm,M15: NZDUSDm 0.1000 0.1000 0.00001 10000 0.7071
13:35:52 EURDKKm_all_new_function USDJPYm,M15: USDCADm 0.0954 0.0953 0.00001 10000 1.0486
13:35:52 EURDKKm_all_new_function USDJPYm,M15: USDCHFm 0.0966 0.0966 0.00001 10000 1.0351
13:35:52 EURDKKm_all_new_function USDJPYm,M15: USDJPYm 0.1168 0.1167 0.00100 10000 85.6360
13:35:52 EURDKKm_all_new_function USDJPYm,M15: USDSGDm 0.0184 0.0184 0.00001 2500 1.3557
13:35:52 EURDKKm_all_new_function USDJPYm,M15: USDZARm 0.0034 0.0034 0.00001 2500 7.3100
То есть дополнительные параметры MODE_TICKSIZE, MODE_LOTSIZE, MODE_BID больше нуля.
Сам брокер заявляет, что он чейзит компанию MetaQuotes по этой проблеме, но судя по всему пока что безуспешно.
То есть дополнительные параметры MODE_TICKSIZE, MODE_LOTSIZE, MODE_BID больше нуля.
Сам брокер заявляет, что он чейзит компанию MetaQuotes по этой проблеме, но судя по всему пока что безуспешно.
Проблема понятна, у вас из DKK-пар только EURDKK. Функция бы работала, если бы была еще пара USDDKK. Но ее нет...
Решение универсальное писать не стал, вот решение для всех пар EURXXX c валютой счета в USD:
// AccountCurrency() == "USD" double GetTickValueEURXXX( string Symb ) { string EURUSD = StringSubstr(Symb, 0, 3) + "USD" + StringSubstr(Symb, 6); double PriceExchange, Res; if (Symb == EURUSD) PriceExchange = 1; else PriceExchange = MarketInfo(EURUSD, MODE_BID) / MarketInfo(Symb, MODE_ASK); Res = MarketInfo(Symb, MODE_LOTSIZE) * MarketInfo(Symb, MODE_TICKSIZE) * PriceExchange; return(Res); }
Спасибо! Теперь с помощью функции GetTickValueEURXXX и на Live счёте видно значение EURDKKm = 0,0171.
Вопрос только почему это значение не получается с помощью встроенной функции MarketInfo(ChartList[i],MODE_TICKVALUE)? Хоть она и менее точная, но тем не менее странное расхождение между её показаниями на live (0.0000) и на demo (0.0171).
Ну на этот вопрос может ответить лишь MetaQuotes.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть следующий скрипт
Есть live account у одного из спонсоров Чемпионата.
При запуске указанного скрипта на нём получаем следующий результат:
21:08:07 EURDKKm_all EURUSDm,M15: loaded successfully
21:08:07 EURDKKm_all EURUSDm,M15: AUDCADm 0.0954
21:08:07 EURDKKm_all EURUSDm,M15: AUDCHFm 0.0967
21:08:07 EURDKKm_all EURUSDm,M15: AUDJPYm 0.1167
21:08:07 EURDKKm_all EURUSDm,M15: AUDNZDm 0.0706
21:08:07 EURDKKm_all EURUSDm,M15: AUDUSDm 0.1000
21:08:07 EURDKKm_all EURUSDm,M15: CADJPYm 0.1167
21:08:07 EURDKKm_all EURUSDm,M15: CHFJPYm 0.1167
21:08:07 EURDKKm_all EURUSDm,M15: EURAUDm 0.0891
21:08:07 EURDKKm_all EURUSDm,M15: EURCADm 0.0954
21:08:07 EURDKKm_all EURUSDm,M15: EURCHFm 0.0967
21:08:07 EURDKKm_all EURUSDm,M15: EURDKKm 0.0000
21:08:07 EURDKKm_all EURUSDm,M15: EURGBPm 0.1554
21:08:07 EURDKKm_all EURUSDm,M15: EURJPYm 0.1167
21:08:07 EURDKKm_all EURUSDm,M15: EURNZDm 0.0706
21:08:07 EURDKKm_all EURUSDm,M15: EURUSDm 0.1000
21:08:07 EURDKKm_all EURUSDm,M15: GBPCADm 0.0954
21:08:07 EURDKKm_all EURUSDm,M15: GBPCHFm 0.0967
21:08:07 EURDKKm_all EURUSDm,M15: GBPJPYm 0.1167
21:08:07 EURDKKm_all EURUSDm,M15: GBPNZDm 0.0706
21:08:07 EURDKKm_all EURUSDm,M15: GBPUSDm 0.1000
21:08:07 EURDKKm_all EURUSDm,M15: NZDCHFm 0.0967
21:08:07 EURDKKm_all EURUSDm,M15: NZDJPYm 0.1167
21:08:07 EURDKKm_all EURUSDm,M15: NZDUSDm 0.1000
21:08:07 EURDKKm_all EURUSDm,M15: USDCADm 0.0954
21:08:07 EURDKKm_all EURUSDm,M15: USDCHFm 0.0967
21:08:07 EURDKKm_all EURUSDm,M15: USDJPYm 0.1167
21:08:07 EURDKKm_all EURUSDm,M15: USDSGDm 0.0184
21:08:07 EURDKKm_all EURUSDm,M15: USDZARm 0.0034
При запуске этого же скрипта на демо счёте значение EURDKKm составляет 0,0171.
Подскажите, пожалуйста, в чёи может быть проблема?
Мои подозрения сводятся к тому, что на live сервере стоят неправильные установки для EURDKKm. А что может быть на самом деле?