Получилось так... И когда покупать и продавать?
Получилось так... И когда покупать и продавать?
Надо пробовать, чтобы узнать. Не берусь утверждать, но судя по рисунку считает не совсем как надо.
При компиляции у меня ругалось на скобки, подскажите где ошибка.
Как пробовать? Когда покупать - продавать? Ну поделитесь секретом. Потом, если толково будет, напишу советник... Или это просто шутка?
Как пробовать? Когда покупать - продавать? Ну поделитесь секретом. Потом, если толково будет, напишу советник... Или это просто шутка?
Никаких секретов нет все коды нашел в интернете, что не нравилось - решил переделать и посмотреть... В тех гистограммах, откуда этот код были пропуски и мне это не понравилось. Между горизонтальными полосками были пропуски.
https://www.mql5.com/ru/code/8920 Идея отсюда, а я решил подправить.
т.е. Вы не ищете профит, точки входа и т.п. - а просто смотрите!!!
Надо пробовать, чтобы узнать. Не берусь утверждать, но судя по рисунку считает не совсемкак надо.
При компиляции у меня ругалось на скобки, подскажите где ошибка.
Почему не совсем как надо? Считает, насколько я смог понять, сколько раз цена принимала определённое значение за указанное количество баров на М1. Если кинуть индикатор на М1, то примерно так и есть. Правда, смысла в этом не очень много.
Код правда не очень, если с #property strict компилировать, то кучу предупреждений выдаст и работать перестанет. И есть же _Point, зачем пользовать
extern double PricePoint = 0.00001;
Вот, этот код компилируется без ошибок и предупреждений:
#property indicator_chart_window extern int MinutesCount = 5000; // 3000 - 10000 ; extern int Amplitude = 20; // 10 .. 100 extern color HistColor = SteelBlue; double Hist[]; datetime OpenTime = 0; int init() { return(0); } int deinit() { DeleteObjects(); return(0); } void DeleteObjects() { for (int i = 0; i< 3000; i++) ObjectDelete("VH"+i); } int DrawLine(int n, double price, int vol, int max) { vol = (int)MathRound(Amplitude * vol / max ); if (vol > 0) { int first = WindowFirstVisibleBar(); datetime dt1 = iTime(_Symbol, Period(), first); datetime dt2 = iTime(_Symbol, Period(), first-vol); ObjectCreate("VH"+n, OBJ_RECTANGLE, 0, dt1, price, dt2, price+_Point); ObjectSet("VH"+n, OBJPROP_STYLE, 0); ObjectSet("VH"+n, OBJPROP_COLOR, HistColor); ObjectSet("VH"+n, OBJPROP_BACK, true); } return (0); } int start() { if (OpenTime != iTime(Symbol(), PERIOD_M1, 0)) { OpenTime = iTime(Symbol(), PERIOD_M1, 0); int n, MaxVolume; double max = iHigh(Symbol(), PERIOD_M1, iHighest(Symbol(), PERIOD_M1, MODE_HIGH, MinutesCount, 0)); double min = iLow(Symbol(), PERIOD_M1, iLowest(Symbol(), PERIOD_M1, MODE_LOW, MinutesCount, 0)); int items = MathRound((max - min) / _Point); if (max == 0) { Alert("There is no minutes data. Please download M1."); return (0); } ArrayResize(Hist, items); ArrayInitialize(Hist, 0); for (int i = 1; i <= MinutesCount; i++) { double C=Low[i]; while(C<High[i]) { n=MathRound((C-min)/_Point); Hist[n]++; C+=_Point; } } MaxVolume = Hist[ArrayMaximum(Hist)]; DeleteObjects(); for (i = 0; i <= items; i++) { DrawLine(i, min + i*_Point, Hist[i], MaxVolume); } } return(0); }
Почему не совсем как надо? Считает, насколько я смог понять, сколько раз цена принимала определённое значение за указанное количество баров на М1. Если кинуть индикатор на М1, то примерно так и есть. Правда, смысла в этом не очень много.
Код правда не очень, если с #property strict компилировать, то кучу предупреждений выдаст и работать перестанет. И есть же _Point, зачем пользовать
extern double PricePoint = 0.00001;
Вот, этот код компилируется без ошибок и предупреждений:
т.е. Вы не ищете профит, точки входа и т.п. - а просто смотрите!!!

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите исправить код гистограммы
чтобы получить результат, как на картинке