Решил прикрутить в терминал свой индикатор. Сделал его на С++ через обертку на C#.
В студии все проверил и отладил работает как положено. А вот встроеный скрипт почему то не стартует.
По сути вопросов только два:
1. Каким образом создать глобальную переменную типа MethodInfo чтобы в коде не загружать постоянно библиотеку.
2. Каким образом вывести лог хоть какой нибудь. На ShowMessage ругается что функция не найдена. Терминал со всеми последними обновами.
Вот код на всякий случай.
Код: Выделить всё
function Initialize()
{
// Область определения параметров индикатора
// Обязательные параметры:
IndicatorName = "Spline"; // Задайте название индикатора и сохраните с данным именем
PriceStudy = true; // Рисовать в области цены (true – да, false – нет)
AddInput("Input", Inputs.Candle); // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
AddSeries("A", DrawAs.Line, Color.Red); // Задаем вид линии индикатора A
// Дополнительные параметры:
AddParameter("Period", 20); // Задаем имя изменяемого параметра и его значение
AddVariable("Z", 0); // Задаем имя глобальной переменной и её значение
}
function Evaluate()
{
System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom(@"..\Src\MathWrapper.dll");
Type cls = asm.GetType("MathWrapper.MathLibWrapper", false, true);
System.Reflection.MethodInfo SplineData = cls.GetMethod("SplineData", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
//public static double[] SplineData(double[] srcX, double[] srcY, double smoofFactor)
var ln = 10;
double[] xsrc = new double[ln];
double[] ysrc = new double[ln];
for(int i=0;i<xsrc.Length;i++)
{
xsrc[i] = i;
ysrc[i] = Input.Close[0 - (xsrc.Length- i)];
}
// если строку вызова за коментировать то работает. Иначе нет и почему хз.
ysrc = (double[])SplineData.Invoke(null, new object[]{xsrc ,ysrc ,1});
for(int i=0;i<xsrc.Length;i++)
{
//A[0-(xsrc.Length- i)] = ysrc[i];
A[0-(xsrc.Length- i)] = 300+i;
}
}