Здравствуйте.
Скажите, можно ли получить размер сетки графика по вертикали для одного из шести значений масштаба
Размер в каких единицах?
Если в барах то (int)pow(2,ChartGetInteger(0,CHART_SCALE));
ЗЫ Ошибочка, там обратная нумерация возвращается, правильная формула дающая количество баров в одном степе сетки (int)pow(2, 5- ChartGetInteger(0,CHART_SCALE));
Хотелось-бы размер сетки по вертикали получить или в пикселях или в ценах.
Значение масштаба [(+)(-)] от 0 до 5 это масштабирование по горизонтали, вертикальный масштаб зависит от количества видимых в окне баров, затем ищется максимум и минимум этих видимых баров и на основе этих макс и мин делается разбиение с шагом не менее 5.
По идее должны быть минимальное и маскимальное количество кубиков, которое задаёт алгоритму точку перехода в новое состояние сетки (но этот вопрос я не изучал).
- www.mql5.com
Значение масштаба [(+)(-)] от 0 до 5 это масштабирование по горизонтали, вертикальный масштаб зависит от количества видимых в окне баров, затем ищется максимум и минимум этих видимых баров и на основе этих макс и мин делается разбиение с шагом не менее 5.
По идее должны быть минимальное и маскимальное количество кубиков, которое задаёт алгоритму точку перехода в новое состояние сетки (но этот вопрос я не изучал).
У меня похожий алгоритм.
Просто хотелось привязывать горизонтальный индикатор ("Рыночный профиль") к сетке графика - в таком случае смотрелось-бы красиво.
Диапаззон по вертикали можно определеить. С каким шагом сетка нарисована - нет и пытаться не стоит.
Это в четверке так было. Там до сих пор такие проблемы. А вот в пятерке с шагом сетки проблем не замечал. В ней, вроде бы, алгоритм другой. Потому и вычислить можно, как написали выше.
Не знаю не пробовал. В теории все легко, показал бы кто на практике.
1. Получаем высоту графика в пикселах (CHART_HEIGHT_IN_PIXELS).
2. Получаем разность максимальной и минимальной цен графика (CHART_PRICE_MAX - CHART_PRICE_MIN).
3. Вычисляем кол-во пунктов, приходящееся на один пиксел.
Далее пока только предположения, т. к. досконально не занимался.
Главной задачей является нахождение расстояния между нижней границей графика и первой линией сетки в пикселах. Там, скорее всего, можно будет найти закономерность в шага сетки (в пкс), который где-то округляется до целого числа.
Конечно, чтобы не гадать, можно было бы просто попросить MQ опубликовать (или хотя бы подсказать суть) алгоритм, рисующий сетку. На мой взгляд, в нем не должно быть никакой военной тайны.
В итоге на скорую руку получилось так (метод не претендует на точность, но вектор должен быть понятен):
double point = _Point; if (point == 0) return; double priceMin = ChartGetDouble(0, CHART_PRICE_MIN, 0); double priceMax = ChartGetDouble(0, CHART_PRICE_MAX, 0); long height = ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, 0); if (height == 0) return; long heightIn5Points = long((priceMax - priceMin) / (5 * point)); double ratio = double (height / heightIn5Points); int gridStep = MathMax(32, int (MathRound(ratio))); Print("Шаг сетки в пикселах = ", gridStep);
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
Скажите, можно ли получить размер сетки графика по вертикали для одного из шести значений масштаба