background

Tradematic Support Center

Guides, articles, videos and links for Tradematic users and developers.

Как написать индикатор линии сопротивления (поддержки)?

35497РЕДАКТОР КОДА ПРИМЕР ИНДИКАТОР УРАВНЕНИЕ ПРЯМОЙ ЭКСТРЕМУМ ПОДДЕРЖКА СОПРОТИВЛЕНИЕ ПОДДЕРЖКИ СОПРОТИВЛЕНИЯ

Пример кода ниже:

// Как написать индикатор линии сопротивления (поддержки): 
// Используется уравнение прямой, которая проходит через две заданные точки
// Задаем входящий массив DataSeries, стандартно это массив цен Close
// Строим линию, например с 3 по 5 бар, проходящую через цены Close на двух барах
// Далее можно строить данный индикатор, например, на точках экстремума и т.д. 
// рисоваться она будет до последней свечи, и поэтому график может выглядеть не красиво, 
// но рассчитывать и использовать в стратегии можно 

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using TradeMatic;
using TradeMatic.Indicators;

// Класс индикатора Line
public class Line : DataSeries
{
// Конструктор класса
public Line(DataSeries closeSeries, int fistBarNum, int secondBarNum, string description)
: base(CalculateLine(closeSeries, fistBarNum, secondBarNum), description)
{
}

// Рассчитываем массив значений прямой линии проходящей через две точки
private static DataSeries CalculateLine(DataSeries closeSeries, int firstBarNum, int secondBarNum)
{
DataSeries line = new DataSeries();
for (int bar=0; bar < closeSeries.Count; bar++)
{
if (bar <= firstBarNum) line.Add(closeSeries[firstBarNum]);
else
line.Add(((bar-firstBarNum)*(closeSeries[secondBarNum]-closeSeries[firstBarNum])/(secondBarNum-firstBarNum))+closeSeries[firstBarNum]);
}
line.FirstValidValue=firstBarNum;
return line;
}

// Функция Series возвращает инициализированный объект класса Line
public static Line Series(DataSeries closeSeries, int fistBarNum, int secondBarNum)
{
string cacheName = "Line (" + closeSeries.ToString() + ", 1stBarNum: " + fistBarNum.ToString() + ", 2ndBarNum: " + secondBarNum.ToString();
if (closeSeries.Cache.ContainsKey(cacheName)) return (Line)closeSeries.Cache[cacheName];
Line line = new Line(closeSeries, fistBarNum, secondBarNum, cacheName);
// добавим в кэш
closeSeries.Cache.Add(line.Description, line);
return line;
}

// Функция Value
public static double Value(int bar, DataSeries closeSeries, int fistBarNum, int secondBarNum)
{
return Series(closeSeries, fistBarNum, secondBarNum)[bar];
}
}
This website uses cookies. By continuing to use this website, you consent to our Privacy Policy. OK