コード例 #1
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 - Истина если появился НОВЫЙ фрактал Вверх/Вниз
            //Print("Fractal!! - Top={0} Bottom={1}",_frInd.TopSeries[Bars.Range.To-5],_frInd.BottomSeries[Bars.Range.To-5]);
            frSU = _frInd.TopSeries[Bars.Range.To - 5];
            frSD = _frInd.BottomSeries[Bars.Range.To - 5];
            //Print("Fractal2!! - Top={0} Bottom={1} -- {2}",frSU,frSD,Bars[Bars.Range.To-5].Time);
            //if (Trade.GetPosition(posGuidSell).State==PositionState.Active)
            //		Print("15 $$$$$$$$$$$$$$$$$$$$$$$$frSU>0={3} Top={4} frUpH={0} frUp_Time={1} -- {2}",frUpH,frUp_Time,Bars[Bars.Range.To-1],frSU,_frInd.TopSeries[Bars.Range.To-5]);



            if (frSU > 0)
            {
                frUp = true;
            }
            else
            {
                frUp = false;
            }
            if (frSD > 0)
            {
                frDown = true;
            }
            else
            {
                frDown = false;
            }
            //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];   //С

            // Значения Gator Oscillator
            gNU = _goInd.NegativeSeriesUp[Bars.Range.To - 1];
            gND = _goInd.NegativeSeriesDown[Bars.Range.To - 1];
            gPD = _goInd.PositiveSeriesDown[Bars.Range.To - 1];
            gPU = _goInd.PositiveSeriesUp[Bars.Range.To - 1];

// =================================================================================================================================
// 1. Alligator СПИТ - Торгуем
            // Правильно ЗКС или СКЗ - если наоборот то  линии переплелись - Торг
            if (!((aGuba > aZub && aZub > aChelust) || (aChelust > aZub && aZub > aGuba)))
            {
                Torg = true;
                //Print("#01 Torg - Линии Алигатора переплелись! ",DTime);
            }

            //Print("gNU={0},gND={1},gPU={2},gPD={3} -- {4}",gNU,gND,gPU,gPD,Bars[Bars.Range.To-1].Time);
            //if (gPU>0 && gNU<0) allEst=true; else allEst=false;
            //Print("Алигатор ЕСТ - PU={0} NU={1} - {2} ",gPU,gNU,Bars[Bars.Range.To-1].Time);
            if ((gPD > 0 && gND < 0) || (gPD > 0 && gNU < 0) || (gPU > 0 && gND < 0))
            {
                allSpit = true;
                //Print("#01 Аллигатор СПИТ! -- {0} ",DTime);
            }
            else
            {
                allSpit = false;
            }


            //Print("Алигатор СПИТ - PD={0} ND={1} - {2} ",gPD,gND,Bars[Bars.Range.To-1].Time);
            //if ((gPD>0 && gNU<0) || (gPU>0 && gND<0))
            //Print("Алигатор ПРОСЫПАЕТСЯ - PD>0={0} NU<0={1} gPU>0={2} gND<0={3} - {4} ",gPD,gNU,gPU,gND,Bars[Bars.Range.To-1].Time);
// =================================================================================================================================
            // Срабатывает - когда появился новый фрактал - frUp frDown=true!
            // Запоминаем значения Свечи бара-фрактала(frUpH) и время (frUp_Time)
            if (frSU > 0)
            {
                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 (frSD > 0)
            {
                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 (frSU > 0 && frUpL > aGuba5 && frUpL > aChelust5 && frUpL > aZub5)
            {
                fr_all_Up = frUpH; fr_all_Up_Time = frUp_Time;  fr_all_Up_L = true;
                Print("02 Фрактал ВВЕРХ и выше Алигатора - {0} ", Bars[Bars.Range.To - 1].Time);
            }
            // Если появился новый фрактал  ВВЕРХ и касается Алигатора - отменяем "рабочий"
            if (frSU > 0 && !(frUpL > aGuba5 && frUpL > aChelust5 && frUpL > aZub5))
            {
                fr_all_Up_L = false;
                Print("03 Фрактал ВВЕРХ но касается Алигатора - {0} }", Bars[Bars.Range.To - 1].Time);
            }
//===============================================================================================================================
            // Появился новый фрактал ВНИЗ  и Свеча Fractalа НИЖЕ  Alligatora не касается Alligatorа
            // ВЕРХ Бар-Фрактала НИЖЕ Alligator  - Назначаем рабочим (fr_all_Down) для SellLimit
            if (frSD > 0 && frDownH < aGuba5 && frDownH < aChelust5 && frDownH < aZub5)
            {
                fr_all_Down = frDownL;  fr_all_Down_Time = frDown_Time; fr_all_Down_L = true;
                Print("04 Фрактал НИЖЕ Алигатора - {0} ", Bars[Bars.Range.To - 1].Time);
            }
            // Если появился новый фрактал  ВНИЗ  и касается Алигатора - отменяем "рабочий"
            if (frSD > 0 && !(frDownH < aGuba5 && frDownH < aChelust5 && frDownH < aZub5))
            {
                fr_all_Down_L = false;
                Print("05 Фрактал ВНИЗ и касается Алигатора - {0} ", Bars[Bars.Range.To - 1].Time);
            }
//===============================================================================================================================
            // Появился новый фрактал ВВЕРХ и назначен рабочим и есть отложеный ордер
            // меняем цену открытия и ставим TP - Низ/Верх противоположного фрактала
            if (frSU > 0 && fr_all_Up_L && posGuidBuy != Guid.Empty)
            {
                if (Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                // Ордер SellLimit-ВНИЗ - Цена открытия=High раб фрактала, SL=200p TP=Low противопложного фрактала
                {
                    var result = Trade.UpdatePendingPosition(posGuidBuy, 0.1, fr_all_Up, frDownL, null);
                    if (result.IsSuccessful)
                    {
                        posGuidBuy = result.Position.Id;
                        Print("06 UpdatePending - !появился новый фр-рабочий - переносим цену и StopLoss TP -  {0} ", DTime);
                    }
                }
            }

            // Если появился новый фрактал и не подходит под рабочий и есть отрытый отложеный ордер - отменяем ордер Buy
            if (frSU > 0 && !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("07 Появился новый ВВЕРХ фрактал и не подходит под рабочий - отменяем пред. BuyStop - CancelPending - {0} ", DTime);
                }
            }

            // Алигатор СПИТ и появился новый фрактал и назначен рабочим и нет отложек- ставим отложеный ордер
            //  и при этом нет открытых ордеров  (posGuidBuy)
            if (allSpit && frSU > 0 && fr_all_Up_L && posGuidBuy == Guid.Empty)
            {
                // Закрываем SellStop
                if (posGuidSell != Guid.Empty)
                {
                    if (Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                    {
                        var res = Trade.CancelPendingPosition(posGuidSell);
                        Print("12 Отменяем SellStop бо появился раб-фрактал  - {0} ", DTime);
                        if (res.IsSuccessful)
                        {
                            posGuidSell = Guid.Empty;
                        }
                    }
                    if (Trade.GetPosition(posGuidSell).State == PositionState.Active)
                    {
                        var res = Trade.CloseMarketPosition(posGuidSell);
                        if (res.IsSuccessful)
                        {
                            posGuidSell = Guid.Empty;
                        }
                    }
                }
                // открываем BuyStop - Цена=High раб. ВВЕРХ фрактала SL=200p TP=Низ против. фрактала
                var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.BuyStop, 0.1, fr_all_Up, 0, Stops.InPrice(frDownL - SL, null), null, null, null);
                if (result.IsSuccessful)
                {
                    posGuidBuy = result.Position.Id;
                    Print("09 BuyStop - {0}", DTime);
                }
                else
                {
                    //var result2=Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 0.1, fr_all_Up, -1, Stops.InPrice(frDownL,null), null, null);
                    var result2 = Trade.Buy(Instrument.Id, 0.1);
                    if (result2.IsSuccessful)
                    {
                        posGuidBuy = result2.Position.Id;
                        Print("09 Buy ОТКРЫТО!! - {0}", DTime);
                    }
                }
            }

//===============================================================================================================================
            // Появился новый фрактал ВНИЗ  и назначен рабочим но есть отложеный ВНИЗУ ордер
            // переносим цену открытия и ставим Stop - Низ/Верх противоположного фрактала
            if (allSpit && frSD > 0 && 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 + SL, null);
                    if (result.IsSuccessful)
                    {
                        posGuidSell = result.Position.Id;
                        Print("10 Sell UpdatePending - !появился новый фр-рабочий - переносим цену и StopLoss - {0}  ", DTime);
                    }
                }
            }
            // Если появился новый фрактал ВНИЗ и не подходит под рабочий и есть отрытый отложеный ордер - отменяем ордер Sell
            if (frSD > 0 && !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("11 Sell CancelPending - {0} ", DTime);
                }
            }

            // Алигатор переплетен и появился новый фрактал ВНИЗ и назначен рабочим и нет открытых Sell ордеров  (posGuidSell)-
            // ставим отложеный ордер SellStop и отменяем BuyStop - если открыт!
            if (allSpit && frSD > 0 && fr_all_Down_L && posGuidSell == Guid.Empty)
            {                         // Закрываем BuyStop
                if (posGuidBuy != Guid.Empty)
                {
                    if (Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                    {
                        var res = Trade.CancelPendingPosition(posGuidBuy);
                        Print("12 Отменяем BuyStop бо появился раб-фрактал  - {0} ", DTime);
                        if (res.IsSuccessful)
                        {
                            posGuidBuy = Guid.Empty;
                        }
                    }
                    if (Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                    {
                        var res = Trade.CloseMarketPosition(posGuidBuy);
                        if (res.IsSuccessful)
                        {
                            posGuidBuy = Guid.Empty;
                        }
                    }
                }
                // Открываем SellStop
                var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellStop, 0.1, fr_all_Down, 0, Stops.InPrice(frUpH + SL, null), null, null, null);
                if (result.IsSuccessful)
                {
                    posGuidSell = result.Position.Id;
                    Print("13 SellStop - {0} ", DTime);
                }
                else
                {
                    //var result2=Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 0.1, fr_all_Up, -1, Stops.InPrice(frDownL,null), null, null);
                    var result2 = Trade.Sell(Instrument.Id, 0.1);
                    if (result2.IsSuccessful)
                    {
                        posGuidBuy = result2.Position.Id;
                        Print("09 Sell ОТКРЫТО!! - {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; }

//===============================================================================================================================
            // Появился новый фрактал ВВЕРХ и открыта позиция Sell - переосим стоп
            if (frUpH != frUpH1)
            {
                frUpH1 = frUpH;

                if (Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res3 = Trade.UpdateMarketPosition(posGuidSell, frUpH1 + SL, null, null);
                    if (res3.IsSuccessful)
                    {
                        Print("15 SellStop - UpdatePending StopLoss когда Появился новый фрактал Up - {0} ", DTime);
                    }
                    else
                    {
                        var res2 = Trade.CloseMarketPosition(posGuidSell); if (res2.IsSuccessful)
                        {
                            posGuidSell = Guid.Empty;
                        }
                    }
                }
            }

            // Появился новый фрактал ВНИЗ и ОТКРЫТА позиция Buy - переносим стоп - Работает!
            if (frSD > 0 && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
            {
                var result2 = Trade.UpdateMarketPosition(posGuidBuy, frDownL - SL, null, null);
                if (result2.IsSuccessful)
                {
                    Print("14 BuyStop - !UpdatePending StopLoss когда Появился новый фрактал Down - {0}", DTime);
                }
                else
                {
                    var res0 = Trade.CloseMarketPosition(posGuidBuy); if (res0.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }



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

            //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);
                }
            }
// =================================================================================================================================
            // Закрываем ордер на покупку когда свеча каснется Зубов 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;}
        }
コード例 #2
0
//===============================================================================================================================
        protected override void NewBar()
        {
            if (first)
            {
                first = false;

                iFT = TimeToIndex(dt1, Timeframe);
                if (tu)
                {
                    nkz4  = Bars[iFT].High - ((NKZ - 5 - (NKZ * kf)) * Instrument.Point);
                    nkz2  = Bars[iFT].High - (((NKZ * 2) - (NKZ * 2 * kf)) * Instrument.Point);
                    nkz4v = Bars[iFT].High - ((NKZ - 5) * Instrument.Point);
                    nkz2v = Bars[iFT].High - ((NKZ * 2) * Instrument.Point);
                }
                if (td)
                {
                    nkz4  = Bars[iFT].Low + ((NKZ - 5 - (NKZ * kf)) * Instrument.Point);
                    nkz2  = Bars[iFT].Low + (((NKZ * 2) - (NKZ * 2 * kf)) * Instrument.Point);
                    nkz4v = Bars[iFT].Low + ((NKZ - 5) * Instrument.Point);
                    nkz2v = Bars[iFT].Low + (((NKZ * 2)) * Instrument.Point);
                }
                zmax = Bars[iFT].High;
                zmin = Bars[iFT].Low;
            }

            if (dt0 != dt1)
            {
                Tools.Remove(toolPolyLine);
                Tools.Remove(toolRectangle);
                Tools.Remove(toolRectangle1);

                nkz4  = Math.Round(nkz4, Instrument.PriceScale);
                nkz2  = Math.Round(nkz2, Instrument.PriceScale);
                nkz4v = Math.Round(nkz4v, Instrument.PriceScale);
                nkz2v = Math.Round(nkz2v, Instrument.PriceScale);

//=== КОРЕКЦИЯ ===========================================================================================================
                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 (posGuidBuy == Guid.Empty && tu)
                {
                    var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.BuyLimit, 0.1,
                                                           nkz4, 0,
                                                           Stops.InPrice(200, null), null, null, mgB);
                    if (result.IsSuccessful)
                    {
                        posGuidBuy = result.Position.Id;
                    }
                }

                if (posGuidSell == Guid.Empty && td)
                {
                    var result1 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellLimit, 0.1,
                                                            nkz4, 0,
                                                            Stops.InPrice(200, null), null, null, mgS);
                    if (result1.IsSuccessful)
                    {
                        posGuidSell = result1.Position.Id;
                    }
                }


                toolPolyLine   = Tools.Create <PolyLine>(); toolPolyLine.Color = Color.Aqua;
                toolRectangle  = Tools.Create <Rectangle>(); toolRectangle.BorderColor = Color.Aqua; toolRectangle.Color = Color.DarkSeaGreen;
                toolRectangle1 = Tools.Create <Rectangle>(); toolRectangle1.BorderColor = Color.Aqua; toolRectangle1.Color = Color.DarkSeaGreen;

                toolPolyLine.AddPoint(new ChartPoint(Bars[iFT].Time, Bars[iFT].High));
                toolPolyLine.AddPoint(new ChartPoint(Bars[iFT].Time, nkz2v));

                toolRectangle.Point1 = new ChartPoint(Bars[iFT].Time, nkz4);
                toolRectangle.Point2 = new ChartPoint(Bars[Bars.Range.To - 1].Time.AddHours(24), nkz4v);

                toolRectangle1.Point1 = new ChartPoint(Bars[iFT].Time, nkz2);
                toolRectangle1.Point2 = new ChartPoint(Bars[Bars.Range.To - 1].Time.AddHours(24), nkz2v);

                dt0 = dt1;
            }
        }
コード例 #3
0
ファイル: ZZ_V4.cs プロジェクト: ivan-petrov-ubk/CS
//===============================================================================================================================
        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)
            {
                z50_3 = 0; z50_2 = 0; z50_1 = 0; torg = false;
                zzu5  = 0; zzu4 = 0; zzu3 = 0; zzu2 = 0; zzu1 = 0;
                zzd5  = 0; zzd4 = 0; zzd3 = 0; zzd2 = 0; zzd1 = 0;
                if (posGuidBuy != Guid.Empty)
                {
                    var res = Trade.CloseMarketPosition(posGuidBuy); if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (posGuidSell != Guid.Empty)
                {
                    var res = Trade.CloseMarketPosition(posGuidSell); if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }
            if (Bars[Bars.Range.To - 1].Time.DayOfWeek == DayOfWeek.Monday && Bars[Bars.Range.To - 1].Time.Hour == 01)
            {
                torg = true;
            }

//======================================================================================================================================
            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 (zzu3 < zzu1 && torg2)
                    {
                        var toolPolyLine = Tools.Create <PolyLine>();
                        toolPolyLine.Color = Color.SpringGreen;
                        toolPolyLine.Width = 4;
                        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.000010, Bars[zzd1].High - 0.00005, Bars[zzd1].High + 0.00250);
                            if (result.IsSuccessful)
                            {
                                posGuidBuy = result.Position.Id;
                            }
                        }


                        if (posGuidBuy == Guid.Empty)
                        {
                            var result2 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.BuyStop, 0.1, Bars[zzd1].High + Instrument.Spread + 0.00020, 0, Stops.InPrice(Bars[zzd1].High - Instrument.Spread - 0.00050, Bars[zzd1].High + Instrument.Spread + 0.00250), 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 && torg2)
                    {
                        var toolPolyLine = Tools.Create <PolyLine>();
                        toolPolyLine.Color = Color.Blue;
                        toolPolyLine.Width = 4;
                        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.0001, Bars[zzd1].Low - 0.00300);
                            if (result.IsSuccessful)
                            {
                                posGuidSell = result.Position.Id;
                            }
                        }

                        if (posGuidSell == Guid.Empty)
                        {
                            var result3 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellStop, 0.1, Bars[zzd1].Low - Instrument.Spread - 0.00025, 0, Stops.InPrice(Bars[zzd1].Low + Instrument.Spread + 0.00050, Bars[zzd1].Low - Instrument.Spread - 0.00250), null, null, null);
                            if (result3.IsSuccessful)
                            {
                                posGuidSell = result3.Position.Id;
                            }
                        }
                    }
                }
            }
        }
コード例 #4
0
        protected override void NewBar()
        {
            // Event occurs on every new bar
            aoUp1   = _awoInd.SeriesUp[Bars.Range.To - 1];             // Зелені лінії - Вверху>0  Внизу<0
            aoDown1 = _awoInd.SeriesDown[Bars.Range.To - 1];           // Червоні лінії
            aoUp2   = _awoInd.SeriesUp[Bars.Range.To - 2];             // Зелені лінії - Вверху>0  Внизу<0
            aoDown2 = _awoInd.SeriesDown[Bars.Range.To - 2];
            aoUp3   = _awoInd.SeriesUp[Bars.Range.To - 3];             // Зелені лінії - Вверху>0  Внизу<0
            aoDown3 = _awoInd.SeriesDown[Bars.Range.To - 3];
            aoUp4   = _awoInd.SeriesUp[Bars.Range.To - 4];             // Зелені лінії - Вверху>0  Внизу<0
            aoDown4 = _awoInd.SeriesDown[Bars.Range.To - 4];

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

            //	sF  = _ftoInd.FisherSeries[Bars.Range.To-1];  // Фішеер - Плюс-зверху Мінус - знизу
            //	sF1 = _ftoInd.FisherSeries[Bars.Range.To-2];

            //  Пересечение Фишер
            //  if (sF1<0 && sF>0)    vlB.Time=Bars[Bars.Range.To-1].Time; // ВВЕРХ
            //	if (sF1>0 && sF<0)    vlR.Time=Bars[Bars.Range.To-1].Time; // ВНИЗ

            // AO - пересечение 0

            if (aoUp2 <= 0 && aoUp1 >= 0)
            {
                DV = 0; UV = 0; DN = 0; UN = 0; U0 = true; D0 = false;
            }
            //Print("aoUp2({0})<=0 && aoUp1({1})>=0  {2} - {3}",aoUp2,aoUp1,U0,Bars[Bars.Range.To-1].Time);

            if (aoDown2 >= 0 && aoDown1 <= 0)
            {
                DV = 0; UV = 0; DN = 0; UN = 0; U0 = false; D0 = true;
            }
            //Print("aoDown2({0})<=0 && aoDown1({1})>=0 {2} - {3}",aoDown2,aoDown1,D0,Bars[Bars.Range.To-1].Time);
            // 1  UV
            if (aoUp4 > 0 && aoUp3 > 0 && aoDown2 > 0 && aoDown1 > 0)
            {
                UV++; if (UV == 1)
                {
                    MaxU = aoUp3;
                }
            }
            // 2  DV
            if (aoDown4 < 0 && aoDown3 < 0 && aoUp2 < 0 && aoUp1 < 0)
            {
                DV++; if (DV == 1)
                {
                    MaxD = aoDown3;
                }
            }
            // 3 UN
            if (aoDown4 > 0 && aoDown3 > 0 && aoUp2 > 0 && aoUp1 > 0)
            {
                UN++;
            }
            // 4 DN
            if (aoUp4 < 0 && aoUp3 < 0 && aoDown2 < 0 && aoDown1 < 0)
            {
                DN++;
            }

            //=== КОРЕКЦИЯ ===========================================================================================================

            if (_positionGuidB != Guid.Empty && Trade.GetPosition(_positionGuidB).State == PositionState.Closed)
            {
                _positionGuidB = Guid.Empty;
            }
            if (_positionGuidS != Guid.Empty && Trade.GetPosition(_positionGuidS).State == PositionState.Closed)
            {
                _positionGuidS = Guid.Empty;
            }
            // =======================================================================================================================
            //if (U0) Print("U0={0} UV={1} UN={2} MaxU={3} -- {4}",U0,UV,UN,MaxU,Bars[Bars.Range.To-1].Time);
            if (U0 && UV == 1 && UN == 1 && MaxU > 0.00005)
            {
                Print("U0={0} UV={1} UN={2} MaxU={3} -- {4}", U0, UV, UN, MaxU, Bars[Bars.Range.To - 1].Time);

                if (_positionGuidB == Guid.Empty)
                {
                    var vlR1 = Tools.Create <VerticalLine>();
                    vlR1.Color = Color.Red;
                    vlR1.Time  = Bars[Bars.Range.To - 1].Time;
                    var result2 = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 0.1, Instrument.Bid, -1, Stops.InPrice(frDownL - TP, null), null, null);
                    if (result2.IsSuccessful)
                    {
                        _positionGuidB = result2.Position.Id;
                    }
                }
            }
            //if (D0)  Print("D0={0} DV={1} DN={2} MaxD={3} -- {4}",D0,DV,DN,MaxD,Bars[Bars.Range.To-1].Time);
            if (D0 && DV == 1 && DN == 1 && MaxD < -0.00005)
            {
                Print("D0={0} DV={1} DN={2} MaxD={3} -- {4}", D0, DV, DN, MaxD, Bars[Bars.Range.To - 1].Time);

                if (_positionGuidS == Guid.Empty)
                {
                    var vlR2 = Tools.Create <VerticalLine>();
                    vlR2.Color = Color.Blue;
                    vlR2.Time  = Bars[Bars.Range.To - 1].Time;

                    var result2 = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 0.1, Instrument.Ask, -1, Stops.InPrice(frUpH + TP, null), null, null);
                    if (result2.IsSuccessful)
                    {
                        _positionGuidS = result2.Position.Id;
                    }
                }
            }

            if (_positionGuidB != Guid.Empty && frDown && frD != frDownL)
            {
                frD = frDownL;
                var result2 = Trade.UpdateMarketPosition(_positionGuidB, frDownL, null, null);
                if (result2.IsSuccessful)
                {
                    _positionGuidB = result2.Position.Id;
                }
            }

            if (_positionGuidS != Guid.Empty && frUp)
            {
                frU = frUpH;
                var result2 = Trade.UpdateMarketPosition(_positionGuidS, frUpH, null, null);
                if (result2.IsSuccessful)
                {
                    _positionGuidS = result2.Position.Id;
                }
            }

            // Закриття --------------------------------------------------

            /*if ( U0 && UV==2 && UN==1)  {
             *      if (_positionGuidB!=Guid.Empty)
             *         {  var result =Trade.CloseMarketPosition(_positionGuidB);
             *            if (result.IsSuccessful) _positionGuidB = Guid.Empty;}
             * }*/

            if (D0 || (aoDown4 > 0 && aoDown1 < 0) || (aoDown3 > 0 && aoDown1 < 0))
            {
                if (_positionGuidB != Guid.Empty)
                {
                    var result = Trade.CloseMarketPosition(_positionGuidB);
                    if (result.IsSuccessful)
                    {
                        _positionGuidB = Guid.Empty;
                    }
                }
            }

            /*
             *
             *    if ( D0 &&  DV==2 && DN==1)  {
             *            if (_positionGuidS!=Guid.Empty)
             *               {  var result =Trade.CloseMarketPosition(_positionGuidS);
             *                  if (result.IsSuccessful) _positionGuidS = Guid.Empty;}
             *
             * } */
            if (U0 || (aoUp4 < 0 && aoUp1 > 0) || (aoUp4 < 0 && aoUp1 > 0))
            {
                if (_positionGuidS != Guid.Empty)
                {
                    var result = Trade.CloseMarketPosition(_positionGuidS);
                    if (result.IsSuccessful)
                    {
                        _positionGuidS = Guid.Empty;
                    }
                }
            }
        }
コード例 #5
0
        protected override void NewBar()
        {
            O1    = Bars[Bars.Range.To - 1].Open;
            C1    = Bars[Bars.Range.To - 1].Close;
            H1    = Bars[Bars.Range.To - 1].High;
            L1    = Bars[Bars.Range.To - 1].Low;
            DTime = Bars[Bars.Range.To - 1].Time;

//=== КОРЕКЦИЯ ===========================================================================================================
            if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Closed)
            {
                posGuidBuy = Guid.Empty; LogU = false;
            }
            if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Closed)
            {
                posGuidSell = Guid.Empty; LogD = false;
            }
//=== Закрытие всех ордеров если пятница 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;
                    }
                }
            }
//======================================================================================================================================
            //Print("{0} - torg={1} LogU={2} LogD={3} Hour={4} Min={5}",DTime,torg,LogU,LogD,DTime.Hour,DTime.Minute);
            // Максимальне та мінімальне знячення за день - на H1 - періоді..
            if (DTime.Hour == 23 && DTime.Minute == 00)
            {
                LogU = true; LogD = true; torg = false;
                var highestIndex = Series.Highest(Bars.Range.To, 24, PriceMode.High);
                var highestPrice = Bars[highestIndex].High;
                U1 = highestPrice;
                var lowestIndex = Series.Lowest(Bars.Range.To, 24, PriceMode.Low);
                var lowestPrice = Bars[lowestIndex].Low;
                D1 = lowestPrice;
                // Різниця в пунктах між MAX-MIN
                Dt = (int)Math.Round((U1 - D1) * 100000, 0);
                // Малюємо горизонтальну лінію на рівнях
                Line1.Price = U1;
                Line1.Text  = string.Format("{0}", Dt);
                Line2.Price = D1;

                TPU = Math.Round(U1 + (U1 - D1) * 0.2353, 5);
                TPD = Math.Round(D1 - (U1 - D1) * 0.2353, 5);
            }

            if (DTime.Hour == 04 && DTime.Minute == 00 && LogU && LogD)
            {
                torg = true;
            }
            if (DTime.Hour == 20 && DTime.Minute == 00)
            {
                torg = false;
            }


//======================================================================================================================================
            if (C1 > U1 && O1 < U1)
            {
                zkU = Math.Abs((C1 - U1) * 100 / (C1 - O1));
            }
            if (O1 > D1 && C1 < D1)
            {
                zkD = Math.Abs((D1 - C1) * 100 / (C1 - O1));
            }
            if (C1 < U1)
            {
                zkU = 0;
            }
            if (O1 > U1)
            {
                zkU = 100;
            }
            if (C1 > D1)
            {
                zkD = 0;
            }
            if (O1 < D1)
            {
                zkD = 100;
            }
            //Print("zkU={0} zkD={1} {2} {3}",zkU,zkD,TPU,TPD);
//======================================================================================================================================
            if (LogU && C1 > U1)
            {
                LogU = false; Print("1 - {0}", _stoIndH1.SignalLine[Bars.Range.To - 1] > 80.0);
                if (_stoIndH1.SignalLine[Bars.Range.To - 1] > 80.0)
                {
                    Print("2");
                    zkU = Math.Abs((C1 - U1) * 100 / (C1 - O1));
                    Print("{0} zkU={1}", DTime, zkU);

                    if (torg && posGuidBuy == Guid.Empty && zkU > 20)
                    {
                        SLD = Math.Round(Bars[Bars.Range.To - 1].Close - 0.002, 5);
                        //var result=Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 0.1,Instrument.Ask,-1,Stops.InPips(200,TPU),null);
                        var result = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 0.1, Instrument.Ask, -1, Stops.InPrice(SLU, TPU), null);
                        if (result.IsSuccessful)
                        {
                            posGuidBuy = result.Position.Id;
                        }
                    }

                    var vline = Tools.Create <VerticalLine>();
                    vline.Color = Color.Red; vline.Width = 4;
                    vline.Time  = Bars[Bars.Range.To - 2].Time;
                }
            }
//======================================================================================================================================
            if (LogD && C1 < D1)
            {
                LogD = false; Print("3 - {0}", _stoIndH1.SignalLine[Bars.Range.To - 1] < 20.0);
                if (_stoIndH1.SignalLine[Bars.Range.To - 1] < 20.0)
                {
                    Print("2");
                    zkD = Math.Abs((D1 - C1) * 100 / (C1 - O1));
                    Print("{0} zkD={1}", DTime, zkD);


                    if (torg && posGuidSell == Guid.Empty && zkD > 20)
                    {
                        SLD = Math.Round(Bars[Bars.Range.To - 1].Close + 0.002, 5);
                        //var result=Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 0.1,Instrument.Bid,-1,Stops.InPips(200,TPU),null);
                        var result = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 0.1, Instrument.Bid, -1, Stops.InPrice(SLD, TPD), null);
                        if (result.IsSuccessful)
                        {
                            posGuidSell = result.Position.Id;
                        }
                    }

                    var vline = Tools.Create <VerticalLine>();
                    vline.Color = Color.Blue; vline.Width = 4;
                    vline.Time  = Bars[Bars.Range.To - 2].Time;
                }
            }


            Print("{0} - torg={1} LogU={2} LogD={3} Hour={4} Min={5} TPU={6} TPD={7} Stoh={8}", DTime, torg, LogU, LogD, DTime.Hour, DTime.Minute, TPU, TPD, _stoIndH1.SignalLine[Bars.Range.To - 1]);


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

            /*	if (_ftoInd.FisherSeries[Bars.Range.To-1]<_ftoInd.Ma1Series[Bars.Range.To-1] &&
             *                                 _ftoInd.FisherSeries[Bars.Range.To]>_ftoInd.Ma1Series[Bars.Range.To]) isFMU=true; else isFMU=false;
             *      if (_ftoInd.FisherSeries[Bars.Range.To-1]>_ftoInd.Ma1Series[Bars.Range.To-1] &&
             *                                 _ftoInd.FisherSeries[Bars.Range.To]<_ftoInd.Ma1Series[Bars.Range.To]) isFMD=true; else isFMD=false;
             *
             *
             * if(isFMU)
             *      {   if (posGuidBuy!=Guid.Empty && Trade.GetPosition(posGuidBuy).State==PositionState.Active)
             *                      {var res1 = Trade.CloseMarketPosition(posGuidBuy); if (res1.IsSuccessful) posGuidBuy = Guid.Empty;}  }
             *
             *      if(isFMD)
             *  {  if (posGuidSell!=Guid.Empty && Trade.GetPosition(posGuidSell).State==PositionState.Active)
             *             {var res3 = Trade.CloseMarketPosition(posGuidSell); if (res3.IsSuccessful) posGuidSell = Guid.Empty;}  }
             */
        }
コード例 #6
0
        protected override void NewBar()
        {
            DTime = Bars[Bars.Range.To - 1].Time;

            // Event occurs on every new bar
            _maInd1_1 = _ma1.SeriesMa[Bars.Range.To - 1];
            _maInd2_1 = _ma2.SeriesMa[Bars.Range.To - 1];
            _maInd3_1 = _ma3.SeriesMa[Bars.Range.To - 1];

            _maInd1_2 = _ma1.SeriesMa[Bars.Range.To - 2];
            _maInd2_2 = _ma2.SeriesMa[Bars.Range.To - 2];
            _maInd3_2 = _ma3.SeriesMa[Bars.Range.To - 2];

            _maInd1_3 = _ma1.SeriesMa[Bars.Range.To - 3];
            _maInd2_3 = _ma2.SeriesMa[Bars.Range.To - 3];
            _maInd3_3 = _ma3.SeriesMa[Bars.Range.To - 3];

            _maInd1_4 = _ma1.SeriesMa[Bars.Range.To - 4];
            _maInd2_4 = _ma2.SeriesMa[Bars.Range.To - 4];
            _maInd3_4 = _ma3.SeriesMa[Bars.Range.To - 4];

            _maInd200   = _ma200.SeriesMa[Bars.Range.To - 1];
            _maInd200_4 = _ma200.SeriesMa[Bars.Range.To - 4];

            if (_maInd200_4 > _maInd1_4 && _maInd200 > _maInd1_1)
            {
                rl = ((_maInd200_4 - _maInd1_4) < (_maInd200 - _maInd1_1));
            }
            else
            {
                rl = false;
            }
            if (_maInd200_4 < _maInd1_4 && _maInd200 < _maInd1_1)
            {
                rh = ((_maInd1_4 - _maInd200_4) < (_maInd1_1 - _maInd200));
            }
            else
            {
                rh = false;
            }
            //_maInd1,_maInd2,_maInd3,_maInd1_1,_maInd2_1,_maInd3_1,_maInd1_2,_maInd2_2,_maInd3_2,_maInd1_3,_maInd2_3,_maInd3_3,

            //_macdInd1 = _macd.SeriesSignal[Bars.Range.To-1];
            //_macdInd2 = _macd.SeriesSignal[Bars.Range.To-2];
            //_macdInd3 = _macd.SeriesSignal[Bars.Range.To-3];
            //_macdInd4 = _macd.SeriesSignal[Bars.Range.To-4];
            //_macdInd,_macdInd1,_macdInd2,_macdInd3

            sF = _ftoInd.FisherSeries[Bars.Range.To - 1];

//=== Определение уровня STOP ===========================================================================================================
            if (_frInd.TopSeries[Bars.Range.To - 5] > 0)
            {
                frUp = true; frUpH = Bars[Bars.Range.To - 5].High;
            }
            else
            {
                frUp = false;
            }
            if (_frInd.BottomSeries[Bars.Range.To - 5] > 0)
            {
                frDown = true; frDownL = Bars[Bars.Range.To - 5].Low;
            }
            else
            {
                frDown = false;
            }

//=== КОРЕКЦИЯ ===========================================================================================================
            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;
            }

//=== КОРЕКЦИЯ STOP ===========================================================================================================
            var posBuy  = Trade.GetPosition(posGuidBuy);
            var posSell = Trade.GetPosition(posGuidSell);

            if (frUp && posGuidSell != Guid.Empty && frUpH < (posSell.OpenPrice + 0.00200))
            {
                Trade.UpdateMarketPosition(posGuidSell, frUpH + Instrument.Spread, null, null);
            }
            if (frDown && posGuidBuy != Guid.Empty && frDownL > (posBuy.OpenPrice - 0.00200))
            {
                Trade.UpdateMarketPosition(posGuidBuy, frDownL - Instrument.Spread, null, null);
            }
//=== БЕЗУБЫТОК STOP ===========================================================================================================
//		      if (posGuidBuy!=Guid.Empty)  { var posBuy = Trade.GetPosition(posGuidBuy);
//				             Print("Buy Price={0} Pips{1}", posBuy.OpenPrice,posBuy.Pips);
//				             if(posBuy.Pips>100 && posBuy.StopLoss<posBuy.OpenPrice)
//								       Trade.UpdateMarketPosition(posGuidBuy, posBuy.OpenPrice, null, null); }
//		      if (posGuidSell!=Guid.Empty) { var posSell = Trade.GetPosition(posGuidSell);
//				             Print("Sell Price={0} Pips{1}", posSell.OpenPrice,posSell.Pips);
//				             if(posSell.Pips>100  && posSell.StopLoss>posSell.OpenPrice)
//								       Trade.UpdateMarketPosition(posGuidSell, posSell.OpenPrice, null, null); }

//  1
            if (_maInd3_1 > _maInd2_1 && _maInd2_1 > _maInd1_1)
            {
                L1 = true;
            }
            else
            {
                L1 = false;
            }
            if (_maInd3_4 > _maInd2_4 && _maInd2_4 > _maInd1_4)
            {
                L2 = false;
            }
            else
            {
                L2 = true;
            }

            if (_maInd1_1 > _maInd2_1 && _maInd2_1 > _maInd3_1)
            {
                H1 = true;
            }
            else
            {
                H1 = false;
            }
            if (_maInd1_4 > _maInd2_4 && _maInd2_4 > _maInd3_4)
            {
                H2 = false;
            }
            else
            {
                H2 = true;
            }

            if (posGuidBuy != Guid.Empty)
            {
                var pos       = Trade.GetPosition(posGuidBuy);
                var openTime  = pos.OpenTime;
                var openPrice = pos.OpenPrice;
                //			  Print("Buy Time : {0} - {1} = {2}",Bars[Bars.Range.To-1].Time.Hour,openTime.Hour,(Bars[Bars.Range.To-1].Time.Hour-openTime.Hour) );
                if (Bars[Bars.Range.To - 1].Time.Hour - openTime.Hour > 2 && openPrice > Bars[Bars.Range.To - 1].Close)
                {
                    var res = Trade.CloseMarketPosition(posGuidBuy);
                    if (res.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }

            if (posGuidSell != Guid.Empty)
            {
                var pos       = Trade.GetPosition(posGuidSell);
                var openTime  = pos.OpenTime;
                var openPrice = pos.OpenPrice;
                //			  Print("Buy Time : {0} - {1} = {2}",Bars[Bars.Range.To-1].Time.Hour,openTime.Hour,(Bars[Bars.Range.To-1].Time.Hour-openTime.Hour) );
                if (Bars[Bars.Range.To - 1].Time.Hour - openTime.Hour > 2 && Bars[Bars.Range.To - 1].Close > openPrice)
                {
                    var res = Trade.CloseMarketPosition(posGuidSell);
                    if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }


            if (!H1 && posGuidBuy != Guid.Empty)
            {
                var res = Trade.CloseMarketPosition(posGuidBuy);
                if (res.IsSuccessful)
                {
                    posGuidBuy = Guid.Empty;
                }
            }

            if (!L1 && posGuidSell != Guid.Empty)
            {
                var res = Trade.CloseMarketPosition(posGuidSell);
                if (res.IsSuccessful)
                {
                    posGuidSell = Guid.Empty;
                }
            }


            if (L1 && L2 && sF < 0 && _maInd200 > _maInd3_1)
            {
                var toolVerticalLine = Tools.Create <VerticalLine>();
                toolVerticalLine.Time  = Bars[Bars.Range.To - 1].Time;
                toolVerticalLine.Color = Color.Blue;
                if (posGuidSell == Guid.Empty)
                {
                    var result = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 0.1, Instrument.Ask, -1, Stops.InPrice(frUpH, null), null, null);
                    //	var result = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 0.1, Instrument.Ask, -1, Stops.InPips(200,null), null, null);
                    if (result.IsSuccessful)
                    {
                        posGuidSell = result.Position.Id;
                    }
                }
            }
//  2
            if (H1 && H2 && sF > 0 && _maInd200 < _maInd3_1)
            {
                var toolVerticalLine = Tools.Create <VerticalLine>();
                toolVerticalLine.Time  = Bars[Bars.Range.To - 1].Time;
                toolVerticalLine.Color = Color.Red;
                if (posGuidBuy == Guid.Empty)
                {
                    var result = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 0.1, Instrument.Bid, -1, Stops.InPrice(frDownL, null), null, null);
                    //var result = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 0.1, Instrument.Bid, -1, Stops.InPips(200,null), null, null);
                    if (result.IsSuccessful)
                    {
                        posGuidBuy = result.Position.Id;
                    }
                }
            }

//Print("{0} {1} {2} {3} {4} {5} {6} {7}",Bars[Bars.Range.To-1].Time,_maInd3_3,_maInd3_2,_maInd3_1,_maInd1_1,_maInd2_1,_macdInd1,sF);
//Print("{0} - {1} {2} {3} {4}",Bars[Bars.Range.To-1].Time, (_maInd1_1>_maInd2_1), (_maInd3_3>_maInd1_3), (_maInd3_1>_maInd2_1), sF );
            //Print("{0}",Bars[Bars.Range.To-1].Time);
            //Print("OK!");
        }
コード例 #7
0
        protected override void NewBar()
        {
            i++;
            // Event occurs on every new bar
            //    if (firstBar)
            //{
            //    var result = Trade.BuyStop(Instrument.Id, 0.1, Bars[Bars.Range.To-1].High+0.002);
            //  if (result.IsSuccessful) posGuid = result.Position.Id;
            // firstBar = false;
            //}

            //Print("{0} - Ask={1} Bid={2} - {3}",Bars[Bars.Range.To-1],Instrument.Ask,Instrument.Bid,Bars[Bars.Range.To-1].Time);

            if (firstBar)
            {
                firstBar = false;
                Print("Ask={0}  Point={1} PriceScale={2}", Instrument.Ask, Instrument.Point, Instrument.PriceScale);

                var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellStop, 0.1, Instrument.Ask - 0.001, 0, Stops.InPrice(Instrument.Bid + 0.002), null, null, null);
                if (result.IsSuccessful)
                {
                    posGuid = result.Position.Id;
                }
            }
            if (Trade.GetPosition(posGuid).State == PositionState.Closed)
            {
                var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellStop, 0.1, Instrument.Ask - 0.001, 0, Stops.InPrice(Instrument.Bid + 0.002), null, null, null);
                if (result.IsSuccessful)
                {
                    posGuid = result.Position.Id;
                }
            }

            Print("State={0} -- {1}", Trade.GetPosition(posGuid).State, Bars[Bars.Range.To - 1].Time);
            //if (i==20)
            //{
            //var res = Trade.UpdatePendingPosition(posGuid, 0.1, Bars[Bars.Range.To-1].High+0.002, null, null);
            //var res = Trade.UpdateMarketPosition(posGuid, Bars[Bars.Range.To-1].Low-0.003, null, "Added stoploss and takeprofit");
            //}
            //if (i>30)
            //{
            //  if (posGuid==Guid.Empty) return;
            //  var res = Trade.CancelPendingPosition(posGuid);
            //   if (res.IsSuccessful) posGuid = Guid.Empty;
            //}

            //if (i>20) {
            // if (posGuid!=Guid.Empty) {
            //var res = Trade.CloseMarketPosition(posGuid);
            //if (res.IsSuccessful) posGuid = Guid.Empty;
            //} }

// var pos = Trade.GetPosition(posGuid);
//        var state = pos.State;
            //Print("State={0}",state);
        }
コード例 #8
0
        protected override void NewBar()
        {
            _wprInd.ReInit();
            // ЗАКРИТТЯ ПОЗИЦІЙ !!!
            // ЗНИЗУ ВВЕРХ
            if (_awoInd.SeriesUp[Bars.Range.To - 3] < 0 && _awoInd.SeriesUp[Bars.Range.To - 2] > 0)
            {
                iU1 = Bars.Range.To; iU3 = Bars.Range.To - 3;
                var vr = Tools.Create <VerticalLine>(); vr.Color = Color.BlueViolet; vr.Time = Bars[iU1].Time;
                if (Trade.GetPosition(posGuidSell).State == PositionState.Active)
                {
                    var res = Trade.CloseMarketPosition(posGuidSell);
                    if (res.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
                if (Trade.GetPosition(posGuidSell).State == PositionState.Pending)
                {
                    var res1 = Trade.CancelPendingPosition(posGuidSell);
                    if (res1.IsSuccessful)
                    {
                        posGuidSell = Guid.Empty;
                    }
                }
            }
            // ЗВЕРХУ ВНИЗ
            if (_awoInd.SeriesDown[Bars.Range.To - 3] > 0 && _awoInd.SeriesDown[Bars.Range.To - 2] < 0)
            {
                iD1 = Bars.Range.To; iD3 = Bars.Range.To - 3;
                var vr = Tools.Create <VerticalLine>(); vr.Color = Color.Black; vr.Time = Bars[iD1].Time;
                if (Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                {
                    var res2 = Trade.CloseMarketPosition(posGuidBuy);
                    if (res2.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
                if (Trade.GetPosition(posGuidBuy).State == PositionState.Pending)
                {
                    var res3 = Trade.CancelPendingPosition(posGuidBuy);
                    if (res3.IsSuccessful)
                    {
                        posGuidBuy = Guid.Empty;
                    }
                }
            }

            //=== КОРЕКЦИЯ ===========================================================================================================
            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 (_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];            // Значення ZigZag
                zzi3 = zzi2;      zzi2 = zzi1;  zzi1 = Bars.Range.To - 1;                                       // Індекс свічок
                //  Індекси свічок в Куті перегибу

                // ПИК ВВЕРХУ - закрыть покупку
                if (zz3 < zz2 && zz2 > zz1)
                {
                    zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    if (posGuidBuy != Guid.Empty && Trade.GetPosition(posGuidBuy).State == PositionState.Active)
                    {
                        var res = Trade.CloseMarketPosition(posGuidBuy); if (res.IsSuccessful)
                        {
                            posGuidBuy = Guid.Empty;
                        }
                    }
                }
                // ПИК ВНИЗУ - закрыть продажа
                if (zz3 > zz2 && zz2 < zz1)
                {
                    zzd3 = zzd2; zzd2 = zzd1; zzd1 = zzi2;
                    if (posGuidSell != Guid.Empty && Trade.GetPosition(posGuidSell).State == PositionState.Active)
                    {
                        var res = Trade.CloseMarketPosition(posGuidSell); if (res.IsSuccessful)
                        {
                            posGuidSell = Guid.Empty;
                        }
                    }
                }

//============== Тренд ВВЕРХ - індекси свічок zzd1-3  ====================================================
                if (Bars[zzd2].High > Bars[zzd1].High &&
                    Bars[zzd2].High > Bars[zzd3].High &&
                    Bars[zzd1].High > Bars[zzd3].High &&
                    (Bars[zzd2].High - Bars[zzd1].Low) > (Bars[zzd2].High - Bars[zzd3].Low) * 0.23 &&
                    (Bars[zzd2].High - Bars[zzd1].Low) < (Bars[zzd2].High - Bars[zzd3].Low) * 0.8
                    )
                {                       //vr.Time=Bars[zzd1].Time; vb.Time=Bars[zzd2].Time; vg.Time=Bars[zzd3].Time;
                    Print("{0}  Buy={1} iU={2} zzd3={3} zzd2={4}", Bars[Bars.Range.To - 1].Time, posGuidBuy, iU1, zzd3, zzd2);
                    //var vr=Tools.Create<VerticalLine>(); vr.Color=Color.Red; vr.Time=Bars[zzd1].Time;
                    if (posGuidBuy == Guid.Empty && zzd3 < iU1 && zzd2 > iU3)
                    {
                        var result = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.BuyStop, 0.1, Bars[zzd2].High, 0, Stops.InPrice(Bars[zzd3].Low, null), null, null, null);
                        //var result = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Buy, 0.1,Instrument.Bid, -1, Stops.InPrice(Bars[zzd3].Low,null), null, null);
                        if (result.IsSuccessful)
                        {
                            posGuidBuy = result.Position.Id;
                        }
                    }
                }

//============= Тренд ВНИЗ - індекси свічок zzd1  ==========================================================
                if (Bars[zzd3].Low > Bars[zzd2].Low &&
                    Bars[zzd1].Low > Bars[zzd2].Low &&
                    Bars[zzd3].Low > Bars[zzd1].Low &&
                    (Bars[zzd1].High - Bars[zzd2].Low) > (Bars[zzd3].High - Bars[zzd2].Low) * 0.23 &&
                    (Bars[zzd1].High - Bars[zzd2].Low) < (Bars[zzd3].High - Bars[zzd2].Low) * 0.8
                    )
                {                   // vr.Time=Bars[zzd1].Time; vb.Time=Bars[zzd2].Time; vg.Time=Bars[zzd3].Time;
                    // var vr=Tools.Create<VerticalLine>(); vr.Color=Color.Blue; vr.Time=Bars[zzd1].Time;
                    Print("{0}  Sell={1} iD={2} zzd3={3} zzd2={4} ", Bars[Bars.Range.To - 1].Time, posGuidSell, iD1, zzd3, zzd2);
                    if (posGuidSell == Guid.Empty && zzd3 < iD1 && zzd2 > iD3)
                    {
                        var result1 = Trade.OpenPendingPosition(Instrument.Id, ExecutionRule.SellStop, 0.1, Bars[zzd2].Low, 0, Stops.InPrice(Bars[zzd3].High, null), null, null, null);
                        //var result1 = Trade.OpenMarketPosition(Instrument.Id, ExecutionRule.Sell, 0.1,Instrument.Ask, -1, Stops.InPrice(Bars[zzd3].High,null), null, null);
                        if (result1.IsSuccessful)
                        {
                            posGuidSell = result1.Position.Id;
                            //XXPrint("{0} ",Bars[Bars.Range.To-1].Time,);
                        }
                    }
                }
            }
        }
コード例 #9
0
ファイル: BolaMas.cs プロジェクト: ivan-petrov-ubk/CS
        protected void setPendingBuyOrder()
        {
            if (listOfBuyStop.Count >= MaxQuantityOfBuyOrders)
            {
                return;
            }

            double OP         = CalculateOpenPrice(ExecutionRule.BuyStop);
            double CurrentAsk = Instrument.Ask;
            double CurrentBid = Instrument.Bid;

            if (OP <= (CurrentAsk + 2 * Instrument.Spread))
            {
                OP = Math.Round(CurrentAsk + 3.14 * Instrument.Spread, Instrument.PriceScale);
            }

            double SL = CalculateSL(ExecutionRule.BuyStop, OP);

            if (OP <= SL)
            {
                SL = (double)Math.Round(OP - staticSL * Instrument.Point, Instrument.PriceScale);
            }
            double TP = CalculateTP(ExecutionRule.BuyStop, OP);

            if (CurrentAsk <= SL)
            {
                SL = (double)Math.Round(CurrentAsk - (CurrentAsk - SL) - 3.14 * Instrument.Spread, Instrument.PriceScale);
            }

            if (TP <= OP)
            {
                TP = (double)Math.Round(OP + (OP - TP) + 3.14 * Instrument.Spread, Instrument.PriceScale);
            }


            Stops SLTP = Stops.InPrice(
                SL,
                TP
                );


            int         attempt = 0;
            TradeResult tR      = null;

            do
            {
                attempt++;
                tR = Trade.OpenPendingPosition(Instrument.Id,
                                               ExecutionRule.BuyStop,
                                               vol,
                                               OP,
                                               -1,
                                               SLTP,
                                               Bars[_CIndex].Time.AddDays(90.0),
                                               "buyStop on bar signal",
                                               magicNumber);
            }while ((tR == null? true: !tR.IsSuccessful) && attempt < 10);

            if ((tR == null? true: !tR.IsSuccessful))
            {
                XXPrint("[{2}>>]{1} Cann't Send  BuyStop order on Price {3} at Bid: {0} ",
                        Instrument.Bid, DateTime.Now, Instrument.Name, OP);
            }
            else
            {
                TradeResult ntR = null;
                do
                {
                    attempt++;
                    ntR = Trade.UpdatePendingPosition(tR.Position.Id,
                                                      vol,
                                                      OP,
                                                      -1,
                                                      Bars[_CIndex].Time.AddDays(90.0),
                                                      SL,
                                                      TP,
                                                      "buyStop set SL,TP");
                }while ((ntR == null? true: !ntR.IsSuccessful) && attempt < 10);

                if (ntR == null? true: !ntR.IsSuccessful)
                {
                    XXPrint("[{2}>>]{1} Cann't modify  BuyStop order on Price {3} at Bid: {0} ",
                            Instrument.Bid, DateTime.Now, Instrument.Name, OP);

                    attempt = 0;
                    do
                    {
                        attempt++;
                        ntR = Trade.CancelPendingPosition(tR.Position.Id);
                    }while((ntR == null? true: !ntR.IsSuccessful) && attempt < 10);

                    if (ntR == null? true: !ntR.IsSuccessful)
                    {
                        XXPrint("[*EC*{2}>>]{1} Cann't cancel strange BuyStop order on Price {3} at Bid: {0} ",
                                Instrument.Bid, DateTime.Now, Instrument.Name, OP);
                    }
                }
                else
                {
                    listOfBuyStop.Add(ntR.Position.Id);
                    XXPrint("[{3}>>]{2} Sended successfully BuyStop order for position {0} at Price: {1} ",
                            tR.Position.Id, tR.Position.OpenPrice, Bars[_CIndex].Time, Instrument.Name);
                }
            }
        }