namespace TSLab.User
{
using System;
using TSLab.Script;
using TSLab.Utils;
public sealed class Script : System.IDisposable
{
[u]private MyCustomHandlers.Indicators.Osc_MAx2_ OscMAx2_h = new MyCustomHandlers.Indicators.Osc_MAx2_();[/u]
public TSLab.Script.Optimization.BoolOptimProperty ОткрПозиПоРынк_Long = new TSLab.Script.Optimization.BoolOptimProperty(true, false);
public Script()
{
}
public void Execute(TSLab.Script.Handlers.IContext context, TSLab.Script.ISecurity Источник1)
{
// =================================================
// Graph & Canvas Panes
// =================================================
// Make 'Главная' pane
TSLab.Script.IGraphPane Главная_pane = context.CreateGraphPane("Главная", null);
Главная_pane.Visible = true;
Главная_pane.HideLegend = false;
// Make 'ПанельГрафика' pane
TSLab.Script.IGraphPane ПанельГрафика_pane = context.CreateGraphPane("ПанельГрафика", null);
ПанельГрафика_pane.Visible = true;
ПанельГрафика_pane.HideLegend = false;
// Initialize 'OscMAx2' item
this.OscMAx2_h.Context = context;
this.OscMAx2_h.FastPeriod = 15;
this.OscMAx2_h.SlowPeriod = 220;
// Make 'OscMAx2' item data
System.Collections.Generic.IList<double> OscMAx2 = context.GetData("OscMAx2", new string[] {
this.OscMAx2_h.FastPeriod.ToString(),
this.OscMAx2_h.SlowPeriod.ToString(),
"Источник1"
}, delegate {
return this.OscMAx2_h.Execute(Источник1);
});
// Make 'ЛогичесФормула' item data
System.Collections.Generic.IList<bool> ЛогичесФормула;
try
{
int count = OscMAx2.Count;
bool[] list = new bool[count];
if ((context.IsLastBarUsed == false))
{
count--;
}
for (int i = 0; (i < count); i++)
{
list[i] = OscMAx2[i]>0.0;
}
if ((count>0
&& (context.IsLastBarUsed == false)))
{
list[count] = list[count-1];
}
ЛогичесФормула = list;
}
catch (System.ArgumentOutOfRangeException )
{
throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'ЛогичесФормула\'. Индекс за пределами диапазона.");
}
// Make 'ЛогичесФормула1' item data
System.Collections.Generic.IList<bool> ЛогичесФормула1;
try
{
int count = OscMAx2.Count;
bool[] list = new bool[count];
if ((context.IsLastBarUsed == false))
{
count--;
}
for (int i = 0; (i < count); i++)
{
list[i] = OscMAx2[i]<0.0;
}
if ((count>0
&& (context.IsLastBarUsed == false)))
{
list[count] = list[count-1];
}
ЛогичесФормула1 = list;
}
catch (System.ArgumentOutOfRangeException )
{
throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'ЛогичесФормула1\'. Индекс за пределами диапазона.");
}
// =================================================
// Handlers
// =================================================
TSLab.Script.IPosition ОткрПозиПоРынк;
TSLab.Script.IPosition ОткрПозиПоРынк1;
// =================================================
// Trading
// =================================================
int barsCount = Источник1.Bars.Count;
if ((context.IsLastBarUsed == false))
{
barsCount--;
}
for (int i = 0; (i < barsCount); i++)
{
ОткрПозиПоРынк = Источник1.Positions.GetLastActiveForSignal("ОткрПозиПоРынк", i);
ОткрПозиПоРынк1 = Источник1.Positions.GetLastActiveForSignal("ОткрПозиПоРынк1", i);
if ((ОткрПозиПоРынк == null))
{
if (ЛогичесФормула[i])
{
if ((context.TradeFromBar <= i))
{
Источник1.Positions.OpenAtMarket(((bool)(this.ОткрПозиПоРынк_Long.Value)), i+1, 1D, "ОткрПозиПоРынк");
}
}
}
else
{
if ((ОткрПозиПоРынк.EntryBarNum <= i))
{
if (ЛогичесФормула1[i])
{
ОткрПозиПоРынк.CloseAtMarket(i+1, "ЗакрПозиПоРынк");
}
}
}
if ((ОткрПозиПоРынк1 == null))
{
if (ЛогичесФормула1[i])
{
if ((context.TradeFromBar <= i))
{
Источник1.Positions.OpenAtMarket(false, i+1, 1D, "ОткрПозиПоРынк1");
}
}
}
else
{
if ((ОткрПозиПоРынк1.EntryBarNum <= i))
{
if (ЛогичесФормула[i])
{
ОткрПозиПоРынк1.CloseAtMarket(i+1, "ЗакрПозиПоРынк1");
}
}
}
}
if (context.IsOptimization)
{
return;
}
// =================================================
// Charts
// =================================================
// Make 'Источник1' chart
TSLab.Script.IGraphList Главная_pane_Источник1_chart = Главная_pane.AddList("Главная_pane_Источник1_chart", ("Источник1"
+ (" ["
+ (Источник1.Symbol + "]"))), Источник1, TSLab.Script.CandleStyles.BAR_CANDLE, TSLab.Script.CandleFillStyle.Decreasing, true, -14685179, TSLab.Script.PaneSides.RIGHT);
Источник1.ConnectSecurityList(Главная_pane_Источник1_chart);
Главная_pane_Источник1_chart.AlternativeColor = -262137;
Главная_pane_Источник1_chart.Autoscaling = true;
Главная_pane.UpdatePrecision(TSLab.Script.PaneSides.RIGHT, Источник1.Decimals);
// Make 'OscMAx2' chart
TSLab.Script.IGraphList ПанельГрафика_pane_OscMAx2_chart = ПанельГрафика_pane.AddList("ПанельГрафика_pane_OscMAx2_chart", (((("OscMAx2"
+ (" (" + this.OscMAx2_h.FastPeriod))
+ (", " + this.OscMAx2_h.SlowPeriod))
+ ")")
+ (" ["
+ (Источник1.Symbol + "]"))), OscMAx2, TSLab.Script.ListStyles.LINE, -8639016, TSLab.Script.LineStyles.SOLID, TSLab.Script.PaneSides.RIGHT);
ПанельГрафика_pane_OscMAx2_chart.AlternativeColor = -9409223;
ПанельГрафика_pane_OscMAx2_chart.Autoscaling = true;
ПанельГрафика_pane.UpdatePrecision(TSLab.Script.PaneSides.RIGHT, Источник1.Decimals);
}
public void Dispose()
{
}
}
}