отслеживающий дивергенцию?
Пример на картинке

Спасибо!
evge писал(а):можно, если Вам удастся четко формализовать данные события без субъективного составляющего
Den98 писал(а):Можно сделать аналог для Альфа-Директ?
evge писал(а):Den98 писал(а):Можно сделать аналог для Альфа-Директ?
Можно, но у меня пока нет возможности посмотреть даже как в mt4 реализовано.
В ближайшие дни посмотрю и отпишу тут.
Den98 писал(а):Спасибо! Буду ждать.
evge писал(а):Den98 писал(а):Спасибо! Буду ждать.
Извиняюсь, но возможности нет пока. посмотрю по возможности, болею
Код: Выделить всё
function Initialize()
{
IndicatorName = "MACDDivergence";
PriceStudy = true;
AddInput("I", Inputs.Candle);
AddParameter("pFast", 12);
AddParameter("pSlow", 26);
AddParameter("signal", 9);
AddParameter("Bars", 300, 1);
AddSeries("Histogram", DrawAs.Histogram, Color.Blue, AxisType.ZeroBased, true, Axes.New);
AddSeries("Line", DrawAs.Line, Color.Green, AxisType.ZeroBased, true, Axes.New);
AddSeries("SignalLine", DrawAs.Line, Color.Silver, AxisType.ZeroBased, true, Axes.New);
AddSeries("NTLBull", DrawAs.Custom, Color.Green, AxisType.ZeroBased, true, Axes.New);
AddSeries("NTLBear", DrawAs.Custom, Color.Red, AxisType.ZeroBased, true, Axes.New);
}
function Evaluate()
{
// evge 06.02.2017 http://alfadirect4.ru
NTLBull.DrawCircle();
NTLBear.DrawCircle();
var M = MACD(I.Close, pFast, pSlow, signal);
Histogram = M["Histogram"][0];
Line = M["Line"][0];
SignalLine = M["SignalLine"][0];
int shift = 0;
// Bullish \ Bearish Divergence
int current = shift;
int lastTrough = -1;
int lastPeak = -1;
for(int i = shift+2; i < Bars; i++)
{
if(SignalLine[i] <= SignalLine[i+1] && SignalLine[i] <= SignalLine[i+2] &&
SignalLine[i] <= SignalLine[i-1] && SignalLine[i] <= SignalLine[i-2])
{
for (int j = i; j < Bars; j++)
{
if(Line[j] <= Line[j+1] && Line[j] < Line[j+2] &&
Line[j] <= Line[j-1] && Line[j] < Line[j-2])
{
lastTrough = j;
break;
}
}
}
if(SignalLine[i] >= SignalLine[i+1] && SignalLine[i] >= SignalLine[i+2] &&
SignalLine[i] >= SignalLine[i-1] && SignalLine[i] >= SignalLine[i-2])
{
for (int j = i; j < Bars; j++)
{
if(Line[j] >= Line[j+1] && Line[j] > Line[j+2] &&
Line[j] >= Line[j-1] && Line[j] > Line[j-2])
{
lastPeak = j;
break;
}
}
}
if (lastTrough != -1 || lastPeak != -1) break;
}
if ((lastTrough != -1) &&
(
(Line[current] > Line[lastTrough] &&
I.Low[current] < I.Low[lastTrough])
||
(Line[current] < Line[lastTrough] &&
I.Low[current] > I.Low[lastTrough])
)
)
{
NTLBull[current] = Line[current];
}
if ((lastPeak != -1) &&
(
(Line[current] > Line[lastPeak] &&
I.High[current] < I.High[lastPeak])
||
(Line[current] < Line[lastPeak] &&
I.High[current] > I.High[lastPeak])
)
)
{
NTLBear[current] = Line[current];
}
}
evge писал(а):Вот пока получилось вот это.
Если есть идеи по развитию предлагайте.
[/code]
Вернуться в «Общие вопросы по разработке»
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 217 гостей