Здравствуйте, уважаемые форумчане! Не могли бы вы подсказать, как можно реализовать следующую функцию: Есть пересечение двух МА. Если произошло пересечение, то необходимо место пересечения + два бара вперед окрасить другим цветом(Не всю линию МА). Я пользовался следующим методом отрисовки:
//--- plot ColorSection#property indicator_label4"ColorSection"#property indicator_type4DRAW_COLOR_SECTION//--- зададим 2 цвета для раскраски секций (они хранятся в специальном массиве)#property indicator_color4clrSeaGreen,clrPink#property indicator_style4STYLE_SOLID#property indicator_width41
и для отрисовки написал такой код:
for(bar=limit; bar>=0 && !IsStopped();bar--)
{
if(Fast_Ma[bar+1]>Slow_Ma[bar+1]){
//--- конец отрезка установим на цену High этого бара
ColorSectionBuffer[bar+1]=Fast_Ma[bar+1];
}
//--- если остаток от деления равен bars, elseif(Fast_Ma[bar+1]<Slow_Ma[bar+1]){
//--- конец отрезка установим на цену High этого бара
ColorSectionBuffer[bar+1]=Fast_Ma[bar+1];
}
else
{
//--- если ничего не подошло, то этот бар пропускаем - ставим значение 0
ColorSectionBuffer[bar+1]=0;
}
Однако это работает не так, как хотелось бы. Моих знаний программирования к сожалению не хватает, поэтому прошу помощи у вас. Заранее спасибо!
W1nd ReD #: Есть пересечение двух МА. Если произошло пересечение, то необходимо место пересечения + два бара вперед окрасить другим цветом(Не всю линию МА).
лучше делать отдельный буфер с DRAW_ARROW и сдвигом на 2 бара. Когда ма-шки пересеклись ставишь ему значения. Всё :-)
if (Crossed(Fast_Ma,Slow_Ma,i)) SignalBuffer[i]=close[i]; else SignalBuffer[i]=EMPTY_VALUE;
иначе изменение цвета МA на одном баре мягко говоря плохо заметно. К тому-же ты хочешь подкрашивать на 2 бара вперёд, всё равно где-то придётся добавлять сдвиг
лучше делать отдельный буфер с DRAW_ARROW и сдвигом на 2 бара. Когда ма-шки пересеклись ставишь ему значения. Всё :-)
if (Crossed(Fast_Ma,Slow_Ma,i)) SignalBuffer[i]=close[i]; else SignalBuffer[i]=EMPTY_VALUE;
иначе изменение цвета МA на одном баре мягко говоря плохо заметно. К тому-же ты хочешь подкрашивать на 2 бара вперёд, всё равно где-то придётся добавлять сдвиг
Спасибо за ваш ответ!
У меня МА сдвиг имеют. + если я использую функцию
DRAW_COLOR_SECTION
то я могу при пересечение МА менять толщину. Про DRAW_ARROW, я думал, но там проблема в том, что можно ставить только значки, а я хотел, чтобы линяя МА меняла цвет, а в дальнейшем и толщину
Начал разбираться с MT5, написал простой код (ниже). Почему график рисуется для баров в левой части графика, а не для баров от 0 до 199 (т.е. в правой части)?
grezky #: Начал разбираться с MT5, написал простой код (ниже). Почему график рисуется для баров в левой части графика, а не для баров от 0 до 199 (т.е. в правой части)?
Вы забыли ArraySetAsSeries() указать. Он как раз и отвечает за отрисовку баров в правой части графика. Указывать необходимо в функцию OnInit()
Добавил контроль открытия на текущей свече, не допускается открытие заново, если уже есть или было открытие.
спасибо!
а с " MaximumRisk и DecreaseFactor из кода и открывал позиции по фиксированному лоту?" не получилось?
Добавил контроль открытия на текущей свече, не допускается открытие заново, если уже есть или было открытие.
разобрался с лотом. еще раз спасибо!
if(StringFind(vName, name_n) != -1) ObjectDelete(vName);
ObjectDelete(0,vName);
Не могли бы вы подсказать, как можно реализовать следующую функцию:
Есть пересечение двух МА. Если произошло пересечение, то необходимо место пересечения + два бара вперед окрасить другим цветом(Не всю линию МА). Я пользовался следующим методом отрисовки:
и для отрисовки написал такой код:
Однако это работает не так, как хотелось бы. Моих знаний программирования к сожалению не хватает, поэтому прошу помощи у вас. Заранее спасибо!
Есть пересечение двух МА. Если произошло пересечение, то необходимо место пересечения + два бара вперед окрасить другим цветом(Не всю линию МА).
лучше делать отдельный буфер с DRAW_ARROW и сдвигом на 2 бара. Когда ма-шки пересеклись ставишь ему значения. Всё :-)
if (Crossed(Fast_Ma,Slow_Ma,i)) SignalBuffer[i]=close[i]; else SignalBuffer[i]=EMPTY_VALUE;
иначе изменение цвета МA на одном баре мягко говоря плохо заметно. К тому-же ты хочешь подкрашивать на 2 бара вперёд, всё равно где-то придётся добавлять сдвиг
лучше делать отдельный буфер с DRAW_ARROW и сдвигом на 2 бара. Когда ма-шки пересеклись ставишь ему значения. Всё :-)
if (Crossed(Fast_Ma,Slow_Ma,i)) SignalBuffer[i]=close[i]; else SignalBuffer[i]=EMPTY_VALUE;
иначе изменение цвета МA на одном баре мягко говоря плохо заметно. К тому-же ты хочешь подкрашивать на 2 бара вперёд, всё равно где-то придётся добавлять сдвиг
Спасибо за ваш ответ!
У меня МА сдвиг имеют. + если я использую функцию
DRAW_COLOR_SECTIONто я могу при пересечение МА менять толщину. Про DRAW_ARROW, я думал, но там проблема в том, что можно ставить только значки, а я хотел, чтобы линяя МА меняла цвет, а в дальнейшем и толщину
Почему график рисуется для баров в левой части графика, а не для баров от 0 до 199 (т.е. в правой части)?
Начал разбираться с MT5, написал простой код (ниже).
Почему график рисуется для баров в левой части графика, а не для баров от 0 до 199 (т.е. в правой части)?
Вы забыли ArraySetAsSeries() указать. Он как раз и отвечает за отрисовку баров в правой части графика. Указывать необходимо в функцию OnInit()
Вы забыли ArraySetAsSeries() указать. Он как раз и отвечает за отрисовку баров в правой части графика. Указывать необходимо в функцию OnInit()
Спасибо!
Как удалить все до 2000 года?
ПС В МТ4 кнопкой F2 можно вызвать окно и в нем удалить лишнее, но в МТ5 похоже такого нет?