Страница 1 из 1

Не грузит посторонню либу.

Добавлено: 24 авг 2021, 10:45
Worldmaster
Здравствуйте.

Решил прикрутить в терминал свой индикатор. Сделал его на С++ через обертку на 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;
   }

}


Re: Не грузит посторонню либу.

Добавлено: 24 авг 2021, 11:06
Worldmaster
Работу наладил. Осталось только порешать как бы оптимизировать расчеты чтобы не тормозило. А то просто жуть как все висит.

Безымянный.png


Если кто подскажет как оптимизировать буду благодарен. ))