Não fecha as ordens

Created at 25 May 2023, 04:25
How’s your experience with the cTrader Platform?
Your feedback is crucial to cTrader's development. Please take a few seconds to share your opinion and help us improve your trading experience. Thanks!
BU

BullsxBears

Joined 17.02.2021

Não fecha as ordens
25 May 2023, 04:25


Sou novo na área de programação, principalmente em bots. Escrevi esse código para aprender e testar uma estratégia bem simples. Mas as ordens não fecham de forma alguma. Nem todas as ordens, nem somente as que estão no lucro. Não sei o que pode estar acontecendo. Me ajudem, por favor!

 


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 Teste04 : Robot
    {
        [Parameter("Val Lote", DefaultValue = 0.01)]
        public double Lote { get; set; }

        [Parameter("Take Proft", DefaultValue = 0)]
        public double TakeProfit { get; set; }

        [Parameter("Stop Loss", DefaultValue = 0)]
        public double StopLoss { get; set; }

        [Parameter("Source")]
        public DataSeries Source { get; set; }

        [Parameter("AZUL:", DefaultValue =20)]
        public int PeriodoAZUL { get; set; }

        public SimpleMovingAverage AZUL;
        public double lastBuyClose;
        public double lastSellClose;
              
        protected override void OnStart()
        {
            Lote = Lote * Symbol.LotSize;
            AZUL = Indicators.SimpleMovingAverage(Source, PeriodoAZUL);
            lastBuyClose = double.MinValue; // Inicializa com um valor muito baixo
            lastSellClose=double.MinValue;
            
                      
            
        }

        protected override void OnTick()
        
        {
        
        }
        protected override void OnBar()
        {
         var positionCompra = Positions.Find("COMPRA", Symbol, TradeType.Buy);
         var positionVenda = Positions.Find("VENDA", Symbol, TradeType.Sell);
         
            

            // Condição de compra 01
            if (Bars.ClosePrices.Last(1) < AZUL.Result.Last(1) 
            && Bars.ClosePrices.Last(1) < Bars.OpenPrices.Last(1))
          
           
            {
               if (positionCompra == null || Bars.ClosePrices.Last(1) < lastBuyClose)
               {
               Print("C");
                ExecuteMarketOrder(TradeType.Buy, Symbol, Lote);
                Chart.DrawIcon(Bars.OpenTimes.LastValue.ToString(), ChartIconType.UpArrow, Bars.OpenTimes.Last(1), Bars.LowPrices.Last(1), Color.Blue);
            }
            }

            // Condição de venda 01
             
            if (Bars.ClosePrices.Last(1) > AZUL.Result.Last(1)
            && Bars.ClosePrices.Last(1) > Bars.OpenPrices.Last(1))
           
            
            {
               if (positionVenda == null || Bars.ClosePrices.Last(1) > lastSellClose)
             {
               Print("V");
                ExecuteMarketOrder(TradeType.Sell, Symbol, Lote);
                Chart.DrawIcon(Bars.OpenTimes.LastValue.ToString(), ChartIconType.DownArrow, Bars.OpenTimes.Last(1), Bars.HighPrices.Last(1), Color.Red);
            }
            }
           // Fechamento das posições de compra
    if (positionCompra != null && positionCompra.GrossProfit > 0 && (Bars.ClosePrices.Last(1) > AZUL.Result.Last(1)))
    {
        ClosePositionAsync(positionCompra);
        Print("fechando a compra" );
    }

    // Fechamento das posições de venda
    if (positionVenda != null && positionVenda.GrossProfit > 0 && (Bars.ClosePrices.Last(1) < AZUL.Result.Last(1)))
    {
        ClosePositionAsync(positionVenda);
        Print("fechando a venda");
    }
            } 
        }
    }


@BullsxBears
Replies

PanagiotisChar
25 May 2023, 08:12

Hi there,

Your problem is here

         var positionCompra = Positions.Find("COMPRA", Symbol, TradeType.Buy);
         var positionVenda = Positions.Find("VENDA", Symbol, TradeType.Sell);

You are searching for a position using a label but you never define a label on execution

ExecuteMarketOrder(TradeType.Sell, Symbol, Lote);

Aieden Technologies

Need help? Join us on Telegram

Need premium support? Trade with us

 


@PanagiotisChar