Replies

MinMin
17 Dec 2018, 16:25

RE:

Panagiotis Charalampous said:

Hi vancong140293,

Try changing your condition to the following

if (Symbol.Ask == targetprice + 0.02 && Positions.Find(label, Symbol, TradeType.Sell) == null)

Best Regards,

Panagiotis

Sorry I was missing ")"  when i copy . But I used the same code like you and the problem happend!


@MinMin

MinMin
01 Aug 2018, 15:17

RE:
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SampleTrendcBot : Robot
    {

        [Parameter("MA Type")]
        public MovingAverageType MAType { get; set; }

        [Parameter("Open")]
        public DataSeries SourceSeries { get; set; }
//Chose Open only
        [Parameter("Close")]
        public DataSeries SourceSeriest { get; set; }

        [Parameter("PeriodsAR", DefaultValue = 50)]
        public int PeriodsAR { get; set; }
        [Parameter("PeriodsRSI", DefaultValue = 14)]
        public int PeriodsRSI { get; set; }

        [Parameter("Slow Periods", DefaultValue = 1)]
        public int SlowPeriods { get; set; }

        [Parameter("Fast Periods", DefaultValue = 1)]
        public int FastPeriods { get; set; }

        [Parameter("Quantity (Lots)", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        private MovingAverage openMa;
        private MovingAverage closeMa;
        private const string label = "Sample Trend cBot";
        private AverageTrueRange AverageTR;
        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            openMa = Indicators.MovingAverage(SourceSeries, FastPeriods, MAType);
            closeMa = Indicators.MovingAverage(SourceSeriest, SlowPeriods, MAType);
            AverageTR = Indicators.AverageTrueRange(PeriodsAR, MAType);
            rsi = Indicators.RelativeStrengthIndex(SourceSeriest, PeriodsRSI);
        }

        protected override void OnTick()
        {
            var longPosition = Positions.Find(label, Symbol, TradeType.Buy);
            var shortPosition = Positions.Find(label, Symbol, TradeType.Sell);
            var SoLenh = Positions.Count(x => x.SymbolCode == Symbol.Code);
            var currentOpenMa = openMa.Result.Last(0);
            var currentCloseMa = closeMa.Result.Last(0);
            var previousOpenMa = openMa.Result.Last(1);
            var previousCloseMa = closeMa.Result.Last(1);
            var previousOpenMa1 = openMa.Result.Last(2);
            var previousCloseMa1 = closeMa.Result.Last(2);
            var KhoangCach = AverageTR.Result.Last(1);
            var RSI = rsi.Result.Last(1);

            if ((RSI > 65 && ((previousOpenMa1 < previousCloseMa1 && previousOpenMa < previousCloseMa && currentOpenMa > previousCloseMa && currentCloseMa < previousOpenMa && ((previousCloseMa1 - previousOpenMa1) > (previousCloseMa - previousOpenMa)) && Math.Abs(currentCloseMa - currentOpenMa) > KhoangCach && Math.Abs(previousCloseMa - previousOpenMa) < (0.5 * KhoangCach)) || (Math.Abs(currentCloseMa - currentOpenMa) > KhoangCach && Math.Abs(previousCloseMa1 - previousOpenMa1) > KhoangCach && Math.Abs(previousCloseMa - previousOpenMa) < (0.1 * KhoangCach) && previousOpenMa1 < previousCloseMa1 && currentCloseMa < currentOpenMa))) && shortPosition == null)
            {
                Print("1");
                Print(longPosition);
                Print("bien long");
                Print(shortPosition);
                Print("bien short");
                if (longPosition != null)
                {
                    Print("2");
                    ClosePosition(longPosition);
                    Print("3");
                }
                Print("4");
                ExecuteMarketOrder(TradeType.Sell, Symbol, VolumeInUnits, label);
                Print(shortPosition);
                Print("End test 1");
            }
            else if ((RSI < 35 && ((previousOpenMa1 > previousCloseMa1 && previousOpenMa > previousCloseMa && currentOpenMa < previousCloseMa && currentCloseMa > previousOpenMa && (Math.Abs(previousCloseMa1 - previousOpenMa1) > Math.Abs(previousCloseMa - previousOpenMa)) && Math.Abs(currentCloseMa - currentOpenMa) > KhoangCach && Math.Abs(previousCloseMa - previousOpenMa) < (0.5 * KhoangCach)) || (Math.Abs(currentCloseMa - currentOpenMa) > KhoangCach && Math.Abs(previousCloseMa1 - previousOpenMa1) > KhoangCach && Math.Abs(previousOpenMa - previousCloseMa) < (0.1 * KhoangCach) && previousOpenMa1 > previousCloseMa1 && currentCloseMa > currentOpenMa))) && longPosition == null)
            {
                Print("a");
                Print(longPosition);
                Print("bien longa");
                Print(shortPosition);
                Print("bien shorta");
                if (shortPosition != null)
                {
                    Print("test b");
                    ClosePosition(shortPosition);
                    Print("test c");
                }
                Print("test d");
                ExecuteMarketOrder(TradeType.Buy, Symbol, VolumeInUnits, label);
                Print(shortPosition);
                Print("End Test 2");
            }
            if (RSI < 30 && shortPosition != null)
            {
                Print("test a1");
                ClosePosition(shortPosition);
                Print("test a2");
            }
            else if (RSI > 70 && longPosition != null)
            {
                Print("test b1");
                ClosePosition(longPosition);
                Print("test b2");
            }
            foreach (var position in Positions)
            {
                if (position.NetProfit < -4)
                {
                    Print("C1");
                    ClosePosition(position);
                }
            }
        }

        private long VolumeInUnits
        {
            get { return Symbol.QuantityToVolume(Quantity); }
        }
    }
}

It run perfectly creat orders and close them but after few hours maybe more, this problem happened and it stop. I hope you can help!

Thanks

 


@MinMin

MinMin
01 Aug 2018, 10:47

RE:

Panagiotis Charalampous said:

Hi vancong140293,

If the method returns null, it means there is no Position with such label for that Symbol.

Best Regards,

Panagioti

Hi,

You see there is a Position have been created before:

31/07/2018 21:48:56.432 | New cBot, EURGBP, m1 | Executing Market Order to Sell 6000 EURGBP
31/07/2018 21:48:57.229 | New cBot, EURGBP, m1 | → Executing Market Order to Sell 6000 EURGBP SUCCEEDED

I think Positions.Find must find to this position which just have been created?

 

Thanks,


@MinMin