Я новичок и хочу получить HA в новом окне... - страница 3

 

Спасибо за это

Какую роль играет эта линия 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);

То есть и данные в буфере и объекты рисуются друг на друге, я прав?

Я должен удалить установку кода индексного стиля, так как я просто использую буфер для хранения данных и не хочу его рисовать?

Я прав?