//------------------------------------------------------------------------------ // // Этот код создан программой. // Исполняемая версия:4.0.30319.35312 // // Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае // повторной генерации кода. // //------------------------------------------------------------------------------ namespace TSLab.User { using System; using TSLab.Script; public sealed class Script { private TSLab.Script.Handlers.RelativeCommission Comission1_h = new TSLab.Script.Handlers.RelativeCommission(); private vvTSLtools.HeikenAshiMA Closses_h = new vvTSLtools.HeikenAshiMA(); private vvTSLtools.HeikenAshiMA Lows_h = new vvTSLtools.HeikenAshiMA(); private vvTSLtools.HeikenAshi HeikenAshi1_h = new vvTSLtools.HeikenAshi(); public void Execute(TSLab.Script.Handlers.IContext context, TSLab.Script.ISecurity Source1) { // Initialize 'Closses' item this.Closses_h.Context = context; this.Closses_h.Closess = true; this.Closses_h.Highs = false; this.Closses_h.Lows = false; this.Closses_h.Opens = false; // Make 'Closses' item data System.Collections.Generic.IList Closses = context.GetData("Closses", new string[] { this.Closses_h.Closess.ToString(), this.Closses_h.Highs.ToString(), this.Closses_h.Lows.ToString(), this.Closses_h.Opens.ToString(), "Source1" }, delegate { try { return this.Closses_h.Execute(Source1); } catch (System.ArgumentOutOfRangeException ) { throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'Closses\'. Индекс за пределам диапазона."); } }); // Initialize 'Lows' item this.Lows_h.Context = context; this.Lows_h.Closess = false; this.Lows_h.Highs = false; this.Lows_h.Lows = true; this.Lows_h.Opens = false; // Make 'Lows' item data System.Collections.Generic.IList Lows = context.GetData("Lows", new string[] { this.Lows_h.Closess.ToString(), this.Lows_h.Highs.ToString(), this.Lows_h.Lows.ToString(), this.Lows_h.Opens.ToString(), "Source1" }, delegate { try { return this.Lows_h.Execute(Source1); } catch (System.ArgumentOutOfRangeException ) { throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'Lows\'. Индекс за пределам диапазона."); } }); // Make 'ЛогичесФормула2' item data System.Collections.Generic.IList ЛогичесФормула2; try { int count = System.Math.Min(Lows.Count, Closses.Count); bool[] list = new bool[count]; if ((context.IsLastBarUsed == false)) { count--; } for (int i = 1; (i < count); i++) { list[i] = Closses[i]0 && (context.IsLastBarUsed == false))) { list[count] = list[count-1]; } ЛогичесФормула2 = list; } catch (System.ArgumentOutOfRangeException ) { throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'ЛогичесФормула2\'. Индекс за пределам диапазона."); } // Make 'ЛогичесФормула1' item data System.Collections.Generic.IList ЛогичесФормула1; try { int count = System.Math.Min(Lows.Count, Closses.Count); bool[] list = new bool[count]; if ((context.IsLastBarUsed == false)) { count--; } for (int i = 1; (i < count); i++) { list[i] = Closses[i]>Lows[i-1]; } if ((count>0 && (context.IsLastBarUsed == false))) { list[count] = list[count-1]; } ЛогичесФормула1 = list; } catch (System.ArgumentOutOfRangeException ) { throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'ЛогичесФормула1\'. Индекс за пределам диапазона."); } // Initialize 'HeikenAshi1' item this.HeikenAshi1_h.Context = context; // Make 'HeikenAshi1' item data TSLab.Script.ISecurity HeikenAshi1; try { HeikenAshi1 = this.HeikenAshi1_h.Execute(Source1); } catch (System.ArgumentOutOfRangeException ) { throw new TSLab.Script.ScriptException("Ошибка при вычислении блока \'HeikenAshi1\'. Индекс за пределам диапазона."); } // ================================================= // Panels // ================================================= // Make 'Main' pane TSLab.Script.IPane Main_pane = context.CreatePane("Main", 70D, false); Main_pane.Visible = true; // ================================================= // Handlers // ================================================= // Initialize 'Comission1' item this.Comission1_h.CommissionPct = 0.05D; this.Comission1_h.MarginPct = 10D; this.Comission1_h.Execute(Source1); TSLab.Script.IPosition SHORT; TSLab.Script.IPosition LONG; // ================================================= // Trading // ================================================= int barsCount = Source1.Bars.Count; if ((context.IsLastBarUsed == false)) { barsCount--; } for (int i = 0; (i < barsCount); i++) { SHORT = Source1.Positions.GetLastActiveForSignal("SHORT", i); LONG = Source1.Positions.GetLastActiveForSignal("LONG", i); if ((SHORT == null)) { if (ЛогичесФормула2[i]) { if ((context.TradeFromBar <= i)) { Source1.Positions.SellAtMarket(i+1, 2D, "SHORT"); } } } else { if ((SHORT.EntryBarNum <= i)) { if (ЛогичесФормула1[i]) { SHORT.CloseAtMarket(i+1, "ЗакрПозиПоРынк2"); } } } if ((LONG == null)) { if (ЛогичесФормула1[i]) { if ((context.TradeFromBar <= i)) { Source1.Positions.BuyAtMarket(i+1, 2D, "LONG"); } } } else { if ((LONG.EntryBarNum <= i)) { if (ЛогичесФормула2[i]) { LONG.CloseAtMarket(i+1, "ЗакрПозиПоРынк1"); } } } } // ================================================= // Charts // ================================================= // Make 'HeikenAshi1' chart TSLab.Script.IGraphList Main_pane_HeikenAshi1_chart = Main_pane.AddList(("HeikenAshi1" + (" [" + (HeikenAshi1.Symbol + "]"))), HeikenAshi1, TSLab.Script.CandleStyles.BAR_CANDLE, true, true, true, true, 138, TSLab.Script.PaneSides.RIGHT); HeikenAshi1.ConnectSecurityList(Main_pane_HeikenAshi1_chart); Main_pane.UpdatePrecision(TSLab.Script.PaneSides.RIGHT, HeikenAshi1.Decimals); // Make 'Lows' chart TSLab.Script.IGraphList Main_pane_Lows_chart = Main_pane.AddList(((("Lows" + (" (" + this.Lows_h.Closess)) + ")") + (" [" + (Source1.Symbol + "]"))), Lows, TSLab.Script.ListStyles.LINE, 9633792, TSLab.Script.LineStyles.SOLID, TSLab.Script.PaneSides.RIGHT); Main_pane.UpdatePrecision(TSLab.Script.PaneSides.RIGHT, Source1.Decimals); // Make 'Closses' chart TSLab.Script.IGraphList Main_pane_Closses_chart = Main_pane.AddList(((("Closses" + (" (" + this.Closses_h.Closess)) + ")") + (" [" + (Source1.Symbol + "]"))), Closses, TSLab.Script.ListStyles.LINE, 0, TSLab.Script.LineStyles.SOLID, TSLab.Script.PaneSides.RIGHT); Main_pane.UpdatePrecision(TSLab.Script.PaneSides.RIGHT, Source1.Decimals); } } }