Trail Stop Loss don't work
            
                 07 Apr 2020, 18:35
            
                    
Hello! my program generates random symbols.
I wanted to put a trail stop loss that started at a certain distance.
The program works and generates random symbols and opens buy or sell positions depending on the conditions. Now I have entered the trail stop loss, this is the part of the program.
The problem is that trail stop loss doesn't work
        [Parameter("Stop Loss", DefaultValue = 5)]
        public double StopLoss { get; set; }
        [Parameter("Trigger When Gaining", DefaultValue = 1)]
        public double TriggerWhenGaining { get; set; }
        [Parameter("Trailing Stop Loss Distance", DefaultValue = 1)]
        public double TrailingStopLossDistance { get; set; }
        [Parameter("Highest Gain", DefaultValue = 1)]
        public double _highestGain { get; set; }
private bool _isTrailing;
thanks
this is the part of program
 ExecuteMarketOrder(TradeType.Sell, EURUSD, 20000, "myLabel", StopLoss, null);
                                var position1 = Positions.Find("myLabel", EURUSD);
                                if (!_isTrailing && position1.Pips >= TriggerWhenGaining)
                                {
                                    _isTrailing = true;
                                }
                                if (_isTrailing && _highestGain < position1.Pips)
                                {
                                    var newSLprice1 = symbol.Bid + (symbol.PipSize * TrailingStopLossDistance);
                                    if (newSLprice1 > position1.StopLoss)
                                    {
                                        ModifyPosition(position1, newSLprice1, null);
                                    }
                                    _highestGain = position1.Pips;
                                }
                                System.Threading.Thread.Sleep(300000)
Replies
                     luca.tocchi
                     08 Apr 2020, 18:10
                                    
RE:
PanagiotisCharalampous ha detto:
Ciao Luca,
Controlla questa condizione
if (newSLprice1 > position1.StopLoss)Se si sta dietro una posizione di vendita SL allora la nuova SL dovrebbe essere inferiore, non superiore.
Migliori saluti
Panagiotis
I did this test program, but the stop loss is not changed, it remains at -15 pips
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class provatrail : Robot
    {
        [Parameter("Stop Loss", DefaultValue = 15)]
        public double StopLoss { get; set; }
        [Parameter("Trigger When Gaining", DefaultValue = 1)]
        public double TriggerWhenGaining { get; set; }
        [Parameter("Trailing Stop Loss Distance", DefaultValue = 1)]
        public double TrailingStopLossDistance { get; set; }
        private double _highestGain;
        private bool _isTrailing;
        protected override void OnStart()
        {
            ExecuteMarketOrder(TradeType.Sell, Symbol, 20000, "Miaposizione", StopLoss, null);
            var position1 = Positions.Find("Miaposizione");
            _highestGain = Positions[0].Pips;
            if (!_isTrailing && position1.Pips >= TriggerWhenGaining)
            {
                _isTrailing = true;
            }
            if (_isTrailing && _highestGain < position1.Pips)
            {
                var newSLprice1 = Symbol.Bid + (Symbol.PipSize * TrailingStopLossDistance);
                if (newSLprice1 < position1.StopLoss)
                {
                    ModifyPosition(position1, newSLprice1, null);
                }
                _highestGain = position1.Pips;
            }
        }
    }
}
@luca.tocchi
                     PanagiotisCharalampous
                     09 Apr 2020, 08:18
                                    
Hi Luca,
The code runs only on start. This is why it does not change. You need to put the login in OnTick().
Best Regards,
Panagiotis
@PanagiotisCharalampous
                     luca.tocchi
                     09 Apr 2020, 12:07
                                    
RE:
PanagiotisCharalampous ha detto:
Ciao Luca,
Il codice viene eseguito solo all'avvio. Questo è il motivo per cui non cambia. È necessario inserire l'account di accesso in OnTick().
Migliori saluti
Panagiotis
ok i did this, adding the multi symbol.
but it still doesn't work, I miss it so little but I don't understand the mistake
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class trailingstoplossexample1 : Robot
    {
        [Parameter("Stop Loss", DefaultValue = 15)]
        public double StopLoss { get; set; }
        [Parameter("Trigger When Gaining", DefaultValue = 1)]
        public double TriggerWhenGaining { get; set; }
        [Parameter("Trailing Stop Loss Distance", DefaultValue = 1)]
        public double TrailingStopLossDistance { get; set; }
        private double _highestGain;
        private bool _isTrailing;
        private Random random = new Random();
        protected override void OnStart()
        {
            string EURUSD = Symbols[random.Next(Symbols.Count)];
            Symbols.GetSymbol("EURUSD");
            Print(EURUSD);
            var symbol = MarketData.GetSymbol(EURUSD);
            ExecuteMarketOrder(TradeType.Sell, EURUSD, 20000, "Miaposizione", StopLoss, null);
            _highestGain = Positions[0].Pips;
        }
        protected override void OnTick()
        {
            var position1 = Positions.Find("Miaposizione");
            if (!_isTrailing && position1.Pips >= TriggerWhenGaining)
            {
                _isTrailing = true;
            }
            if (_isTrailing && _highestGain < position1.Pips)
            {
                var newSLprice1 = Symbol.Bid + (Symbol.PipSize * TrailingStopLossDistance);
                if (newSLprice1 < position1.StopLoss)
                {
                    ModifyPosition(position1, newSLprice1, null);
                }
                _highestGain = position1.Pips;
            }
        }
    }
}
@luca.tocchi
                     PanagiotisCharalampous
                     09 Apr 2020, 12:20
                                    
Hi Luca,
You seem to trade on another symbol but you use the values of the chart's symbol to calculate your trailing stop loss. That is obviously wrong.
Best Regards,
Panagiotis
@PanagiotisCharalampous
                     luca.tocchi
                     09 Apr 2020, 12:24
                                    
RE:
PanagiotisCharalampous ha detto:
Ciao Luca,
Ti sembra di scambiare su un altro simbolo, ma si utilizzano i valori del simbolo del grafico per calcolare il trailing stop loss. Questo è ovviamente sbagliato.
Migliori saluti
Panagiotis
How can I solve the problem?
sorry but I'm learning to program
@luca.tocchi
                     luca.tocchi
                     09 Apr 2020, 12:24
                                    
RE:
PanagiotisCharalampous ha detto:
Ciao Luca,
Ti sembra di scambiare su un altro simbolo, ma si utilizzano i valori del simbolo del grafico per calcolare il trailing stop loss. Questo è ovviamente sbagliato.
Migliori saluti
Panagiotis
How can I solve the problem?
sorry but I'm learning to program
@luca.tocchi
                     PanagiotisCharalampous
                     09 Apr 2020, 12:29
                                    
Hi Luca,
Save the symbol you use in a global variable and use it for the calculation of your trailing stop variables.
Best Regards,
Panagiotis
@PanagiotisCharalampous
                     luca.tocchi
                     09 Apr 2020, 12:30
                                    
RE:
PanagiotisCharalampous ha detto:
Ciao Luca,
Salvare il simbolo utilizzato in una variabile globale e utilizzarlo per il calcolo delle variabili di arresto finali.
Migliori saluti
Panagiotis
thanks for the advice and for your patience
@luca.tocchi

PanagiotisCharalampous
08 Apr 2020, 08:25
Hi Luca,
Check this condition
If you are trailing a sell position SL then the new SL should be lower, not higher.
Best Regards,
Panagiotis
Join us on Telegram
@PanagiotisCharalampous