Example #1
0
 /// <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);
    }
Example #3
0
 // Метод для поиска выходов из сделки
 // В качестве параметров принимает время начала бара и структуру бара
 // Выходной параметр - флаг закрытия сделки на текущем баре
 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;
         }
     }
 }
Example #4
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;     // Обнуляем счетчик лонг
     }
 }