Общие вопросы по разработке > Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
Добрый день ,
как менять цвет SMA под(над) сигналом пользовательского индикатора?
На скрине SMA желтая.
как менять цвет SMA под(над) сигналом пользовательского индикатора?
На скрине SMA желтая.
Re: Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
Есть индикатор "Дельта", там если он больше 0 зеленый, ниже красный.
Простой пример, но он на гистограмме:
А вот "Супертренд", с зеленой и красной линией на графике:
Осталось понять при каком условии SMA должен менять цвет.
Простой пример, но он на гистограмме:
Код: Выделить всё
if (Delta > 0 )
Delta.DrawHistogram(Color.Green, Color.Green, 100);
else
Delta.DrawHistogram(Color.Red, Color.Red, 100);
}
А вот "Супертренд", с зеленой и красной линией на графике:
Код: Выделить всё
AddSeries("U", DrawAs.Custom, Color.Green);
AddSeries("D", DrawAs.Custom, Color.Red);
Код: Выделить всё
if (C[0] >= 0)
{
ST = I.Low[0] - A[0] * K; if (CurrentIndex > MPer) ST[0] = Math.Max(ST[0], ST[1]);
U[1] = ST[1]; U[0] = ST[0]; U.DrawLine();
}
else
{
ST = I.High[0] + A[0] * K; if (CurrentIndex > MPer) ST[0] = Math.Min(ST[0], ST[1]);
D[1] = ST[1]; D[0] = ST[0]; D.DrawLine();
}
Осталось понять при каком условии SMA должен менять цвет.
Re: Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
Вопрос был не про какие-то другие индикаторы с новыми условиями, а про пользовательский тот, что на скрине и не про линию пользовательского индикатора, а про линию SMA .
Над стрелкой вверх она одного цвета.
Под стрелкой вниз она другого цвета.
Над стрелкой вверх она одного цвета.
Под стрелкой вниз она другого цвета.
Re: Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
а где остальная часть SMA?
Код: Выделить всё
function Initialize()
{
IndicatorName = "SMA_III";
PriceStudy = true ;
AddInput("Input", Inputs.Price);
AddParameter("Period", 1);
AddGlobalVariable("D", Types.Double, 0.0);
AddSeries("S", DrawAs.Custom, Color.Yellow);
}
function Evaluate()
{
if ( CurrentIndex < Period )
{
D = D + Input[0];
S = D / (CurrentIndex + 1);
}
else
{
D = D + Input[0] - Input[(int)(-Period)] ;
S = D / Period;
}
if ( S[0] >= MY.индикатор.GetValue("L", 1))
S.DrawLine(Color.Green, Line.DashSmall, 3);
if ( S[0] <= MY.индикатор.GetValue("H", 1))
S.DrawLine(Color.Red, Line.DashSmall, 3);
}
Re: Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
Если я правильно прочитал индикатор (он не сработал), то у него есть 3 варианта:
вар1) S[0] выше нижней границы 1 бар назад, вариант 2 не применим;
вар2) S[0] ниже нижней границы 1 бар назад, вариант 1 не применим;
вар3) S[0] между данными границами, однозначного результата нет;
или, возможно, имеется 4 вар. когда наоборот оба условия не выполняются.
Предлагаю переписать скрипт так, чтобы были заданы все возможные варианты SMA и их цвета, как в данном примере:
вар1) S[0] выше нижней границы 1 бар назад, вариант 2 не применим;
вар2) S[0] ниже нижней границы 1 бар назад, вариант 1 не применим;
вар3) S[0] между данными границами, однозначного результата нет;
или, возможно, имеется 4 вар. когда наоборот оба условия не выполняются.
Предлагаю переписать скрипт так, чтобы были заданы все возможные варианты SMA и их цвета, как в данном примере:
Код: Выделить всё
if ( S[0] > L[0] )
{
if ( S[0] < Input.Close[0] )
{S.DrawLine(Color.Green, Line.DashSmall, 2);}
else {S.DrawLine(Color.Yellow, Line.DashSmall, 1);}
}
else {
if ( S[0] > Input.Close[0] )
{S.DrawLine(Color.Red, Line.DashSmall, 2);}
else {S.DrawLine(Color.Yellow, Line.DashSmall, 1);}
}
Re: Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
тут дело вот в чем:
Индикатор рисует только одну точку после экстремума, так как индикаторы
MY.индикатор.GetValue("L", 1))
MY.индикатор.GetValue("H", 1))
имеют значения только в точках максимума и минимума (следующая точка GetValue("H", 1)) ,
а в остальных никакого значения не имеют , следовательно и рисовать не будет.
То есть НЕЛЬЗЯ, якобы (так мне ответил суппорт).
Но заставить его менять цвет SMA (именно SMA, это принципиально) после сигнала индикатора можно.
Вот пример ( красная линия -это SMA поменявшая цвет после сигнала вниз).
Тут весь график становится цвета последнего сигнала для пущей наглядности (так как предыдущие участки пройдены - уже не важно какого они цвета, зато так - нагляднее).
Индикатор рисует только одну точку после экстремума, так как индикаторы
MY.индикатор.GetValue("L", 1))
MY.индикатор.GetValue("H", 1))
имеют значения только в точках максимума и минимума (следующая точка GetValue("H", 1)) ,
а в остальных никакого значения не имеют , следовательно и рисовать не будет.
То есть НЕЛЬЗЯ, якобы (так мне ответил суппорт).
Но заставить его менять цвет SMA (именно SMA, это принципиально) после сигнала индикатора можно.
Вот пример ( красная линия -это SMA поменявшая цвет после сигнала вниз).
Тут весь график становится цвета последнего сигнала для пущей наглядности (так как предыдущие участки пройдены - уже не важно какого они цвета, зато так - нагляднее).
Последний раз редактировалось Den 17 июл 2017, 11:14, всего редактировалось 1 раз.
Re: Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
Код: Выделить всё
if ( S[0] > L[0] )
{
if ( S[0] < Input.Close[0] )
{S.DrawLine(Color.Green, Line.DashSmall, 2);}
else {S.DrawLine(Color.Yellow, Line.DashSmall, 1);}
}
else {
if ( S[0] > Input.Close[0] )
{S.DrawLine(Color.Red, Line.DashSmall, 2);}
else {S.DrawLine(Color.Yellow, Line.DashSmall, 1);}
}
Input.Close[0] тут ни причем, так как индикатор не совпадает с ним в каждой точке Input.Close[0]
Re: Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
Input.Close[0] был для примера,
ЕСЛИ сигнал1-цвет1 else (если сигнал 2-цвет2, else цвет3)
линия будет менять цвет только в 2х и более барах отличающихся сигналом, при единичном баре с сигналом на линии появится точка
ЕСЛИ сигнал1-цвет1 else (если сигнал 2-цвет2, else цвет3)
Код: Выделить всё
if ( S[0] >= MY.индикатор.GetValue("L", 1))
S.DrawLine(Color.Green, Line.DashSmall, 3);
else {
if ( S[0] <= MY.индикатор.GetValue("H", 1))
{S.DrawLine(Color.Red, Line.DashSmall, 3);}
else {S.DrawLine(Color.Yellow, Line.DashSmall, 1);}
}
линия будет менять цвет только в 2х и более барах отличающихся сигналом, при единичном баре с сигналом на линии появится точка
Re: Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
1.Линия будет менять цвет ТОЛЬКО НА БАРЕ, ГДЕ ПОЯВИЛСЯ СИГНАЛ ИНДИКАТОРА - выше приведен ответ Еремина, почему нельзя менять цвет SMA между сигналами отстоящими друг от друга более, чем на 1 бар.
2.Приведен скрин, где цвет SMA всё же меняется в соответствии с сигналом индикатора (значит всё-таки можно)
2.Приведен скрин, где цвет SMA всё же меняется в соответствии с сигналом индикатора (значит всё-таки можно)
Re: Совсем уж простенькое - КАК МЕНЯТЬ ЦВЕТ SMA ?
Предлагаю ввести вспом. переменную которая будет изменять постоянное значение в зависимости от сигналов и изменять SMA
В моем скрипте все получилось даже когда двойные условия (S[0] > L[0] S[0] < Input.Close[0] или S[0] < L[0] S[0] > Input.Close[0]) фактически не выполняются (раньше там был желтый цвет)
Желтый линия SMA идет только до первого сигнала
Код: Выделить всё
AddGlobalVariable("P", Types.Double, 0.0);
Код: Выделить всё
if ( S[0] >= MY.индикатор.GetValue("L", 1))
P = 1;
if ( S[0] <= MY.индикатор.GetValue("H", 1))
P = -1;
if ( P == 1)
S.DrawLine(Color.Green, Line.DashSmall, 3);
else {
if (P == -1)
{S.DrawLine(Color.Red, Line.DashSmall, 3);}
else {S.DrawLine(Color.Yellow, Line.DashSmall, 1);}
}
}
В моем скрипте все получилось даже когда двойные условия (S[0] > L[0] S[0] < Input.Close[0] или S[0] < L[0] S[0] > Input.Close[0]) фактически не выполняются (раньше там был желтый цвет)
Код: Выделить всё
function Initialize()
{
IndicatorName = "SMASignaL2";
PriceStudy = true;
AddInput("Input", Inputs.Candle);
AddParameter("PeriodS", 50);
AddParameter("PeriodL", 200);
AddSeries("S", DrawAs.Custom, Color.Yellow);
AddSeries("L", DrawAs.Line, Color.Gray);
AddGlobalVariable("P", Types.Double, 0.0);
}
function Evaluate()
{
// AlfaDirect. 2017. Kurono
if ( CurrentIndex < PeriodS) {S = Input[0]; }
else {var Inp = LIB.MID(Input);
S = SMA(Inp, PeriodS)[0]; }
if ( CurrentIndex < PeriodL) {L = Input[0]; }
else {var Inp = LIB.MID(Input);
L = SMA(Inp, PeriodL)[0]; }
if ( S[0] > L[0] )
{
if ( S[0] < Input.Close[0] )
{P = 1;}
}
if ( S[0] < L[0] )
{
if ( S[0] > Input.Close[0] )
{P = -1;}
}
if ( P == 1)
S.DrawLine(Color.Green, Line.DashSmall, 2);
else {
if ( P == -1)
{S.DrawLine(Color.Red, Line.DashSmall, 2);}
else {S.DrawLine(Color.Yellow, Line.DashSmall, 1);}
}
}
Желтый линия SMA идет только до первого сигнала
Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей