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]; } }