Пример #1
0
        protected void SearchForRemoveSellPending()
        {
            foreach (Guid pos in listOfSellStop)
            {
                IPosition position = Trade.GetPosition(pos);

                TradeResult tR       = null;
                int         attempts = 0;

                if (position != null)
                {
                    if ((int)position.Type == (int)ExecutionRule.SellStop)
                    {
                        do
                        {
                            attempts++;
                            tR = Trade.CancelPendingPosition(position.Id);
                        }while((tR == null? true: !tR.IsSuccessful) && (attempts < 25));

                        if (tR == null? true: !tR.IsSuccessful)
                        {
                            XXPrint("Can't remove SellStop {0} after {1} attempts...",
                                    pos, attempts);
                        }
                        else
                        {
                            listOfSellStop.Remove(pos);
                            XXPrint("{0} SellStop removed...",
                                    pos);
                        }
                    }
                    else
                    {
                        listOfSellStop.Remove(pos);
                        XXPrint("{0} SellStop opened...",
                                pos);
                    }
                }
                else
                {
                    XXPrint("SellStop position {0} from list not defined... ",
                            pos);
                }
            }
        }
Пример #2
0
        protected override void NewBar()
        {
            if (Bars[Bars.Range.To - 1].Time.Hour.ToString() == "6")
            {
                Time_Start = true; BarH = Bars[Bars.Range.To].Open;
                Print("Bars-{0} Open Time-{1}", Bars[Bars.Range.To].Time, BarH = Bars[Bars.Range.To].Open);
            }
            if (Bars[Bars.Range.To - 1].Time.Hour.ToString() == "13")
            {
                Time_Start = false;
                Print("Bars-{0} Close Time-{1}", Bars[Bars.Range.To].Time, Bars[Bars.Range.To - 1].Time);
            }

            //if (D.ToString()=="06:00:00") { Time_Start=true; Blue(); }
            //if (DTime.TimeOfDay.ToString()=="12:00:00") { Time_Start=false;  Blue(); }

            // Event occurs on every new bar
            if (Time_Start)
            {
                if (Bars[Bars.Range.To - 1].High <Bars[Bars.Range.To - 2].High && Bars[Bars.Range.To - 1].Low> Bars[Bars.Range.To - 2].Low)
                {
                    cTP = Bars[Bars.Range.To - 1].High - Bars[Bars.Range.To - 1].Low;
                    if (Bars[Bars.Range.To - 1].Close > BarH)
                    {
                        var result = Trade.BuyStop(Instrument.Id, 0.1, (Bars[Bars.Range.To - 1].High + 0.0002), Stops.InPrice(Bars[Bars.Range.To - 1].Low + 0.0002, Bars[Bars.Range.To - 1].High + cTP));
                        _positionGuidA = result.Position.Id;
                    }
                    if (Bars[Bars.Range.To - 1].Close < BarH)
                    {
                        var result2 = Trade.SellStop(Instrument.Id, 0.1, (Bars[Bars.Range.To - 1].Low - 0.0002), Stops.InPrice(Bars[Bars.Range.To - 1].High + 0.0002, Bars[Bars.Range.To - 1].Low - cTP));
                        _positionGuidA = result2.Position.Id;
                    }
                }
            }
            if (!Time_Start)
            {
                Trade.CancelPendingPosition(_positionGuidA);
            }
        }
Пример #3
0
//===============================================================================================================================
        protected override void NewBar()
        {
            //_wprInd.ReInit();

            /*Print("1-{0} 2-{1} 3-{2} ",
             *   _wprInd.MainIndicatorSeries[Bars.Range.To-1],
             *   _wprInd.MainIndicatorSeries[Bars.Range.To-2],
             * _wprInd.MainIndicatorSeries[Bars.Range.To-3]); */
//=== КОРЕКЦИЯ ===========================================================================================================
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty;
            }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty;
            }
//======================================================================================================================================
            if (_wprInd.MainIndicatorSeries[Bars.Range.To - 2] > 0)
            {
                zz3  = zz2;       zz2 = zz1;   zz1 = _wprInd.MainIndicatorSeries[Bars.Range.To - 2];
                zzi3 = zzi2;      zzi2 = zzi1;  zzi1 = Bars.Range.To - 2;
                Print("ZZ {0} 1={1} 2={2} 3={3} ", Bars[zzi1].Time, zz1, zz2, zz3);
                if (zz3 < zz2 && zz2 > zz1)
                {                 // ВВЕРХУ
                    zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    zzu4 = zzu3; zzu3 = zzu2; zzu2 = zzu1; zzu1 = zz2;
                    Print("ВВЕРХ {0} 1={1} 2={2} 3={3} 4={4}", Bars[zzd1].Time, zzu1, zzu2, zzu3, zzu4);
                    if (zzu1 > zzu2 && zzu3 > zzu2 && zzu1 > zzu3 && zzu2 > zzu4 && zzu3 > zzu4)          // ВВЕРХУ
                    {
                        var vr = Tools.Create <VerticalLine>(); vr.Color = Color.Red; vr.Time = Bars[zzd1].Time;

                        if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                        {
                            nd++; if (nd > 2)
                            {
                                var result2 = Trade.UpdateMarketPosition(posGuidSell, zzu1, null, null);
                                if (result2.IsSuccessful)
                                {
                                    posGuidSell = Guid.Empty;
                                }
                            }
                        }

                        if (posGuidSell == Guid.Empty)
                        {
                            nd = 0;
                            var result1 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellLimit, 0.1, zzu1 + Instrument.Spread - 0.0002, 0, Stops.InPips(200, 100), null, null, null);
                            if (result1.IsSuccessful)
                            {
                                posGuidSell = result1.Position.Id; zzts2 = zzu2;
                            }
                        }
                    }
                }

                if (zz3 > zz2 && zz2 < zz1)
                {                 // ВНИЗУ
                    zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    zzu4 = zzu3; zzu3 = zzu2; zzu2 = zzu1; zzu1 = zz2;
                    Print("НИЗ {0} 1={1} 2={2} 3={3} 4={4}", Bars[zzd1].Time, zzu1, zzu2, zzu3, zzu4);
                    if (zzu4 > zzu2 && zzu3 > zzu1 && zzu2 > zzu3 && zzu4 > zzu3)            //  ВНИЗУ
                    {
                        var vr = Tools.Create <VerticalLine>(); vr.Color = Color.Blue; vr.Time = Bars[zzd1].Time;
                        if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                        {
                            nu++; if (nu > 2)
                            {
                                var result2 = Trade.UpdateMarketPosition(posGuidBuy, zzu1, null, null);
                                if (result2.IsSuccessful)
                                {
                                    posGuidBuy = Guid.Empty;
                                }
                            }
                        }
                        if (posGuidBuy == Guid.Empty)
                        {
                            nu = 0;
                            var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.BuyLimit, 0.1, zzu1 - Instrument.Spread + 0.0002, 0, Stops.InPips(200, 100), null, null, null);
                            if (result.IsSuccessful)
                            {
                                posGuidBuy = result.Position.Id; zztb2 = zzu2;
                            }
                        }
                    }
                }

                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending && Bars[Bars.Range.To - 1].Low < zzts2)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell);
                    if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending && Bars[Bars.Range.To - 1].High > zztb2)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy);
                    if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }
        }
Пример #4
0
//===============================================================================================================================
        protected override void NewBar()
        {
            _wprInd.ReInit();
            _ftoInd.ReInit();
            ci = Bars.Range.To - 1;

//=== КОРЕКЦИЯ ===========================================================================================================
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty;
            }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty;
            }
//=== Закрытие всех ордеров если пятница 16:00 (19:00 Kiev) ===========================================================================
            if (Bars[Bars.Range.To - 1].Time.DayOfWeek == DayOfWeek.Friday && Bars[Bars.Range.To - 1].Time.Hour == 16)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }

                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }

//==========  Значение счетчика прохода фишера через 0  FU - вверх  FD - вниз
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] < 0 && _ftoInd.FisherSeries[Bars.Range.To - 1] > 0)
            {
                isFU = true;
            }
            else
            {
                isFU = false;
            }
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] > 0 && _ftoInd.FisherSeries[Bars.Range.To - 1] < 0)
            {
                isFD = true;
            }
            else
            {
                isFD = false;
            }

/*
 * //========  isFM2U isFM2D - красная линия пересекла линию фишера
 *                      // Sell stop <0
 *                      if ( _ftoInd.FisherSeries[Bars.Range.To-2]<_ftoInd.Ma2Series[Bars.Range.To-2] &&
 *                               _ftoInd.FisherSeries[Bars.Range.To-1]>_ftoInd.Ma2Series[Bars.Range.To-1]) isFU=true; else isFU=false;
 *                      //  Buy stop >0
 *                      if ( _ftoInd.FisherSeries[Bars.Range.To-2]>_ftoInd.Ma2Series[Bars.Range.To-2] &&
 *                               _ftoInd.FisherSeries[Bars.Range.To-1]<_ftoInd.Ma2Series[Bars.Range.To-1]) isFD=true; else isFD=false;
 */
//========== Если фишер пересек линию - закрыть все ордера  =================================================================================
            if (isFD)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res1 = Trade.CloseMarketPosition(posGuidBuy); if (res1.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res2 = Trade.CancelPendingPosition(posGuidBuy); if (res2.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }
            if (isFU)
            {
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res3 = Trade.CloseMarketPosition(posGuidSell); if (res3.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res4 = Trade.CancelPendingPosition(posGuidSell); if (res4.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }
//========== Если появился пик зигзага  ================================================================================================
            if (_wprInd.MainIndicatorSeries[Bars.Range.To - 1] > 0)
            {                // Значения 3 значений - для определения направления
                zz3  = zz2;       zz2 = zz1;   zz1 = _wprInd.MainIndicatorSeries[Bars.Range.To - 1];
                zzi3 = zzi2;      zzi2 = zzi1;  zzi1 = Bars.Range.To - 1;
                //======================= ПИК - ВЕШИНА ВВЕРХУ
                if (zz2 < zz3 && zz2 < zz1)
                {                   // Берем 4 вершины - zzd-индекс zzu-значение
                    //var vr=Tools.Create<VerticalLine>(); vr.Color=Color.Red; vr.Time=Bars[zzi2].Time;
                    zzd5 = zzd4; zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    zzu5 = zzu4; zzu4 = zzu3; zzu3 = zzu2; zzu2 = zzu1; zzu1 = zz2;
                    // Print("ВВЕРХ {0} 1={1} 2={2} 3={3} 4={4}",Bars[zzd1].Time,zzu1,zzu2,zzu3,zzu4);
                    //===== ВВЕРХ 2 импульса - на втором ^^ отложка лимит
                    //if(zzu1>zzu2 && zzu3>zzu2 && zzu1>zzu3 && zzu2>zzu4 && zzu3>zzu4)
                    if (zzu1 > zzu3 && zzu2 > zzu4 && zzu3 > zzu5)
                    {
                        var vr = Tools.Create <VerticalLine>(); vr.Color = Color.Red; vr.Time = Bars[zzd2].Time;
                        if (posGuidSell == Guid.Empty)
                        {
                            sl1 = (int)(Math.Round(Math.Abs(zzu3 - zzu2), 5) * 100000) - (int)(Math.Round(Math.Abs(zzu1 - Bars[ci].Close), 5) * 100000);
                            //sl1=(int)(Math.Round(Math.Abs(zzu1-Bars[ci].Close),5)*100000);

                            var result1 = Trade.OpenPendingPosition(Instrument.Id,
                                                                    ExecutionRule.SellLimit, 0.1,
                                                                    zzu2 - Instrument.Spread - 0.0002, 0,
                                                                    Stops.InPips(sl1, 50), null, null, null);
                            // var result1 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellLimit, 0.1,  zzu1+Instrument.Spread-0.0002, 0, Stops.InPips(200,null), null, null, null);
                            if (result1.IsSuccessful)
                            {
                                posGuidSell = result1.Position.Id; zzts2 = zzu3;
                            }
                        }
                    }
                }

                //======================  ПИК - ВЕРШИНА ВВЕРХУ
                if (zz2 > zz3 && zz2 > zz1)
                {                 // Берем 4 вершины - zzd-индекс zzu-значение
                    //var vr=Tools.Create<VerticalLine>(); vr.Color=Color.Blue; vr.Time=Bars[zzi2].Time;
                    zzd5 = zzd4; zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    zzu5 = zzu4; zzu4 = zzu3; zzu3 = zzu2; zzu2 = zzu1; zzu1 = zz2;

                    // Print("НИЗ {0} 1={1} 2={2} 3={3} 4={4}",Bars[zzd1].Time,zzu1,zzu2,zzu3,zzu4);
                    //===== ВНИЗ 2 импульса - на втором ^^ отложка лимит
                    // if(zzu4>zzu2 && zzu3>zzu1 && zzu2>zzu3 && zzu4>zzu3)
                    if (zzu4 > zzu2 && zzu5 > zzu3 && zzu3 > zzu1)
                    {
                        var vr = Tools.Create <VerticalLine>(); vr.Color = Color.Blue; vr.Time = Bars[zzd2].Time;
                        if (posGuidBuy == Guid.Empty)
                        {
                            sl1 = (int)(Math.Round(Math.Abs(zzu3 - zzu2), 5) * 100000);
                            sl1 = (int)(Math.Round(Math.Abs(zzu3 - zzu2), 5) * 100000) - (int)(Math.Round(Math.Abs(zzu1 - Bars[ci].Close), 5) * 100000);
                            var result = Trade.OpenPendingPosition(Instrument.Id,
                                                                   ExecutionRule.BuyLimit, 0.1,
                                                                   zzu2 + Instrument.Spread + 0.0002, 0,
                                                                   Stops.InPips(sl1, 100), null, null, null);

                            if (result.IsSuccessful)
                            {
                                posGuidBuy = result.Position.Id; zztb2 = zzu3;
                            }
                        }
                    }
                }

//=========  Если стоит лимитка Sell/Buy и цена пересекла низ/верх 2 пика - закрыть лимитку
                if (posGuidSell != Guid.Empty &&
                    Trade.GetPosition(posGuidSell).State == PositionState.Pending &&
                    Bars[Bars.Range.To - 1].Low < zzts2)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell);
                    if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
                if (posGuidBuy != Guid.Empty &&
                    Trade.GetPosition(posGuidBuy).State == PositionState.Pending &&
                    Bars[Bars.Range.To - 1].High > zztb2)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy);
                    if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }
        }
Пример #5
0
//===============================================================================================================================
        protected override void NewBar()
        {
            _ichInd.ReInit();
            tank1 = _ichInd.TankanSenSeries[Bars.Range.To - 1];
            senA1 = _ichInd.SenkouSpanASeries[Bars.Range.To - 1];
            senB1 = _ichInd.SenkouSpanBSeries[Bars.Range.To - 1];
            kij1  = _ichInd.KijunSenSeries[Bars.Range.To - 1];

            tank2 = _ichInd.TankanSenSeries[Bars.Range.To - 2];
            kij2  = _ichInd.KijunSenSeries[Bars.Range.To - 2];
//=== КОРЕКЦИЯ ===========================================================================================================
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty;
            }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty;
            }

//=== Закрытие всех ордеров если пятница 16:00 (19:00 Kiev) ===========================================================================
            if (Bars[Bars.Range.To - 1].Time.DayOfWeek == DayOfWeek.Friday && Bars[Bars.Range.To - 1].Time.Hour == 16)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }

                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }
//======================================================================================================================================

/*		    //Значение счетчика прохода фишера через 0  FU - вверх  FD - вниз
 *                  if ( _ftoInd.FisherSeries[Bars.Range.To-2]<0  &&  _ftoInd.FisherSeries[Bars.Range.To-1]>0) {FU=Bars.Range.To; isFU=true;} else isFU=false;
 *                      if ( _ftoInd.FisherSeries[Bars.Range.To-2]>0  &&  _ftoInd.FisherSeries[Bars.Range.To-1]<0) {FD=Bars.Range.To; isFD=true;} else isFD=false;
 *                      // isFMU isFMD - синяя линия пересекла линию фишера
 *                      if ( _ftoInd.FisherSeries[Bars.Range.To-2]<_ftoInd.Ma1Series[Bars.Range.To-2] &&  _ftoInd.FisherSeries[Bars.Range.To-1]>_ftoInd.Ma1Series[Bars.Range.To-1]) isFMU=true; else isFMU=false;
 *                      if ( _ftoInd.FisherSeries[Bars.Range.To-2]>_ftoInd.Ma1Series[Bars.Range.To-2] &&  _ftoInd.FisherSeries[Bars.Range.To-1]<_ftoInd.Ma1Series[Bars.Range.To-1]) isFMD=true; else isFMD=false;
 */         // isFM2U isFM2D - красная линия пересекла линию фишера
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] < _ftoInd.Ma2Series[Bars.Range.To - 2] && _ftoInd.FisherSeries[Bars.Range.To - 1] > _ftoInd.Ma2Series[Bars.Range.To - 1])
            {
                isFM2U = true;
            }
            else
            {
                isFM2U = false;
            }
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] > _ftoInd.Ma2Series[Bars.Range.To - 2] && _ftoInd.FisherSeries[Bars.Range.To - 1] < _ftoInd.Ma2Series[Bars.Range.To - 1])
            {
                isFM2D = true;
            }
            else
            {
                isFM2D = false;
            }

            // Золотое или Мертвое пересечение - красная пересекает синюю
            if (tank1 > kij1 && kij2 >= tank2)
            {
                isFU = true;
            }
            else
            {
                isFU = false;
            }
            if (tank1 < kij1 && kij2 <= tank2)
            {
                isFD = true;
            }
            else
            {
                isFD = false;
            }
            // Цена ВЫШЕ/НИЖЕ Senkou Span B
            if (Bars[Bars.Range.To - 1].Close > senB1)
            {
                isFMU = true;
            }
            else
            {
                isFMU = false;
            }
            if (Bars[Bars.Range.To - 1].Close < senB1)
            {
                isFMD = true;
            }
            else
            {
                isFMD = false;
            }



            // Если красная пересекла линию - закрыть все активные ордера

            /*
             * if(isFMU) {if (posGuidSell!=Guid.Empty && Trade.GetPosition(posGuidSell).State==PositionState.Active)
             * {var res3 = Trade.CloseMarketPosition(posGuidSell); if (res3.IsSuccessful) posGuidSell = Guid.Empty;}	}
             * if(isFMD) {if (posGuidBuy!=Guid.Empty && Trade.GetPosition(posGuidBuy).State==PositionState.Active)
             * {var res1 = Trade.CloseMarketPosition(posGuidBuy); if (res1.IsSuccessful) posGuidBuy = Guid.Empty;}		}
             */
            // Если фишер пересек 0 линию - закрыть все ордера
            if (isFM2U)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res1 = Trade.CloseMarketPosition(posGuidBuy); if (res1.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }
            if (isFM2D)
            {
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res3 = Trade.CloseMarketPosition(posGuidSell); if (res3.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }

//======================================================================================================================================
            //Print("{0} - {1} - {2}>{3} - {4}",Bars[Bars.Range.To-1].Time,_barM15[_barM15.Range.To-1].Time,Fs,Fs1,F15U);


            Print("{0} - {1} {2} {3} - {4} {5} {6}", Bars[Bars.Range.To - 1].Time, isFU, isFMU, FDU, isFD, isFMD, FDD);
            if (isFU && isFMU && F1U)
            {
                var vline = Tools.Create <VerticalLine>();
                vline.Color = Color.Red;
                vline.Time  = Bars[Bars.Range.To - 1].Time;
                vline.Width = 4;
                if (posGuidSell == Guid.Empty)
                {
                    var result2 = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 2.0, Instrument.Bid, -1, Stops.InPips(200, null), null, null);
                    if (result2.IsSuccessful)
                    {
                        posGuidSell = result2.Position.Id;
                    }
                }
            }


            if (isFD && isFMD && F1D)
            {
                var vline = Tools.Create <VerticalLine>();
                vline.Color = Color.Blue;
                vline.Time  = Bars[Bars.Range.To - 1].Time;
                vline.Width = 4;
                if (posGuidBuy == Guid.Empty)
                {
                    var result3 = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 2.0, Instrument.Bid, -1, Stops.InPips(200, null), null, null);
                    if (result3.IsSuccessful)
                    {
                        posGuidBuy = result3.Position.Id;
                    }
                }
            }


//===============================================================================================================================
        }
Пример #6
0
        protected override void NewBar()
        {
// =================================================================================================================================
            // Значения текущего Бара
            BarH  = Bars[Bars.Range.To - 1].High;
            BarL  = Bars[Bars.Range.To - 1].Low;
            BarC  = Bars[Bars.Range.To - 1].Close;
            DTime = Bars[Bars.Range.To - 1].Time;

            //  frUp frDown - Истина если появился НОВЫЙ фрактал Вверх/Вниз
            if (_frInd.TopSeries[Bars.Range.To - 5] > 0)
            {
                frUp = true;
            }
            else
            {
                frUp = false;
            }
            if (_frInd.BottomSeries[Bars.Range.To - 5] > 0)
            {
                frDown = true;
            }
            else
            {
                frDown = false;
            }

            // Значения Alligator около фрактала
            aGuba5    = _allInd.LipsSeries[Bars.Range.To - 5];
            aZub5     = _allInd.TeethSeries[Bars.Range.To - 5];
            aChelust5 = _allInd.JawsSeries[Bars.Range.To - 5];

            // Значене Alligator у цены
            aGuba    = _allInd.LipsSeries[Bars.Range.To];   //З
            aZub     = _allInd.TeethSeries[Bars.Range.To];  //К
            aChelust = _allInd.JawsSeries[Bars.Range.To];   //С

// =================================================================================================================================
// 1. Линии Алигатора переплетены - Торгуем
            // Правильно ЗКС или СКЗ - если наоборот то  линии переплелись - Торг
            if (!((aGuba > aZub && aZub > aChelust) || (aChelust > aZub && aZub > aGuba)))
            {
                Torg = true;  Print("Torg - Линии Алигатора переплелись! ", DTime);
            }
// =================================================================================================================================
            //if(posGuidBuy!=Guid.Empty) Print("State={0} -- {1}",Trade.GetPosition(posGuidBuy).State,Bars[Bars.Range.To-1].Time); else Print("State=Empty! -- {0}",Bars[Bars.Range.To-1].Time);
            //if(posGuidSell!=Guid.Empty) Print("State={0} -- {1}",Trade.GetPosition(posGuidSell).State,Bars[Bars.Range.To-1].Time); else Print("State=Empty! -- {0}",Bars[Bars.Range.To-1].Time);

            // Срабатывает - когда появился новый фрактал - frUp frDown=true!
            // Запоминаем значения Свечи бара-фрактала(frUpH) и время (frUp_Time)
            if (frUp)
            {
                frUpH     = Bars[Bars.Range.To - 5].High;
                frUpL     = Bars[Bars.Range.To - 5].Low;
                frUpC     = Bars[Bars.Range.To - 5].Close;
                frUp_Time = Bars[Bars.Range.To - 5].Time;
            }
            if (frDown)
            {
                frDownL     = Bars[Bars.Range.To - 5].Low;
                frDownH     = Bars[Bars.Range.To - 5].High;
                frDownC     = Bars[Bars.Range.To - 5].Close;
                frDown_Time = Bars[Bars.Range.To - 5].Time;
            }


            // Появился новый фрактал и Свеча Fractalа ВЫШЕ Alligatora не касается Alligatorа
            // низ Бар-Фрактала выше Alligator  - Назначаем рабочим (fr_all_Up) для Buy
            // fr_all_Up_L - если есто рабочий фрактал Buy - true
            if (frUp && frUpL > aGuba5 && frUpL > aChelust5 && frUpL > aZub5)
            {
                fr_all_Up = frUpH; fr_all_Up_Time = frUp_Time;  fr_all_Up_L = true;  Print("Buy Фрактал выше Алигатора - {0} ", Bars[Bars.Range.To - 1].Time);
            }
            // Если появился новый фрактал  Buy и касается Алигатора - отменяем "рабочий Buy"
            if (frUp && !(frUpL > aGuba5 && frUpL > aChelust5 && frUpL > aZub5))
            {
                fr_all_Up_L = false; Print("Buy Фрактал касается Алигатора - {0} }", Bars[Bars.Range.To - 1].Time);
            }


            // Появился новый фрактал и Свеча Fractalа НИЖЕ  Alligatora не касается Alligatorа
            // низ Бар-Фрактала выше Alligator  - Назначаем рабочим (fr_all_Up) для Buy
            if (frDown && frDownH < aGuba5 && frDownH < aChelust5 && frDownH < aZub5)
            {
                fr_all_Down = frDownL;  fr_all_Down_Time = frDown_Time; fr_all_Down_L = true;
                Print("Sell Фрактал ниже Алигатора - {0} ", Bars[Bars.Range.To - 1].Time);
            }
            // Если появился новый фрактал  Sell  и касается Алигатора - отменяем "рабочий Sell"
            if (frDown && !(frDownH < aGuba5 && frDownH < aChelust5 && frDownH < aZub5))
            {
                fr_all_Down_L = false;
                Print("Sell Фрактал касается Алигатора - {0} ", Bars[Bars.Range.To - 1].Time);
            }

//===============================================================================================================================
            //if( Trade.GetPosition(posGuidBuy).State == PositionState.Closed ) posGuidBuy=Guid.Empty;

            // Появился новый фрактал и назначен рабочим но есть открытый ордер Buy
            // меняем цену открытия и ставим Stop - Низ/Верх противоположного фрактала
            if (frUp && fr_all_Up_L && posGuidBuy != Guid.Empty)
            {
                if (Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var result = Trade.UpdatePendingPosition(posGuidBuy, 0.1, fr_all_Up, frDownL - StopL, null);
                    if (result.IsSuccessful)
                    {
                        posGuidBuy = result.Position.Id;
                        Print("Buy UpdatePending - !появился новый фр-рабочий - переносим цену и StopLoss -  {0} ", DTime);
                    }
                }
            }

            // Если появиля новый фрактал и не подходит под рабочий и есть отрытый отложеный ордер - отменяем ордер Buy
            //Print("UP Buy ={0} - {1} - {2} = {3} ",frUp,fr_all_Up_L,posGuidBuy,Bars[Bars.Range.To-1].Time);
            if (frUp && !fr_all_Up_L && posGuidBuy != Guid.Empty)
            {
                if (Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy);
                    if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                    Print("Buy CancelPending - {0} ", DTime);
                }
            }

            // Алигатор переплетен и появился новый фрактал и назначен рабочим - ставим отложеный ордер на Buy
            //  и при этом нет открытых Buy ордеров  (posGuidBuy)
            if (Torg && frUp && fr_all_Up_L && posGuidBuy == Guid.Empty)
            {
                // Закрываем SellStop
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell);  Print("Sell Отменяем SellStop бо появился раб-фрактал на Buy - {0} ", DTime);
                    if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
                // открываем BuyStop
                var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.BuyStop, 0.1, fr_all_Up, 0, Stops.InPrice(frDownL - StopL), null, null, null);
                if (result.IsSuccessful)
                {
                    posGuidBuy = result.Position.Id;  Print("BuyStop - {0}", DTime);
                }
            }

//===============================================================================================================================

            //if( Trade.GetPosition(posGuidSell).State == PositionState.Closed ) posGuidSell=Guid.Empty;


            // Появился новый фрактал и назначен рабочим но есть открытый ордер Sell
            // переносим цену открытия и ставим Stop - Низ/Верх противоположного фрактала
            if (Torg && frDown && fr_all_Down_L && posGuidSell != Guid.Empty)
            {
                if (Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var result = Trade.UpdatePendingPosition(posGuidSell, 0.1, fr_all_Down, frUpH + StopL, null);
                    if (result.IsSuccessful)
                    {
                        posGuidSell = result.Position.Id;
                        Print("Sell UpdatePending - !появился новый фр-рабочий - переносим цену и StopLoss - {0}  ", DTime);
                    }
                }
            }
            // Если появился новый фрактал ВНИЗ и не подходит под рабочий и есть отрытый отложеный ордер - отменяем ордер Sell
            if (frDown && !fr_all_Down_L && posGuidSell != Guid.Empty)
            {
                if (Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell);
                    if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                    Print("Sell CancelPending - {0} ", DTime);
                }
            }

            // Алигатор переплетен и появился новый фрактал ВНИЗ и назначен рабочим и нет открытых Sell ордеров  (posGuidSell)-
            // ставим отложеный ордер SellStop и отменяем BuyStop - если открыт!
            if (Torg && frDown && fr_all_Down_L && posGuidSell == Guid.Empty)
            {                         // Закрываем BuyStop
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy);   Print("Bay Отменяем BayStop бо появился раб-фрактал на Sell - {0} ", DTime);
                    if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                // Открываем SellStop
                var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellStop, 0.1, fr_all_Down, 0, Stops.InPrice(frUpH + StopL), null, null, null);
                if (result.IsSuccessful)
                {
                    posGuidSell = result.Position.Id;
                    Print("SellStop - {0} ", DTime);
                }
            }


//===============================================================================================================================
            // Отменяем торг если вошли в позицию - Следующий вход - когда снова переплетется Алигатор
            if (Torg && posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
            {
                Torg = false;
            }
            if (Torg && posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
            {
                Torg = false;
            }

//===============================================================================================================================
            // Появился новый фрактал ВНИЗ и открыта позиция Buy - переосим стоп - Работает!
            if (frDown && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
            {
                Trade.UpdateMarketPosition(posGuidBuy, frDownL - StopL, null, "Added stoploss and takeprofit");
                Print("Buy - !UpdatePending StopLoss когда Появился новый фрактал Down - {0}-{1}", DTime, psU);
            }
            // Появился новый фрактал ВВЕРХ и открыта позиция Sell - переосим стоп
            if (frUp && Trade.GetPosition(posGuidSell).State == PositionState.Active)
            {
                Trade.UpdateMarketPosition(posGuidSell, frUpH + StopL, null, "Added stoploss and takeprofit");
                Print("Sell - UpdatePending StopLoss когда Появился новый фрактал Up - {0} - {1}", DTime, psL);
            }

//===============================================================================================================================

            //if  (Trade.GetPosition(posGuidBuy).State.ToString()=="Active" && Trade.GetPosition(posGuidBuy).Pips>300) { Trade.CloseMarketPosition(posGuidBuy);  pBuy=false; Torg=false;}
            //if  (Trade.GetPosition(posGuidSell).State.ToString()=="Active" && Trade.GetPosition(posGuidSell).Pips>300) { Trade.CloseMarketPosition(posGuidSell);  pSell=false; Torg=false;}
            if (posGuidSell != Guid.Empty)
            {
                var posS   = Trade.GetPosition(posGuidSell);
                var stateS = posS.State;
                if (stateS.ToString() == "Active")
                {
                    var pos  = Trade.GetPosition(posGuidSell);
                    var pips = pos.Pips;
                    //Print("Pips={0} ",pips,Bars[Bars.Range.To-1].Time);
                }
            }


            if (posGuidBuy != Guid.Empty)
            {
                var posB   = Trade.GetPosition(posGuidBuy);
                var stateB = posB.State;
                if (stateB.ToString() == "Active")
                {
                    var pos  = Trade.GetPosition(posGuidBuy);
                    var pips = pos.Pips;
                    //Print("Pips={0} ",pips,Bars[Bars.Range.To-1].Time);
                }
            }
            //if  (Trade.GetPosition(posGuidBuy).State.ToString()=="Active") Print("Pips={0}============================================================",Trade.GetPosition(posGuidSell).Pips);
// =================================================================================================================================
            // Fractal Close ВЫШЕ Alligatora
            // Закрытие Бар-Фрактала выше Alligator  - Назначаем рабочим (fr_all_Up) для Buy
//			  if ( frUpC>aZub5 && _frInd.TopSeries[Bars.Range.To-5]>0)
//			     { fr_all_Up=frUpH; fr_all_Up_Time=frUp_Time; fBuy=true; HLine(); }
            // Fractal НИЖЕ Alligatora И свеча не касается Alligator -
            // Закрытие Бар-Фрактала Ниже Alligator  - Назначаем рабочим (fr_all_Down) для Sell
//			if ( frDownC<aZub5 && _frInd.BottomSeries[Bars.Range.To-5]>0)
//			     { fr_all_Down=frDownL; fr_all_Down_Time=frDown_Time; fSell=true; LLine(); }
// =================================================================================================================================
            // Если есть фрактал, есть сигнал на продажу и разрешение на торг
            //НО! свеча нового фрактала пересекает линию Аллигатора - отменяем позицию.
            //	if ( _frInd.TopSeries[Bars.Range.To-5]>0)
            //		Print("Пересечение  Алигатора фракталом {0} {1}",( frUpL<aGuba5 || frUpL<aChelust5 || frUpL<aZub5 ),Bars[Bars.Range.To-5].Time);

//			if (Torg && fBuy && ( frUpL<aGuba5 || frUpL<aChelust5 || frUpL<aZub5 ) && _frInd.TopSeries[Bars.Range.To-5]>0)
//			      { fBuy=false; Print("Отмена - Buy {0} - на Баре {1}",fr_all_Up_Time,Bars[Bars.Range.To-1].Time); }
            // Если есть фрактал, есть сигнал на продажу и разрешение на торг
            //НО! свеча нового фрактала пересекает линию Аллигатора - отменяем позицию.
            //if (_frInd.TopSeries[Bars.Range.To-5]>0) Print("DOWN - {0} {1} {2} - {3}",(Torg,fSell frDownH>aGuba5 || frDownH>aChelust5 || frDownH>aZub5 ), Bars[Bars.Range.To-5].Time);
//            if (Torg && fSell && ( frDownH>aGuba5 || frDownH>aChelust5 || frDownH>aZub5 ) && _frInd.BottomSeries[Bars.Range.To-5]>0)
//			               fSell=false; // Print("Отмена -  Sell {0} - на Баре -{1}",fr_all_Down_Time,Bars[Bars.Range.To-1].Time); }


// =================================================================================================================================

            // Если есть сигнал на покупку(fBuy) и не открыт дугой ордер Buy
            // и текущий бар пересек HIGH РАБОЧЕГО Fractala  - Открываем ордер Buy
//				 if(Time_Start && Torg && fBuy && !pBuy && fr_all_Up<Bars[Bars.Range.To-1].High && _positionGuid==Guid.Empty)
//				           { Buy(); pBuy=true; fBuy=false; Torg=false;
//						   Print("fr_all_Up-{0}   Bars[Bars.Range.To-1].High-{1}",fr_all_Up,Bars[Bars.Range.To-1].High);
//						   }

            // Если есть сигнал на продажу(fBuy) и не открыт дугой ордер Sell
            // и текущий бар пересек LOW РАБОЧЕГО Fractala  - Открываем ордер Sell
//				  if(Time_Start && Torg && fSell && !pSell && fr_all_Down>Bars[Bars.Range.To-1].Low  && _positionGuid==Guid.Empty)
//				           { Sell(); pSell=true;  fSell=false; Torg=false;
//						    Print("fr_all_Down-{0}   Bars[Bars.Range.To-1].Low-{1}",fr_all_Down,Bars[Bars.Range.To-1].Low);
//						   }
// =================================================================================================================================
            // Закрываем ордер на покупку когда свеча каснется Зубов Alligator
            // if(pBuy && Bars[Bars.Range.To-1].Close<aGuba && posGuidBuy!=Guid.Empty) { Trade.CloseMarketPosition(posGuidBuy);  pBuy=false; Torg=false;}
            //	if(Trade.GetPosition(posGuidBuy).Pips>100 && posGuidBuy!=Guid.Empty) {
            //		var res = Trade.CloseMarketPosition(posGuidBuy);  Print("Buy - Закрываем позицию - {0} ",DTime);
            //                if (res.IsSuccessful) posGuidBuy=Guid.Empty; Torg=false;}
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty; Print("Buy - Закрыто по StopLoss (Корекция) - {0} ", DTime);
            }


            //if(pBuy && Bars[Bars.Range.To-1].Close<aChelust && _positionGuid!=Guid.Empty) { ClosePosition();  pBuy=false; Torg=false;}
            //			 if(pBuy && aoUp1>0 && aoDown>0 && _positionGuid!=Guid.Empty) { ClosePosition();  pBuy=false; Torg=false;}

            // Закрываем ордер на продажу когда свеча каснется Зубов
            // if(pSell && Bars[Bars.Range.To-1].Close>aGuba && posGuidSell!=Guid.Empty) { Trade.CloseMarketPosition(posGuidSell);  pSell=false; Torg=false;}
            //		if(Trade.GetPosition(posGuidSell).Pips>100 && posGuidSell!=Guid.Empty) {
            //			var res = Trade.CloseMarketPosition(posGuidSell);   Print("Sell - Закрываем позицию - {0} ",DTime);
            //                    if (res.IsSuccessful) posGuidSell=Guid.Empty;  Torg=false; }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty;  Print("Sell - Закрыто по StopLoss (Корекция) - {0} ", DTime);
            }
            //if(pSell && Bars[Bars.Range.To-1].Close>aChelust && _positionGuid!=Guid.Empty) { ClosePosition();  pSell=false; Torg=false;}
            //			if(pSell  && aoUp<0/ && aoDown1<0 && _positionGuid!=Guid.Empty) { ClosePosition();  pSell=false; Torg=false;}
        }
Пример #7
0
//===============================================================================================================================
        protected override void NewBar()
        {
            _wprInd.ReInit();
            sprd = Instrument.Spread;
            var spr = Math.Round(Instrument.Spread * 100000, 0) + 16;

            toolText.Point   = new ChartPoint(Bars[Bars.Range.To - 1].Time, Bars[Bars.Range.To - 1].High);
            toolText.Caption = string.Format("Spred={0}", spr);
//=== КОРЕКЦИЯ ===========================================================================================================
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty;
            }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty;
            }

//======================================================================================================================================
            if (_wprInd.MainIndicatorSeries[Bars.Range.To - 1] > 0)
            {
                if (zzd3 != 0 && zzd2 != 0 && zzd1 != 0)
                {
                    torg2 = true;
                }
                else
                {
                    torg2 = false;
                }
                zz3  = zz2;       zz2 = zz1;   zz1 = _wprInd.MainIndicatorSeries[Bars.Range.To - 1];
                zzi3 = zzi2;      zzi2 = zzi1;  zzi1 = Bars.Range.To - 1;

//====== ВВЕРХУ ПИК =====================================================================================================================
                if (zz3 < zz2 && zz2 > zz1)
                {                 // ВВЕРХУ
                    zzd5    = zzd4; zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    zzu5    = zzu4; zzu4 = zzu3; zzu3 = zzu2; zzu2 = zzu1; zzu1 = zz2;
                    vy.Time = Bars[Bars.Range.To - 1].Time;
                    // ВВЕРХУ
                    Print("ВВЕРХУ {0} - {1}<{2}={3} [{4}]", Bars[Bars.Range.To - 1].Time, zzu1, zzu3, zzu3 < zzu1, torg2);
                    if (zzu1 > zzu3 && zzu5 > zzu3 && zzu4 > zzu2 && torg2)
                    {
                        var toolPolyLine = Tools.Create <PolyLine>();
                        toolPolyLine.Color = Color.SpringGreen;
                        toolPolyLine.Width = 4;

                        toolPolyLine.AddPoint(new ChartPoint(Bars[zzd4].Time, Bars[zzd4].Low));
                        toolPolyLine.AddPoint(new ChartPoint(Bars[zzd3].Time, Bars[zzd3].High));
                        toolPolyLine.AddPoint(new ChartPoint(Bars[zzd2].Time, Bars[zzd2].Low));
                        toolPolyLine.AddPoint(new ChartPoint(Bars[zzd1].Time, Bars[zzd1].High));
                        toolPolyLine.AddPoint(new ChartPoint(Bars[Bars.Range.To - 1].Time, Bars[Bars.Range.To - 1].Close));

                        if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                        {
                            var res = Trade.CancelPendingPosition(posGuidSell);
                            if (res.IsSuccessful)
                            {
                                posGuidSell = Guid.Empty;
                            }
                        }

                        if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                        {
                            var result = Trade.UpdatePendingPosition(posGuidBuy, 0.1, Bars[zzd1].High + 0.00010, Bars[zzd1].High - 0.0010, null);
                            if (result.IsSuccessful)
                            {
                                posGuidBuy = result.Position.Id;
                            }
                        }


                        if (posGuidBuy == Guid.Empty)
                        {
                            var result2 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellLimit, 0.1, Bars[zzd1].High + 0.00020, 0, Stops.InPrice(Bars[zzd1].High + 0.002, Bars[zzd1].High - sprd - 0.00010), null, null, null);
                            if (result2.IsSuccessful)
                            {
                                posGuidBuy = result2.Position.Id;
                            }
                        }
                    }
                }
//==== ВНИЗУ ПИК ======================================================================================================================
                if (zz3 > zz2 && zz2 < zz1)
                {                 // ВНИЗУ
                    zzd5    = zzd4; zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    zzu5    = zzu4; zzu4 = zzu3; zzu3 = zzu2; zzu2 = zzu1; zzu1 = zz2;
                    vb.Time = Bars[Bars.Range.To - 1].Time;
                    Print("ВНИЗУ {0} - {1}<{2} = {3} [{4}]", Bars[Bars.Range.To - 1].Time, zzu1, zzu3, zzu3 > zzu1, torg2);
                    if (zzu3 > zzu1 && zzu3 > zzu5 && zzu2 > zzu4 && torg2)
                    {
                        var toolPolyLine = Tools.Create <PolyLine>();
                        toolPolyLine.Color = Color.Blue;
                        toolPolyLine.Width = 4;

                        toolPolyLine.AddPoint(new ChartPoint(Bars[zzd4].Time, Bars[zzd4].High));
                        toolPolyLine.AddPoint(new ChartPoint(Bars[zzd3].Time, Bars[zzd3].Low));
                        toolPolyLine.AddPoint(new ChartPoint(Bars[zzd2].Time, Bars[zzd2].High));
                        toolPolyLine.AddPoint(new ChartPoint(Bars[zzd1].Time, Bars[zzd1].Low));
                        toolPolyLine.AddPoint(new ChartPoint(Bars[Bars.Range.To - 1].Time, Bars[Bars.Range.To - 1].Close));

                        if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                        {
                            var res = Trade.CancelPendingPosition(posGuidBuy);
                            if (res.IsSuccessful)
                            {
                                posGuidBuy = Guid.Empty;
                            }
                        }

                        if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                        {
                            var result = Trade.UpdatePendingPosition(posGuidSell, 0.1,
                                                                     Bars[zzd1].Low - 0.0001,
                                                                     Bars[zzd1].Low + 0.001,
                                                                     null);
                            if (result.IsSuccessful)
                            {
                                posGuidSell = result.Position.Id;
                            }
                        }

                        if (posGuidSell == Guid.Empty)
                        {
                            var result3 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.BuyLimit, 0.1, Bars[zzd1].Low - 0.00020, 0, Stops.InPrice(Bars[zzd1].Low - 0.002, Bars[zzd1].Low + sprd + 0.00010), null, null, null);
                            if (result3.IsSuccessful)
                            {
                                posGuidSell = result3.Position.Id;
                            }
                        }
                    }
                }
            }
        }
Пример #8
0
//===============================================================================================================================
        protected override void NewBar()
        {
            _wprInd.ReInit();
//=== КОРЕКЦИЯ ===========================================================================================================
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty;
            }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty;
            }

//=== Закрытие всех ордеров если пятница 16:00 (19:00 Kiev) ===========================================================================
            if (Bars[Bars.Range.To - 1].Time.DayOfWeek == DayOfWeek.Friday && Bars[Bars.Range.To - 1].Time.Hour == 16)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }

                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }
//======================================================================================================================================
            if (_wprInd.MainIndicatorSeries[Bars.Range.To - 1] > 0)
            {
                vy.Time = Bars[Bars.Range.To - 1].Time;
                zz3     = zz2;       zz2 = zz1;   zz1 = _wprInd.MainIndicatorSeries[Bars.Range.To - 1];
                zzi3    = zzi2;      zzi2 = zzi1;  zzi1 = Bars.Range.To - 1;

                if (zz3 < zz2 && zz2 > zz1)
                {                 // ПИК ВВЕРХУ
                    i++;
                    zzd8 = zzd7; zzd7 = zzd6; zzd6 = zzd5; zzd5 = zzd4; zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    zzu8 = zzu7; zzu7 = zzu6; zzu6 = zzu5; zzu5 = zzu4; zzu4 = zzu3; zzu3 = zzu2; zzu2 = zzu1; zzu1 = zz2;
                    Print("ВВЕРХ {0} 1={1} 2={2} 3={3} 4={4}", Bars[zzd1].Time, zzu1, zzu2, zzu3, zzu4);
                    if (i > 8 && zzu7 < zzu5 && zzu5 < zzu3 && zzu1 < zzu3)            // ВВЕРХУ
                    {
                        var vr = Tools.Create <VerticalLine>(); vr.Color = Color.Red; vr.Time = Bars[zzd1].Time; vr.Width = 3;

                        if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                        {
                            var res = Trade.CancelPendingPosition(posGuidBuy); if (res.IsSuccessful)
                            {
                                posGuidBuy = Guid.Empty;
                            }
                        }
                        if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                        {
                            var res = Trade.CancelPendingPosition(posGuidSell); if (res.IsSuccessful)
                            {
                                posGuidSell = Guid.Empty;
                            }
                        }

                        if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                        {
                            var res = Trade.CancelPendingPosition(posGuidSell); if (res.IsSuccessful)
                            {
                                posGuidSell = Guid.Empty;
                            }
                        }
                        if (posGuidBuy == Guid.Empty)
                        {
                            cn = Math.Round(Bars[zzd3].Low - ((Bars[zzd3].High - Bars[zzd2].Low) * 1.618), 5);
                            var result1 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.BuyLimit, 0.1, cn, 0, Stops.InPips(200, 100), null, null, null);
                            if (result1.IsSuccessful)
                            {
                                posGuidSell = result1.Position.Id; zzts2 = zzu2;
                            }
                        }
                    }
                }

                if (zz3 > zz2 && zz2 < zz1)
                {                 // ЯМА  ВНИЗУ
                    i++;
                    zzd8 = zzd7; zzd7 = zzd6; zzd6 = zzd5; zzd5 = zzd4; zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    zzu8 = zzu7; zzu7 = zzu6; zzu6 = zzu5; zzu5 = zzu4; zzu4 = zzu3; zzu3 = zzu2; zzu2 = zzu1; zzu1 = zz2;
                    Print("НИЗ {0} 1={1} 2={2} 3={3} 4={4}", Bars[zzd1].Time, zzu1, zzu2, zzu3, zzu4);
                    if (i > 8 && zzu7 > zzu5 && zzu5 > zzu3 && zzu1 > zzu3)             //  ВНИЗУ
                    {
                        var vr = Tools.Create <VerticalLine>(); vr.Color = Color.Blue; vr.Time = Bars[zzd1].Time; vr.Width = 3;

                        if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                        {
                            var res = Trade.CancelPendingPosition(posGuidBuy); if (res.IsSuccessful)
                            {
                                posGuidBuy = Guid.Empty;
                            }
                        }
                        if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                        {
                            var res = Trade.CancelPendingPosition(posGuidSell); if (res.IsSuccessful)
                            {
                                posGuidSell = Guid.Empty;
                            }
                        }

                        if (posGuidSell == Guid.Empty)
                        {
                            cn = Math.Round(zzu3 + ((zzu2 - zzu3) * 1.618), 5);
                            var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellLimit, 0.1, cn, 0, Stops.InPips(200, 100), null, null, null);
                            if (result.IsSuccessful)
                            {
                                posGuidBuy = result.Position.Id; zztb2 = zzu2;
                            }
                        }
                    }
                }

                /*	if (posGuidSell!=Guid.Empty && Trade.GetPosition(posGuidSell).State==PositionState.Pending && Bars[Bars.Range.To-1].Low<zztb2)
                 *      {    zztb2=-1000;
                 *              var res = Trade.CancelPendingPosition(posGuidSell);
                 *                              if (res.IsSuccessful)  posGuidSell = Guid.Empty;
                 *      }
                 *      if (posGuidBuy!=Guid.Empty && Trade.GetPosition(posGuidBuy).State==PositionState.Pending && Bars[Bars.Range.To-1].High>zzts2)
                 *      {  zzts2=1000;
                 *              var res = Trade.CancelPendingPosition(posGuidBuy);
                 *                              if (res.IsSuccessful)  posGuidBuy = Guid.Empty;
                 *      }*/
            }
        }
Пример #9
0
//===============================================================================================================================
        protected override void NewBar()
        {
            _wprInd.ReInit();
//=== КОРЕКЦИЯ ===========================================================================================================
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty;
            }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty;
            }

//=== Закрытие всех ордеров если пятница 16:00 (19:00 Kiev) ===========================================================================
            if (Bars[Bars.Range.To - 1].Time.DayOfWeek == DayOfWeek.Friday && Bars[Bars.Range.To - 1].Time.Hour == 16)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }

                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }
//======================================================================================================================================
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] < 0 && _ftoInd.FisherSeries[Bars.Range.To - 1] > 0)
            {
                FU = Bars.Range.To; isFU = true;
            }
            else
            {
                isFU = false;
            }
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] > 0 && _ftoInd.FisherSeries[Bars.Range.To - 1] < 0)
            {
                FD = Bars.Range.To; isFD = true;
            }
            else
            {
                isFD = false;
            }

            if (_ftoInd.FisherSeries[Bars.Range.To - 2] < _ftoInd.Ma1Series[Bars.Range.To - 2] && _ftoInd.FisherSeries[Bars.Range.To - 1] > _ftoInd.Ma1Series[Bars.Range.To - 1])
            {
                isFMU = true;
            }
            else
            {
                isFMU = false;
            }
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] > _ftoInd.Ma1Series[Bars.Range.To - 2] && _ftoInd.FisherSeries[Bars.Range.To - 1] < _ftoInd.Ma1Series[Bars.Range.To - 1])
            {
                isFMD = true;
            }
            else
            {
                isFMD = false;
            }

            if (_ftoInd.FisherSeries[Bars.Range.To - 2] < _ftoInd.Ma2Series[Bars.Range.To - 2] && _ftoInd.FisherSeries[Bars.Range.To - 1] > _ftoInd.Ma2Series[Bars.Range.To - 1])
            {
                isFM2U = true;
            }
            else
            {
                isFM2U = false;
            }
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] > _ftoInd.Ma2Series[Bars.Range.To - 2] && _ftoInd.FisherSeries[Bars.Range.To - 1] < _ftoInd.Ma2Series[Bars.Range.To - 1])
            {
                isFM2D = true;
            }
            else
            {
                isFM2D = false;
            }


            if (isFM2U)
            {
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res3 = Trade.CloseMarketPosition(posGuidSell); if (res3.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }
            if (isFM2D)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res1 = Trade.CloseMarketPosition(posGuidBuy); if (res1.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }


            if (isFD)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res1 = Trade.CloseMarketPosition(posGuidBuy); if (res1.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res2 = Trade.CancelPendingPosition(posGuidBuy); if (res2.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }
            if (isFU)
            {
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res3 = Trade.CloseMarketPosition(posGuidSell); if (res3.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res4 = Trade.CancelPendingPosition(posGuidSell); if (res4.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }

//======================================================================================================================================
            if (_wprInd.MainIndicatorSeries[Bars.Range.To - 1] > 0)
            {
                zz3  = zz2;       zz2 = zz1;   zz1 = _wprInd.MainIndicatorSeries[Bars.Range.To - 1];
                zzi3 = zzi2;      zzi2 = zzi1;  zzi1 = Bars.Range.To - 1;

                if (zz3 < zz2 && zz2 > zz1)
                {                 // ВВЕРХУ
                    zzd6 = zzd5; zzd5 = zzd4; zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    zzu6 = zzu5; zzu5 = zzu4; zzu4 = zzu3; zzu3 = zzu2; zzu2 = zzu1; zzu1 = zz2;
                    if (zzd2 >= FU && zzd2 >= FD && zzd3 <= FD)
                    {
                        var vr = Tools.Create <VerticalLine>(); vr.Color = Color.Red; vr.Time = Bars[zzd2].Time; vr.Width = 3;
                        if (posGuidSell == Guid.Empty)
                        {
                            var result1 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellStop, 0.1, zzu2, 0, Stops.InPips(200, null), null, null, null);
                            if (result1.IsSuccessful)
                            {
                                posGuidSell = result1.Position.Id;
                            }
                            else
                            {
                                //var result2 = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 0.1,Instrument.Bid, -1,Stops.InPips(200,100), null, null);
                                var result2 = Trade.Sell(Instrument.Id, 0.1);
                                if (result2.IsSuccessful)
                                {
                                    posGuidSell = result2.Position.Id;
                                }
                            }
                        }
                    }
                }

                if (zz3 > zz2 && zz2 < zz1)
                {                 // ВНИЗУ
                    zzd6 = zzd5; zzd5 = zzd4; zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    zzu6 = zzu5; zzu5 = zzu4; zzu4 = zzu3; zzu3 = zzu2; zzu2 = zzu1; zzu1 = zz2;
                    if (zzd2 >= FD && zzd2 >= FU && zzd3 <= FU)
                    {
                        var vr = Tools.Create <VerticalLine>(); vr.Color = Color.Blue; vr.Time = Bars[zzd2].Time; vr.Width = 3;
                        if (posGuidBuy == Guid.Empty)
                        {
                            var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.BuyStop, 0.1, zzu2, 0, Stops.InPips(200, null), null, null, null);
                            if (result.IsSuccessful)
                            {
                                posGuidBuy = result.Position.Id;
                            }
                            else
                            {
                                //var result3 = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 0.1,Instrument.Bid, -1, Stops.InPips(200,100), null, null);
                                var result3 = Trade.Buy(Instrument.Id, 0.1);
                                if (result3.IsSuccessful)
                                {
                                    posGuidBuy = result3.Position.Id;
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #10
0
        protected override void NewBar()
        {
            //=== КОРЕКЦИЯ ===========================================================================================================
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty;
            }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty;
            }
            //=== Закрытие всех ордеров если пятница 16:00 (19:00 Kiev) ===========================================================================
            if (Bars[Bars.Range.To - 1].Time.DayOfWeek == DayOfWeek.Friday && Bars[Bars.Range.To - 1].Time.Hour == 16)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }

                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }
            //=== Закрытие  ордеров если уровень ==================================================================
            if (Bars[Bars.Range.To - 1].High > Ur1 && posGuidBuy != Guid.Empty)
            {
                var res = Trade.CloseMarketPosition(posGuidBuy); if (res.IsSuccessful)
                {
                    posGuidBuy = Guid.Empty;
                }
            }
            if (Bars[Bars.Range.To - 1].Low < Ur2 && posGuidSell != Guid.Empty)
            {
                var res = Trade.CloseMarketPosition(posGuidSell); if (res.IsSuccessful)
                {
                    posGuidSell = Guid.Empty;
                }
            }

            frSU = _frInd.TopSeries[Bars.Range.To - 5];
            frSD = _frInd.BottomSeries[Bars.Range.To - 5];

            if (frSU > 0 && kl == 2 && frSU > d1)
            {
                d1 = frSU; i1 = Bars.Range.To - 5;
            }

            if (frSU > 0 && kl == 1)
            {
                kl  = 2; d5 = d4; d4 = d3; d4 = d3; d3 = d2; d2 = d1; d1 = frSU;
                i5  = i4; i4 = i3; i4 = i3; i3 = i2; i2 = i1; i1 = Bars.Range.To - 5;
                C1  = Bars[Bars.Range.To - 1].Close;
                dl1 = (int)(Math.Round(d1 - C1, 5) * 100000);
                //Print("{0} - {1} {2} ",Bars[i1].Time,dl1,Math.Round(C1-d1,5));
                t1  = (int)(Math.Round(Math.Abs(d2 - d3), 5) * 100000);                                                       // 100
                t2  = (int)(Math.Round(1.618 * Math.Abs(d2 - d3), 5) * 100000);                                               // 161.8
                t3  = (int)(Math.Round(2.618 * Math.Abs(d2 - d3), 5) * 100000);                                               // 261.8
                sl1 = (int)(Math.Round(Math.Abs(C1 - d3), 5) * 100000);
                t1  = t1 - dl1;      t2 = t2 - dl1;      t3 = t3 - dl1;


                if (d5 < d3 && d1 < d3 && C1 < d1 &&
                    Math.Abs((d2 - d1) / (d3 - d2)) > 0.5

                    /* Math.Abs((d2-d1)/(d3-d2))<0.81 &&
                     * Bars[Bars.Range.To-4].Close<Bars[Bars.Range.To-4].Open &&
                     * Bars[Bars.Range.To-3].Close<Bars[Bars.Range.To-3].Open &&
                     * Bars[Bars.Range.To-2].Close<Bars[Bars.Range.To-2].Open*/)
                {
                    Print("SELL {0} t1(100)={1} t2(161)={2} dl={3} - sl={4} / {5} {6} {7} {8} {9} /", Bars[i1].Time, t1, t3, dl1, sl1, d1, d2, d3, d4, d5);
                    if (posGuidSell == Guid.Empty && tDw)
                    {
                        var result1 = Trade.OpenMarketPosition(Instrument.Id,
                                                               ExecutionRule.Sell, 0.1,
                                                               Instrument.Ask, -1,
                                                               Stops.InPips(sl1 + 20, 100), null, null);
                        if (result1.IsSuccessful)
                        {
                            posGuidSell = result1.Position.Id;
                        }
                    }


                    var toolPolyLine = Tools.Create <PolyLine>();
                    toolPolyLine.Color = Color.Red;
                    toolPolyLine.Width = 4;
                    toolPolyLine.AddPoint(new ChartPoint(Bars[i5].Time, d5));
                    toolPolyLine.AddPoint(new ChartPoint(Bars[i4].Time, d4));
                    toolPolyLine.AddPoint(new ChartPoint(Bars[i3].Time, d3));
                    toolPolyLine.AddPoint(new ChartPoint(Bars[i2].Time, d2));
                    toolPolyLine.AddPoint(new ChartPoint(Bars[i1].Time, d1));
                }
            }
            if (frSD > 0 && kl == 1 && frSD < d1)
            {
                d1 = frSD; i1 = Bars.Range.To - 5;
            }
            if (frSD > 0 && kl == 2)
            {
                kl  = 1; d5 = d4; d4 = d3; d4 = d3; d3 = d2; d2 = d1; d1 = frSD;
                i5  = i4; i4 = i3; i4 = i3; i3 = i2; i2 = i1; i1 = Bars.Range.To - 5;
                C1  = Bars[Bars.Range.To - 1].Close;
                dl1 = (int)(Math.Round(C1 - d1, 5) * 100000);
                //Print("{0} - {1} {2} ",Bars[i1].Time,dl1,Math.Round(C1-d1,5));
                t1  = (int)(Math.Round(Math.Abs(d2 - d3), 5) * 100000);                                                       // 100
                t2  = (int)(Math.Round(1.618 * Math.Abs(d2 - d3), 5) * 100000);                                               // 161.8
                t3  = (int)(Math.Round(2.618 * Math.Abs(d2 - d3), 5) * 100000);                                               // 261.8
                sl1 = (int)(Math.Round(Math.Abs(C1 - d3), 5) * 100000);
                t1  = t1 - dl1;      t2 = t2 - dl1;      t3 = t3 - dl1;
                //Print("{0} {1} {2} {3} - sl={4}",Bars[i1].Time,dl1,t1,t2,sl1);

                if (d5 > d3 && d1 > d3 && C1 > d1 &&
                    Math.Abs((d2 - d1) / (d3 - d2)) > 0.5

                    /* Bars[Bars.Range.To-4].Close>Bars[Bars.Range.To-4].Open &&
                     * Bars[Bars.Range.To-3].Close>Bars[Bars.Range.To-3].Open &&
                     * Bars[Bars.Range.To-2].Close>Bars[Bars.Range.To-2].Open*/)
                {
                    Print("BUY {0} t1(100)={1} t2(161)={2} dl1={3} - sl={4} / {5} {6} {7} {8} {9} /", Bars[i1].Time, t1, t3, dl1, sl1, d1, d2, d3, d4, d5);

                    if (posGuidBuy == Guid.Empty && tUp)
                    {
                        var result2 = Trade.OpenMarketPosition(Instrument.Id,
                                                               ExecutionRule.Buy, 0.1,
                                                               Instrument.Bid, -1,
                                                               Stops.InPips(sl1 + 20, 100), null, null);
                        if (result2.IsSuccessful)
                        {
                            posGuidBuy = result2.Position.Id;
                        }
                    }

                    var toolPolyLine = Tools.Create <PolyLine>();
                    toolPolyLine.Color = Color.Blue;
                    toolPolyLine.Width = 4;
                    toolPolyLine.AddPoint(new ChartPoint(Bars[i5].Time, d5));
                    toolPolyLine.AddPoint(new ChartPoint(Bars[i4].Time, d4));
                    toolPolyLine.AddPoint(new ChartPoint(Bars[i3].Time, d3));
                    toolPolyLine.AddPoint(new ChartPoint(Bars[i2].Time, d2));
                    toolPolyLine.AddPoint(new ChartPoint(Bars[i1].Time, d1));
                }
            }
        }
Пример #11
0
//===============================================================================================================================
        protected override void NewBar()
        {
            _wprInd.ReInit();
//=== КОРЕКЦИЯ ===========================================================================================================
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty;
            }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty;
            }

//=== Закрытие всех ордеров если пятница 16:00 (19:00 Kiev) ===========================================================================
            if (Bars[Bars.Range.To - 1].Time.DayOfWeek == DayOfWeek.Friday && Bars[Bars.Range.To - 1].Time.Hour == 16)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }

                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }
//======================================================================================================================================
            // Фишер выше/ниже синей линии
            if (sF > 0 && sF > bF)
            {
                fuH1 = true;
            }
            else
            {
                fuH1 = false;
            }
            if (sF < 0 && sF < bF)
            {
                fdH1 = true;
            }
            else
            {
                fdH1 = false;
            }
            //Значение счетчика прохода фишера через 0  FU - вверх  FD - вниз
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] < 0 && _ftoInd.FisherSeries[Bars.Range.To - 1] > 0)
            {
                FU = Bars.Range.To; isFU = true;
            }
            else
            {
                isFU = false;
            }
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] > 0 && _ftoInd.FisherSeries[Bars.Range.To - 1] < 0)
            {
                FD = Bars.Range.To; isFD = true;
            }
            else
            {
                isFD = false;
            }
            // isFMU isFMD - синяя линия пересекла линию фишера
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] < _ftoInd.Ma1Series[Bars.Range.To - 2] && _ftoInd.FisherSeries[Bars.Range.To - 1] > _ftoInd.Ma1Series[Bars.Range.To - 1])
            {
                isFMU = true;
            }
            else
            {
                isFMU = false;
            }
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] > _ftoInd.Ma1Series[Bars.Range.To - 2] && _ftoInd.FisherSeries[Bars.Range.To - 1] < _ftoInd.Ma1Series[Bars.Range.To - 1])
            {
                isFMD = true;
            }
            else
            {
                isFMD = false;
            }
            // isFM2U isFM2D - красная линия пересекла линию фишера
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] < _ftoInd.Ma2Series[Bars.Range.To - 2] && _ftoInd.FisherSeries[Bars.Range.To - 1] > _ftoInd.Ma2Series[Bars.Range.To - 1])
            {
                isFM2U = true;
            }
            else
            {
                isFM2U = false;
            }
            if (_ftoInd.FisherSeries[Bars.Range.To - 2] > _ftoInd.Ma2Series[Bars.Range.To - 2] && _ftoInd.FisherSeries[Bars.Range.To - 1] < _ftoInd.Ma2Series[Bars.Range.To - 1])
            {
                isFM2D = true;
            }
            else
            {
                isFM2D = false;
            }
//======================================================================================================================================
            // Если красная пересекла линию - закрыть все активные ордера
            if (isFM2U)
            {
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res3 = Trade.CloseMarketPosition(posGuidSell); if (res3.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }
            if (isFM2D)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res1 = Trade.CloseMarketPosition(posGuidBuy); if (res1.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }

            // Если фишер пересек 0 линию - закрыть все ордера
            if (isFD)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res1 = Trade.CloseMarketPosition(posGuidBuy); if (res1.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res2 = Trade.CancelPendingPosition(posGuidBuy); if (res2.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }
            if (isFU)
            {
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res3 = Trade.CloseMarketPosition(posGuidSell); if (res3.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res4 = Trade.CancelPendingPosition(posGuidSell); if (res4.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }

//======================================================================================================================================

            /*		if( _wprInd.MainIndicatorSeries[Bars.Range.To-1]>0)
             *              {
             *                       zz3 =zz2;	 zz2 =zz1;   zz1 =_wprInd.MainIndicatorSeries[Bars.Range.To-1];
             *                       zzi3=zzi2;	 zzi2=zzi1;  zzi1= Bars.Range.To-1;
             *
             *                      if(zz3<zz2 && zz2>zz1)
             *                      {   // ВВЕРХУ - ТРЕНД ВНИЗ!
             *                              zzd6=zzd5;zzd5=zzd4;zzd4=zzd3; zzd3=zzd2; zzd2=zzd1; zzd1=zzi2;
             *                              zzu6=zzu5;zzu5=zzu4;zzu4=zzu3; zzu3=zzu2; zzu2=zzu1; zzu1=zz2;
             *                              // Условие открытия ордеров : FU-номер свечи прохода 0 фишером
             *                              //
             *                              if(zzd2>=FU && zzd2>=FD && zzd3<=FD && zzu1<zzu3)
             *                                      {
             *                                       var vr=Tools.Create<VerticalLine>(); vr.Color=Color.Red; vr.Time=Bars[zzd2].Time; vr.Width=3;
             *                                       if(fdH1 && posGuidSell==Guid.Empty){
             *                                              var result1 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellStop, 0.1,  zzu2, 0, Stops.InPips(200,600), null, null, null);
             *                                            if (result1.IsSuccessful) posGuidSell=result1.Position.Id; else
             *                                            {
             *                                                      var result2 = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 0.1,Instrument.Bid, -1,Stops.InPips(200,600), null, null);
             *                                                      if (result2.IsSuccessful)  posGuidSell=result2.Position.Id;
             *                                                }
             *                                             }
             *                                  }
             *                      }
             *
             *                      if(zz3>zz2 && zz2<zz1)
             *                      {   // ВНИЗУ - ТРЕНД ВВЕРХ!
             *                              zzd6=zzd5;zzd5=zzd4;zzd4=zzd3; zzd3=zzd2; zzd2=zzd1; zzd1=zzi2;
             *                              zzu6=zzu5;zzu5=zzu4;zzu4=zzu3; zzu3=zzu2; zzu2=zzu1; zzu1=zz2;
             *                              if(zzd2>=FD && zzd2>=FU && zzd3<=FU && zzu1>zzu3)
             *                              {var vr=Tools.Create<VerticalLine>(); vr.Color=Color.Blue; vr.Time=Bars[zzd2].Time; vr.Width=3;
             *                                      if(fuH1 && posGuidBuy==Guid.Empty){
             *                                      var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.BuyStop, 0.1, zzu2, 0, Stops.InPips(200,600), null, null, null);
             *                                           if (result.IsSuccessful)  posGuidBuy=result.Position.Id; else
             *                                           {
             *                                                      var result3 = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 0.1,Instrument.Bid, -1, Stops.InPips(200,600), null, null);
             *                                                      if (result3.IsSuccessful)  posGuidBuy=result3.Position.Id;
             *                                               }
             *                                              }
             *                                      }
             *                      }
             *              } */
        }
Пример #12
0
//=====================================================================================================================================
        protected override void NewBar()
        {
            _wprInd.ReInit();
            ci = Bars.Range.To - 1;

//=== КОРЕКЦИЯ ========================================================================================================================
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty;
            }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty;
            }

//=== Закрытие всех ордеров если пятница 16:00 (19:00 Kiev) ===========================================================================
            if (Bars[Bars.Range.To - 1].Time.DayOfWeek == DayOfWeek.Friday && Bars[Bars.Range.To - 1].Time.Hour == 16)
            {
                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }

                if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res = Trade.CancelPendingPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }

//===============================================================================================================================
            if (_wprInd.MainIndicatorSeries[ci] > 0)
            {                // Значения 3 значений - для определения направления
                zz3 = zz2;       zz2 = zz1;   zz1 = _wprInd.MainIndicatorSeries[ci];
                zi2 = zi1;  zi1 = ci;
                //Print("{0} - {1} {2}",Bars[ci].Time,zz1<zz2,zz3<zz2);
//======================= ПИК
                if (zz2 < zz3 && zz2 < zz1)            // ВНИЗУ
                {
                    zzd5 = zzd4; zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zz2;
                    zzi5 = zzi4; zzi4 = zzi3; zzi3 = zzi2; zzi2 = zzi1; zzi1 = zi2;
                    //Print("U {0} - {1} - {2} - {3} - {4}",Bars[ci].Time,tmM15,F15U,Bars[zzi1].Time,Bars[zzi2].Time);
                    // if(F15U>Bars[zzi2].Time && F15U<Bars[zzi1].Time) {

                    if (F15U)
                    {
                        F15U = false;
                        tp1  = (int)(Math.Round(Math.Abs(zzd3 - zzd2), 5) * 100000) - (int)(Math.Round(Math.Abs(zzd1 - Bars[ci].Close), 5) * 100000);
                        sl1  = (int)(Math.Round(Math.Abs(zzd1 - Bars[ci].Close), 5) * 100000);
                        if (tp1 > 100)
                        {
                            Print("U {0} - {1} - {2}", Bars[ci].Time, tp1, tmM15);
                            var vr = Tools.Create <VerticalLine>(); vr.Color = Color.Red; vr.Time = Bars[zzi2].Time;

                            var vr1 = Tools.Create <VerticalLine>(); vr1.Color = Color.DarkOrange; vr1.Time = tmU; vr1.Width = 4;

                            if (posGuidBuy == Guid.Empty)
                            {
                                var result = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 0.1, Instrument.Ask, -1, Stops.InPips(sl1 + 50, tp1 - 20), null);
                                if (result.IsSuccessful)
                                {
                                    posGuidBuy = result.Position.Id;
                                }
                            }
                        }
                    }
                }
                if (zz2 > zz3 && zz2 > zz1)            // ВВЕРХУ
                {
                    zzd5 = zzd4; zzd4 = zzd3; zzd3 = zzd2; zzd2 = zzd1; zzd1 = zz2;
                    zzi5 = zzi4; zzi4 = zzi3; zzi3 = zzi2; zzi2 = zzi1; zzi1 = zi2;

                    // if(F15D>Bars[zzi2].Time && F15D<Bars[zzi1].Time) {
                    if (F15D)
                    {
                        F15D = false;
                        tp1  = (int)(Math.Round(Math.Abs(zzd3 - zzd2), 5) * 100000) - (int)(Math.Round(Math.Abs(zzd1 - Bars[ci].Close), 5) * 100000);
                        sl1  = (int)(Math.Round(Math.Abs(zzd1 - Bars[ci].Close), 5) * 100000);

                        if (tp1 > 100)
                        {
                            Print("D {0} - {1} - {2}", Bars[ci].Time, tp1, tmM15);
                            var vr  = Tools.Create <VerticalLine>(); vr.Color = Color.Blue; vr.Time = Bars[zzi2].Time;
                            var vr2 = Tools.Create <VerticalLine>(); vr2.Color = Color.DarkOrange; vr2.Time = tmD; vr2.Width = 4;

                            /*	if(posGuidSell==Guid.Empty){
                             *      var result=Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 0.1,Instrument.Bid,-1,Stops.InPips(sl1+50,tp1-20),null);
                             *      if (result.IsSuccessful) posGuidSell=result.Position.Id;
                             *                      } */
                        }
                    }
                }
            }
//===============================================================================================================================
        }