Подскажите пожалуйста, я только начинаю программировать.Хочу обьединить фрактал на покупку и на продажу в один блок. Как это лучше сделать?
using System;
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;
namespace FractalSell_
{
public class FractalSell : IBar2BoolsHandler, IContextUses
{
[HandlerParameter(true, "5", Min = "1", Max = "20", Step = "1")]
public int Right { get; set; }
[HandlerParameter(true, "5", Min = "1", Max = "20", Step = "5")]
public int Left { get; set; }
[HandlerParameter(true, "0", Min = "0", Max = "1", Step = "1")]
public int CurrentBar { get; set; }
[HandlerParameter(true, "0", Min = "0", Max = "1", Step = "1")]
public int Fractal { get; set; }
public IList<bool> Execute(ISecurity source)
{
var L = source.LowPrices;
IList<bool> frsell1 = new List<bool>(L.Count);
IList<bool> frsell2 = new List<bool>(L.Count);
bool frsellv =false;
bool frsellv1 =false;
int StartIndex=Left+(Right+CurrentBar);
int ResCheck=Left+Right;
for (int i = 0; i < L.Count; i++)
{
if(i<StartIndex)
frsellv=false;
else
{
int Check = 0;
int IndFr = i-(CurrentBar+Right);
for(int j=(i-StartIndex);j<=(i-CurrentBar);j++)
{
if(j!=IndFr)
{
if(L[j]>L[IndFr])
Check++;
else
break;
}
}
if(Check==ResCheck)
frsellv=true;
else
frsellv=false;
}
frsell1.Add(frsellv);
}
//shift
for (int i = (Right+CurrentBar); i < L.Count; i++)
{
if(frsell1[i]==true)
frsellv1=true;
else
frsellv1=false;
frsell2.Add(frsellv1);
}
for (int i = L.Count-(Right+CurrentBar); i < L.Count; i++)
{
frsellv1=false;
frsell2.Add(frsellv1);
}
return Fractal==0?frsell1:frsell2;
}
public IContext Context { get; set; }
}
}
и
using System;
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;
namespace FractalBuy_
{
public class FractalBuy : IBar2BoolsHandler, IContextUses
{
[HandlerParameter(true, "5", Min = "1", Max = "20", Step = "1")]
public int Right { get; set; }
[HandlerParameter(true, "5", Min = "1", Max = "20", Step = "5")]
public int Left { get; set; }
[HandlerParameter(true, "0", Min = "0", Max = "1", Step = "1")]
public int CurrentBar { get; set; }
[HandlerParameter(true, "0", Min = "0", Max = "1", Step = "1")]
public int Fractal { get; set; }
public IList<bool> Execute(ISecurity source)
{
var H = source.HighPrices;
IList<bool> frbuy1 = new List<bool>(H.Count);
IList<bool> frbuy2 = new List<bool>(H.Count);
bool frbuyv =false;
bool frbuyv1 =false;
int StartIndex=Left+(Right+CurrentBar);
int ResCheck=Left+Right;
for (int i = 0; i < H.Count; i++)
{
if(i<StartIndex)
frbuyv=false;
else
{
int Check = 0;
int IndFr = i-(CurrentBar+Right);
for(int j=(i-StartIndex);j<=(i-CurrentBar);j++)
{
if(j!=IndFr)
{
if(H[j]<H[IndFr])
Check++;
else
break;
}
}
if(Check==ResCheck)
frbuyv=true;
else
frbuyv=false;
}
frbuy1.Add(frbuyv);
}
//shift
for (int i = (Right+CurrentBar); i < H.Count; i++)
{
if(frbuy1[i]==true)
frbuyv1=true;
else
frbuyv1=false;
frbuy2.Add(frbuyv1);
}
for (int i = H.Count-(Right+CurrentBar); i < H.Count; i++)
{
frbuyv1=false;
frbuy2.Add(frbuyv1);
}
return Fractal==0?frbuy1:frbuy2;
}
public IContext Context { get; set; }
}
}