Обязательно запустите код в двух режимах: "Все тики" и "Каждый тик на основе реальных тиков".
Цифру то функция выдает. Только я не уверен, что правильную. Вернее уверен, что неправильную :))
Хорошо, зайду с другой стороны. Запросите спред за 30 баров или за 50. И просто распечатайте полученный массив (ArrayPrint). Сравните запуск в режиме "Все тики" и "Каждый тик на основе реальных тиков".
Хорошо, зайду с другой стороны. Запросите спред за 30 баров или за 50. И просто распечатайте полученный массив (ArrayPrint). Сравните запуск в режиме "Все тики" и "Каждый тик на основе реальных тиков".
Спасибо!
Буду пробовать.
Может проверите все-таки мою функцию CalcSpread() плиззззз? Я пол дня убил. Очень прошу.
Всем привет!
Мне необходимо получить усреднённый спред за определёное кол-во баров в истории.
Чувствую, что несовсем правильно написал :)
Первая функция - копируем спред согласно переменной Spread_Filter_Bars - с 1000 баров в истории.
Вторая, по идее, должна усреднить все "спреды".
Подскажите пожалуйста, правильный ли мой код?
Заранее спасибо!
Функция CopySpread возвращает минимальные спреды за бар. Следовательно таким образом вы можете посчитать только средний среди минимальных...
Вы ошибаетесь. Указанная Вами функция возвращает спреды, но не минимальные и не максимальные.
В любом случае я разобрался. К сожалению помощи тут не получил.
Вот "правильная" функция, может кому пригодится. Возможно она непрофессионально написана, но свою функцию выполняет.
double CalcSpread() { double avgspread = 0.000000000000001; for(int i=0;i<Spread_Filter_Bars && !IsStopped();i++) { avgspread += SpreadBuffer[i]; } return(NormalizeDouble(avgspread/Spread_Filter_Bars*_Point,_Digits)); }
Хорошо, зайду с другой стороны. Запросите спред за 30 баров или за 50. И просто распечатайте полученный массив (ArrayPrint). Сравните запуск в режиме "Все тики" и "Каждый тик на основе реальных тиков".
CI 0 20:37:50.788 Core 1 EURUSD,M1 (Alpari-MT5-Demo): every tick generating HN 0 20:37:50.788 Core 1 EURUSD,M1: testing of Experts\Test1.ex5 from 2018.11.01 00:00 to 2019.02.01 00:00 started CL 0 20:37:50.788 Core 1 final balance 10000.00 USD RN 0 20:37:50.788 Core 1 2019.01.31 23:59:59 3 3 3 4 4 4 5 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 6 5 6 6 21 22 19 19
PL 0 20:38:01.889 Core 1 EURUSD,M1 (Alpari-MT5-Demo): generating based on real ticks MI 0 20:38:01.889 Core 1 EURUSD,M1: testing of Experts\Test1.ex5 from 2018.11.01 00:00 to 2019.02.01 00:00 started GJ 3 20:38:01.889 Core 1 EURUSD : 2018.11.21 23:59 - 9 tick prices mismatch for 6 minute bars EF 3 20:38:01.889 Core 1 EURUSD : 2018.12.24 23:59 - real ticks absent for 4 minutes out of 1257 total minute bars within a day PF 3 20:38:01.889 Core 1 EURUSD : 2018.12.24 23:59 - 1 tick prices mismatch for 1 minute bars KN 0 20:38:01.889 Core 1 EURUSD : real ticks begin from 2018.09.03 00:00:00 MJ 3 20:38:01.889 Core 1 EURUSD : 2018.11.01 00:00 - 2019.02.01 00:00 real ticks absent for 4 minutes of 91006 total minute bars, every tick generation used FQ 3 20:38:01.889 Core 1 EURUSD : 2018.11.01 00:00 - 2019.02.01 00:00 tick prices of 10 ticks not matched for 7 minute bars QR 3 20:38:01.889 Core 1 EURUSD : 2018.11.01 00:00 - 2019.02.01 00:00 last prices absent for 1253 minute bars, bid prices used HQ 3 20:38:01.889 Core 1 EURUSD : 2018.11.01 00:00 - 2019.02.01 00:00 last prices absent for 2 whole days, bars built by bid prices RN 0 20:38:01.889 Core 1 final balance 10000.00 USD PI 0 20:38:01.889 Core 1 2019.01.31 23:59:58 3 3 3 4 4 4 5 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 6 5 6 6 21 22 19 19
int OnInit() { return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { int sp[]; CopySpread(_Symbol,_Period,1,50,sp); ArrayPrint(sp); }
Вы ошибаетесь. Указанная Вами функция возвращает спреды, но не минимальные и не максимальные.
В любом случае я разобрался. К сожалению помощи тут не получил.
Вот "правильная" функция, может кому пригодится. Возможно она непрофессионально написана, но свою функцию выполняет.
Я не имею права мешать вам заблуждаться.
CopyTicks (в этот раз только в режиме «Реальные тики», это важно) и распечатайте максимальный и минимальный спред в полученном массиве.
Отлично, а теперь последний шаг: для бара где спред 19 или 21 выполните
CopyTicks (в этот раз только в режиме «Реальные тики», это важно) и распечатайте максимальный и минимальный спред в полученном массиве.
Может Вам сразу код отправить, который спреды на минутных барах делает такими, какими они и должны быть? :) Мне не сложно.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Мне необходимо получить усреднённый спред за определёное кол-во баров в истории.
Чувствую, что несовсем правильно написал :)
Первая функция - копируем спред согласно переменной Spread_Filter_Bars - с 1000 баров в истории.
Вторая, по идее, должна усреднить все "спреды".
Подскажите пожалуйста, правильный ли мой код?
Заранее спасибо!