Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1040

 
Artyom Trishkin:

IndicatorDigits(5)

Спасибо!
 

Еще вопрос задам. На основе того же индикатора. Допустим, вешаем индикатор на график. Получаем первое значение Bid1. Потом получаем второе значение Bid2. И нужно сравнить эти 2 значения. Из второго вычитаем первое и получаем число, которое прибавляем к первому Bid1.

Bid1=1.11133

Bid2=1.11135

Bid2-Bid1=0.00002

Bid1+0.00002=1.11135

Понимаю, что получиться тоже самое что и в изначальном индикаторе.

Просто хочу посмотреть реализацию и понять логику кода.

 
Alexey Viktorov:

Надо снять блокировку в свойствах файла.

Спасибо! :)
 
jaffer wilson :

Два заявления:

Печать: 22,33

И

Печать: 2.00000

Почему есть разные выводы? В C / C ++ вышеупомянутое утверждение работает отлично.

У кого-нибудь есть какие-либо идеи по поводу этой проблемы?

 

Помогите разобраться с массивами цен в мт5. В индикаторе как-то непонятно. Вывожу цены, которые в OnCalculate:

  for(int i=10; i>=0; i--)
         PrintFormat("s- open[%d] = %d",i,open[i]);

Мне выдает странные цены:

2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[10] = 1597040639
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[9] = -523642413
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[8] = 1691873517
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[7] = 590987500
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[6] = 1583296744
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[5] = 115448721
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[4] = 360090058
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[3] = -1597040639
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[2] = -856244680
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[1] = 366962006
2020.01.15 20:09:51.517 ZZ_And_Moving_Averages (EURUSD,H1)      s- open[0] = -1209462791

Делаю по-другому, создаю массив, копирую (методом тыка ищу, вообще непонятно мне что-то):

double Open[];//глобальная
CopyOpen(NULL,0,0,Bars_To_Process*2,Open); //OnCalculate
 for(int i=10; i>=0; i--)
         PrintFormat("Open[%d] = %d",i,Open[i]);//OnCalculate

И мне выдает похожее:

2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[10] = 1356522471
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[9] = -1708366192
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[8] = -729800843
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[7] = 1499458982
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[6] = 167675523
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[5] = -90709709
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[4] = -321607151
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[3] = -314735203
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[2] = -314735203
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[1] = 1663011337
2020.01.15 20:10:11.557 ZZ_And_Moving_Averages (EURUSD,H1)      Open[0] = -1408749273

С датами еще интереснее. Вывожу даты, которые в OnCalculate:

for(int i=10; i>=0; i--)
         PrintFormat("s- time[%d] = %s",i,TimeToString(time[i]));

Получаю такое:

2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[10] = 2015.12.02 10:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[9] = 2015.12.02 09:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[8] = 2015.12.02 08:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[7] = 2015.12.02 07:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[6] = 2015.12.02 06:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[5] = 2015.12.02 05:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[4] = 2015.12.02 04:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[3] = 2015.12.02 03:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[2] = 2015.12.02 02:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[1] = 2015.12.02 01:00
2020.01.15 20:17:04.421 ZZ_And_Moving_Averages (EURUSD,H1)      s- time[0] = 2015.12.02 00:00

А когда копирую:

datetime Time[];
CopyTime(NULL,0,0,Bars_To_Process*2,Time);
for(int i=10; i>=0; i--)
         PrintFormat("Time[%d] = %s",i,TimeToString(Time[i]));

То выводит норм:

2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[10] = 2020.01.15 10:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[9] = 2020.01.15 11:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[8] = 2020.01.15 12:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[7] = 2020.01.15 13:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[6] = 2020.01.15 14:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[5] = 2020.01.15 15:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[4] = 2020.01.15 16:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[3] = 2020.01.15 17:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[2] = 2020.01.15 18:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[1] = 2020.01.15 19:00
2020.01.15 20:20:37.686 ZZ_And_Moving_Averages (EURUSD,H1)      Time[0] = 2020.01.15 20:00

Но на одних датах далеко не уехать. Помогите разобраться. Как корректные цены открытия и закрытия получить?

 
Yevhenii Levchenko:

Помогите разобраться с массивами цен в мт5. В индикаторе как-то непонятно. Вывожу цены, которые в OnCalculate:

for(int i=10; i>=0; i--)
         PrintFormat("s- open[%d] = %d",i,open[i]);

сделайте так:

for(int i=10; i>=0; i--)
{
   Print("s- open[",i,"] = ",open[i]);
}

Вы не правильную спецификацию типов в форматированном выводе использовали

 
Igor Makanu:

сделайте так:

Вы не правильную спецификацию типов в форматированном выводе использовали

Аааааа, блин! Спасибо большое, Игорь!

Нужно было %f прописать... Что-то я затупил... а еще нужно везде ArraySetAsSeries цеплять. Немного непривычно...

 
Igor Makanu:

пожалуйста

я бы не советовал использовать ArraySetAsSeries() если пишете код индикатора с нуля (если портируете из MQL4 - другой вопрос), 

используйте как номер самого крайнего правого бара rates_total - 1 , быстрее привыкните к логике индикаторов в MQL5 

Спасибо!

Не с нуля пишу... перевожу из мт4 индикатор на мт5
 
Oleg Bondarev:

Еще вопрос задам. На основе того же индикатора. Допустим, вешаем индикатор на график. Получаем первое значение Bid1. Потом получаем второе значение Bid2. И нужно сравнить эти 2 значения. Из второго вычитаем первое и получаем число, которое прибавляем к первому Bid1.

Bid1=1.11133

Bid2=1.11135

Bid2-Bid1=0.00002

Bid1+0.00002=1.11135

Понимаю, что получиться тоже самое что и в изначальном индикаторе.

Просто хочу посмотреть реализацию и понять логику кода.

Помогите. У самого ничего не получается. Делаю 2 буфера х[ ] для сравнения значений Bid и y[ ] для построения графика. И ничего.

 
Oleg Bondarev:

Помогите. У самого ничего не получается. Делаю 2 буфера х[ ] для сравнения значений Bid и y[ ] для построения графика. И ничего.

попробуйте по другому задать вопрос, наверное Ваш вопрос не понятен

Причина обращения: