ATR based TP
            
                 29 Mar 2014, 21:02
            
                    
Hello Everyone,
I am new to the forum and to C# as well as cTrader coding but am looking forward to advancing my skills by making small cBots.
I have been editing the Sample MA cBot and so far have added a TP, SL, and modified the way it takes trades. However, I am also trying to add the option of a ATR based TP.
So far I have:
        [Parameter("Enable ATR based TP", DefaultValue = false)]
        public bool enableATR { get; set; }
        [Parameter("ATR Period", DefaultValue = 14)]
        public int ATRperiod { get; set; }
        private MovingAverage slowMa;
        private MovingAverage fastMa;
        private AverageTrueRange atr;
        private const string label = "Sample Trend cBot";
        private int Profit;
        protected override void OnStart()
        {
            fastMa = Indicators.MovingAverage(SourceSeriesMA, FastPeriods, MAType);
            slowMa = Indicators.MovingAverage(SourceSeriesMA, SlowPeriods, MAType);
            atr = Indicators.AverageTrueRange(ATRperiod, MAType);
        }
        protected override void OnBar()
        {
            var longPosition = Positions.Find(label, Symbol, TradeType.Buy);
            var shortPosition = Positions.Find(label, Symbol, TradeType.Sell);
            var currentSlowMa = slowMa.Result.Last(0);
            var currentFastMa = fastMa.Result.Last(0);
            var previousSlowMa = slowMa.Result.Last(1);
            var previousFastMa = fastMa.Result.Last(1);
            if (enableATR = true)
            {
                Profit = (int)atr.Result.LastValue * 10000;
                Print = (Profit);
            }
            else
            {
                Profit = TakeProfit;
            }
However it does not seem to work for whatever reason. Also if enableATR is set to no, it still somehow displays the results as if it were set to yes.
I am rather confused. I would very much appreciate the help.
Also, are there any guides I should read to further improve my cAlgo skills? C# guides?
Thank you very much,
David
Replies
                     Tempestshade
                     29 Mar 2014, 23:23
                                    
Another question for you all,
Again as above, I have been modifying the same Trend sample EA.
I have modified so it works on new bars only and was wondering why my EA isn't taking a new trade every time the signal is still valid? For code I have:
            if (previousSlowMa > previousFastMa && currentSlowMa <= currentFastMa)
            {
                ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, label, StopLoss, Profit);
            }
            else if (previousSlowMa < previousFastMa && currentSlowMa >= currentFastMa)
            {
                ExecuteMarketOrder(TradeType.Sell, Symbol, Volume, label, StopLoss, Profit);
            }
I am probably missing something when it comes to the logic of the trades but for the life of me can't figure it out. I don't want to get rid of the functionality that when the MAs cross a trade is opened, but I also want it to keep 'stacking' trades in the direction of the trend.
I imagine if I added it would work:
if (currentSlowMa <= currentFastMa)
{
 ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, label, StopLoss, Profit);
}
else if 
*repeat for sells
}
I am going to try it, but would still like some input.
Thanks!
@Tempestshade
                     Tempestshade
                     29 Mar 2014, 23:30
                                    
RE:
Tempestshade said:
if (currentSlowMa <= currentFastMa) { ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, label, StopLoss, Profit); } else if *repeat for sells }
That ended up working! On to my next project.
I am looking to add a close on bar open as well. However, my code doesn't seem to want to compile for whatever reason.
            var positions = Positions.FindAll(label);
            foreach (var position in positions)
            {
                if (position.Pips >= Profit)
                {
                    ClosePosition(position.Volume);
                }
                if (position.Pips <= StopLoss)
                {
                    ClosePosition(position.Volume);
                }
            }
I get the errors : Error CS1502: The best overloaded method match for 'cAlgo.API.Robot.ClosePosition(cAlgo.API.Position)' has some invalid arguments
What exactly is causing this?
Thank you,
David
@Tempestshade
                     AimHigher
                     31 Mar 2014, 01:08
                                    
/api/reference/robot/closeposition-8635
ClosePosition(position, position.Volume);
or to close the entire position without specifying volume
ClosePosition(position);
@AimHigher

modarkat
29 Mar 2014, 21:53
instead of
you need to write
@modarkat