Уважаемые форумчане.
У меня скрипт полностью написан на C# - все воткнули как внешний источник. Все работает. Но вот незадача: ""В ходе торгов агент разумеется входит в позицию при возникновении сигнала. Через некоторое время, если посмотреть и проверить все с самого начала обнаруживается, что сигнала на вход в позицию не было. Если смотреть потом в лабе, то тоже сигнала по которому был вход в позицию нет, т.е. при анализе данных робот почему то выдает ЛОЖНЫЙ СИГНАЛ, который потом исчезает.""
Просмотрел все и не могу понять в чем дело и где. Я не программист.
Робот написан полностью на C#, кубиков нет. Подключен в Тслаб как внешний источник.
Также агент-скрипт что то грузит Тслаб аж на 16гб. Использую 64 разрядную версию Тслаб.
Вот часть кода отвечающего за определение сигнала:
------------------------------------
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;
using System;
using System.Diagnostics;
namespace signalru
{
public class signalru : IContextUses, IDouble2DoubleHandler
{
[HandlerParameter]
public bool Peak { get; set; }
[HandlerParameter]
public int Period_peak { get; set; }
//[HandlerParameter]
//public bool Hole { get; set; }
// [HandlerParameter]
// public int Period_hole { get; set; }
[HandlerParameter]
public bool UP_on { get; set; }
[HandlerParameter]
public double UP_level { get; set; }
[HandlerParameter]
public bool Down_on { get; set; }
[HandlerParameter]
public double Down_level { get; set; }
public IList<double> Execute(IList<double> source)
{
IList<double> sig_p = new List<double>();
IList<double> sig_h = new List<double>();
for (int i = 0; i < source.Count - 1; i++)
{
sig_p.Add(0);
sig_h.Add(0);
}
////условие 1
if (Peak == true)
{
sig_p = signalru_f(source, source.Count - 1, Period_peak);
}
// if (Hole == true)
// {
// sig_h = signalru_f(source, source.Count - 1, Period_hole);
// }
IList<double> sig = new List<double>();
for (int i = 0; i < source.Count - 1; i++)
{
sig.Add((sig_p[i] + sig_h[i]));
}
bool u1 = false;
bool d1 = false;
//условие 2
if (UP_on == true && Down_on == false)
{
for (int i = 0; i < source.Count - 1; i++)
{
if (source[i] > UP_level)
{
sig[i] = 0;
}
else if (Peak == false)
//&& Hole == false)
{
sig[i] = 1;
}
}
}
//Условие 3
if (UP_on == false && Down_on == true)
{
for (int i = 0; i < source.Count - 1; i++)
{
if (source[i] < Down_level)
{
sig[i] = 0;
}
else if (Peak == false)
//&& Hole == false)
{
sig[i] = 1;
}
}
}
if (UP_on == true && Down_on == true)
{
for (int i = 0; i < source.Count - 1; i++)
{
if (source[i] < Down_level || source[i] > UP_level)
{
sig[i] = 0;
}
else if (Peak == false)
//&& Hole == false)
{
sig[i] = 1;
}
}
}
return sig;
}
public IContext Context { get; set; }
double signalru_one(IList<double> Mas, int end_N, int period)
{
double Answer = 1;
for (int i = end_N - period + 1; i <= end_N - 1; i++)
{
if (Mas[i] < Mas[i - 1])
{
Answer = 0;
}
}
if (Mas[end_N] >= Mas[end_N - 1])
{
Answer = 0;
}
return Answer;
}
////---------------------------------------------
IList<double> signalru_f(IList<double> Mas, int End_N, int Period)
{
IList<double> Answer = new List<double>();
for (int j = 0; j < Period; j++)
{
Answer.Add(0);
}
for (int i = Period; i < End_N; i++)
{
Answer.Add(signalru_one(Mas, i, Period));
}
return Answer;
}
double signalru_one(IList<double> Mas, int end_N, int period)
{
double Answer = -1;
for (int i = end_N - period + 1; i <= end_N - 1; i++)
{
if (Mas[i] > Mas[i - 1])
{
Answer = 0;
}
}
if (Mas[end_N] <= Mas[end_N - 1])
{
Answer = 0;
}
return Answer;
}
////---------------------------------------------
IList<double> signalru_f(IList<double> Mas, int End_N, int Period)
{
IList<double> Answer = new List<double>();
for (int j = 0; j < Period; j++)
{
Answer.Add(0);
}
for (int i = Period; i < End_N; i++)
{
Answer.Add(signalru_one(Mas, i, Period));
}
return Answer;
}
}
}
------------------------------------Помогите исправить ошибку.