![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо за это
Какую роль играет эта линия SetIndexStyle(0, DRAW_LINE) в приведенном выше коде, когда мы просто использовали объекты для рисования линии? Нужно ли вообще упоминать их, я понимаю роль буферов, но не знаю, почему буфер должен быть связан с индексом и почему индекс должен иметь стиль, ведь то, что мы видим, происходит из вызова createObject с атрибутами цены?
Видели ли вы сами, используя вышеприведенный код, что свечи имеют изогнутые края, а не чистые прямоугольники, как ценовой график?
Я уже объяснил это.
Если вам нужны прямоугольники, рисуйте прямоугольники вместо объектов линии тренда.
Здравствуйте, Фи
Извините за беспокойство, опция RECTANGLE не работает, вот почему я беспокою вас, спасибо за ваше терпение и, пожалуйста, попробуйте это и дайте мне знать, я исправил расчеты HA.
Пожалуйста, попробуйте в последний раз, спасибо, я бы хотел, чтобы этот прямоугольник работал правильно.
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 CLR_NONE
#property indicator_color2 CLR_NONE
double high[];
double low[];
double open[];
double close[];
double haOpen1[];
double haClose1[];
//+------------------------------------------------------------------+
//| Пользовательская функция инициализации индикатора |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_LINE);
SetIndexStyle(3, DRAW_LINE);
SetIndexStyle(4, DRAW_LINE);
SetIndexStyle(5, DRAW_LINE);
SetIndexBuffer(0, high);
SetIndexBuffer(1, low);
SetIndexBuffer(2, open);
SetIndexBuffer(3, close);
SetIndexBuffer(4, haOpen1);
SetIndexBuffer(5, haClose1);
return(0);
}
//+------------------------------------------------------------------+
//| Пользовательская функция деинициализации индикатора |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Пользовательская функция итерации индикатора |
//+------------------------------------------------------------------+
int start(){
string basename = "Heikin-Ashi";
IndicatorShortName(basename);
int window = WindowFind(basename);
for (int i = Bars-100; i >= 0; i--){
// эти два индекса используются для управления размером подокна
// они не видны
high[i] = High[i];
low[i] = Low[i];
double haOpen, haHigh, haLow, haClose, haDiffCo;
haOpen=(haOpen1[i+1]+haClose1[i+1])/2;
haOpen1[i] = haOpen;
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haClose1[i] = haClose;
haHigh=MathMax(haOpen,High[i]);
haLow=MathMin(haOpen,Low[i]);
string name1 = "Heikin-Ashi-HL-"+i;
if(ObjectFind(name1) != -1) ObjectDelete(name1);
ObjectCreate(name1, OBJ_TREND, window, Time[i], haHigh, Time[i], haLow);
ObjectSet(name1, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(name1, OBJPROP_RAY, 0);
ObjectSet(name1, OBJPROP_WIDTH, 2);
string name2 = "Heikin-Ashi-OC-"+i;
if(ObjectFind(name2) != -1) ObjectDelete(name2);
ObjectCreate(name2, OBJ_RECTANGLE, window, Time[i], haOpen, Time[i], haClose);
ObjectSet(name2, OBJPROP_WIDTH, 5);
//ObjectSet(name2, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(name2, OBJPROP_RAY, 0);
if (haOpen < haClose) {
ObjectSet(name1, OBJPROP_COLOR, Chartreuse);
ObjectSet(name2, OBJPROP_COLOR, Chartreuse);
}else{
ObjectSet(name1, OBJPROP_COLOR, Red);
ObjectSet(name2, OBJPROP_COLOR, Red);
}
}
return(0);
}
Свечи должны быть линиями тренда
Ширина тела 2 или, скорее всего, 3
Я не знаю, что вы имеете в виду под "округлением" линий.
Покажите картинку
Иногда при прокрутке влево появляется и это (смешиваются зеленый и красный цвета).
Да, я вижу.
Думаю, у вас там есть несколько несвежих баров, которые нужно удалить.
выясните, что не так, затем подумайте, как вы можете это исправить. есть ли дублирующиеся полосы, что происходит?
Здравствуйте, Фи
Если я прав, то проблема может быть связана с тем, что я делаю следующее
SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_LINE);
SetIndexStyle(3, DRAW_LINE);
SetIndexStyle(4, DRAW_LINE);
SetIndexStyle(5, DRAW_LINE);
Я делаю вышеописанное и заставляю буферы быть отрисованными и в то же время я делаю следующее
if(ObjectFind(name1) != -1) ObjectDelete(name1);
ObjectCreate(name1, OBJ_TREND, window, Time[i], haHigh, Time[i], haLow);
ObjectSet(name1, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(name1, OBJPROP_RAY, 0);
ObjectSet(name1, OBJPROP_WIDTH, 2);
string name2 = "Heikin-Ashi-OC-"+i;
if(ObjectFind(name2) != -1) ObjectDelete(name2);
ObjectCreate(name2, OBJ_TREND, window, Time[i], haOpen, Time[i], haClose);
ObjectSet(name2, OBJPROP_WIDTH, 5);
//ObjectSet(name2, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(name2, OBJPROP_RAY, 0);
То есть и данные в буфере и объекты рисуются друг на друге, я прав?
Я должен удалить установку кода индексного стиля, так как я просто использую буфер для хранения данных и не хочу его рисовать?
Я прав?