using System;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Helpers;
using TSLab.Script.Optimization;
namespace DoubleSma
{
public class DoubleSma : IExternalScript
{
#region Параметры оптимизации
public OptimProperty SmaFast = new OptimProperty(16, 8, 512, 8);
public OptimProperty SmaSlow = new OptimProperty(32, 8, 512, 8);
#endregion
public void Execute(IContext ctx, ISecurity sec)
{
//Расчет Индикаторов
var smafast = Series.SMA(sec.ClosePrices, SmaFast);
var smaslow = Series.SMA(sec.ClosePrices, SmaSlow);
var start = Math.Max(SmaFast, SmaSlow);
for (int i = start; i < ctx.BarsCount; i++)
{
var le = sec.Positions.GetLastActiveForSignal("LE");
//Позиции для лонга
if (le == null)
{
if (smafast[i - 1] < smaslow[i - 1] && smafast[i] > smaslow[i])
sec.Positions.BuyAtMarket(i, 1, "LE");
}
else
{
if (smafast[i - 1] > smaslow[i - 1] && smafast[i] < smaslow[i])
le.CloseAtMarket(i, "LX");
}
var se = sec.Positions.GetLastActiveForSignal("SE");
//Позиции для шорта
if (se == null)
{
if (smafast[i - 1] > smaslow[i - 1] && smafast[i] < smaslow[i])
sec.Positions.SellAtMarket(i, 1, "SE");
}
else
{
if (smafast[i - 1] < smaslow[i - 1] && smafast[i] > smaslow[i])
se.CloseAtMarket(i, "SX");
}
}
var pane = sec.PaneChart(ctx, 100, false, PaneSides.RIGHT, 2);
pane.Chart(sec, Helper.blossom.Green);
pane.Led("smaslow", smaslow, Helper.blossom.Red, 2);
pane.Led("smafast", smafast, Helper.blossom.Blue, 2);
}
}
}