/// <summary> /// 再描画 /// </summary> private void Redraw() { // 3つのバーを再描画 HBar.Invalidate(); SBar.Invalidate(); BBar.Invalidate(); }
public static int Main() { var c = new C(); var ci = new C <int>(); var cs = new C <string>(); var s = new S(); var sb = new SBar(); IsTrue(A1 <IFoo <string> >()); IsFalse(A1 <IFoo <int> >()); IsFalse(A1 <IBar>()); IsFalse(A1 <S>()); IsFalse(A1 <SBar>()); IsTrue(I1(cs)); IsFalse(I1(ci)); IsFalse(I1(c)); IsFalse(I1(s)); IsFalse(I1(sb)); IsTrue(C1(cs)); IsFalse(C1(ci)); IsFalse(C1(c)); IsFalse(C1(s)); IsFalse(C1(sb)); IsFalse(A2 <IFoo <string> >()); IsFalse(A2 <IFoo <int> >()); IsTrue(A2 <IBar>()); IsFalse(A2 <S>()); IsTrue(A2 <SBar>()); IsFalse(I2(cs)); IsFalse(I2(ci)); IsTrue(I2(c)); IsFalse(I2(s)); IsTrue(I2(sb)); IsFalse(C2(cs)); IsFalse(C2(ci)); IsTrue(C2(c)); IsFalse(C2(s)); IsTrue(C2(sb)); if (_errors == 0) { Console.WriteLine("Passed"); } return(_errors > 0 ? -1 : 100); }
// Метод для поиска выходов из сделки // В качестве параметров принимает время начала бара и структуру бара // Выходной параметр - флаг закрытия сделки на текущем баре public void NewBar(DateTime DTbar, SBar Bar, out Boolean EndTrade) { UndefinedResult = false; EndTrade = false; NBar++; if (LongTrade) { UndefinedResult = ((Bar.high >= TP) && (Bar.low <= SL)); // Если на текущем таймфрейме бар одновременно пересекает стоп-лосс и тейк-профит } // результат сделки неопределен, выставляем флаг else { UndefinedResult = ((Bar.high <= TP) && (Bar.low >= SL)); // } if (LongTrade) // Если сделка открыта в лонг { if (Bar.low <= SL) { EndTrade = true; // Выставляем флаг закрытия сделки PriceStop = SL; // Указываем цену закрытия SLEndTrade = true; NBar = 0; } if (Bar.high >= TP) { EndTrade = true; // Выставляем флаг закрытия сделки PriceStop = TP; // Указываем цену закрытия SLEndTrade = false; NBar = 0; } } else // Иначе, если сделка открыта в шорт { if (Bar.high >= SL) { EndTrade = true; // Выставляем флаг закрытия сделки PriceStop = SL; // Указываем цену закрытия SLEndTrade = true; NBar = 0; } if (Bar.low <= TP) { EndTrade = true; // Выставляем флаг закрытия сделки PriceStop = TP; // Указываем цену закрытия SLEndTrade = false; NBar = 0; } } }
// Метод для поиска входов в сделку // В качестве параметров принимает время начала бара и структуру бара public void NewBar(DateTime DTbar, SBar Bar, out Boolean NewTrade) { NewTrade = false; if (Bar.open < Bar.close) // Если бар в лонг { NBarLong++; // Добавляем счетчик лонг if (NBarShort >= NB && NBarLong == 1) // Если была серия баров в шорт и один бар в лонг { TP = SRLow + (Math.Round(((SRHigh - SRLow) * Recoil) / PriceStep) * PriceStep); // Вычисляем тейк-профит с приведением к шагу цены if (TP > Bar.close) { NewTrade = true; // Даем сигнал на сделку в лонг LongTrade = true; SL = Bar.low - 10; } } if (NBarLong == 1) { SRLow = Bar.open; } SRHigh = Bar.close; NBarShort = 0; // Обнуляем счетчик шорт } if (Bar.open > Bar.close) // Если бар в шорт { NBarShort++; // Добавим счетчик баров шорт if (NBarLong >= NB && NBarShort == 1) // Если была серия баров в лонг { TP = SRHigh - (Math.Round(((SRHigh - SRLow) * Recoil) / PriceStep) * PriceStep); // Вычисляем тейк-профит с приведением к шагу цены if (TP < Bar.close) { NewTrade = true; // Даем сигнал на сделку в шорт LongTrade = false; SL = Bar.high + 10; } } if (NBarShort == 1) { SRHigh = Bar.open; } SRLow = Bar.close; NBarLong = 0; // Обнуляем счетчик лонг } }