Ajuda ao um novato em programação

Created at 23 May 2023, 05:00
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

Ajuda ao um novato em programação
23 May 2023, 05:00


Sou novato em programação. E gostaria de ajuda para entender porque o bot não executa as ordens. Quando coloco em onTick ele abre um monte de ordens. Mas no onBar ele não abre posições. Obrigado pela ajuda

 [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 = 200)]
        public int PeriodoAZUL { get; set; }

        private SimpleMovingAverage AZUL;
        private double lastBuyClose;
        private 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;
            Print("BullsxBears");
        }

        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(0) < AZUL.Result.Last(0) 
            && Bars.ClosePrices.Last(0) < Bars.OpenPrices.Last(0))
            {
                Print("C");
                ExecuteMarketOrder(TradeType.Buy, Symbol, Lote);
            }

            // Condição de venda 01
            if (Bars.ClosePrices.Last(0) > AZUL.Result.Last(0) 
            && Bars.ClosePrices.Last(0) > Bars.OpenPrices.Last(0))
            {
               Print("V");
                ExecuteMarketOrder(TradeType.Sell, Symbol, Lote);
                // ExecuteMarketOrder(TradeType.Buy, Symbol, Volume, cBotLabel, StopLoss, TakeProfit);
            }

            // Fechamento COMPRA
            if (positionCompra != null 
            && Bars.ClosePrices.Last(0) > AZUL.Result.Last(0))
            //ClosePositionsAsync
            {
                ClosePosition(positionCompra);
                //(positionCompra.GrossProfit > 0)
            }

            // Fechamento Venda
            if (positionVenda != null 
            && Bars.ClosePrices.Last(0) < AZUL.Result.Last(0))
            
            {
               ClosePosition(positionVenda);
            } 
        }
    }
}


@BullsxBears
Replies

PanagiotisChar
23 May 2023, 08:57

Hi there,

Bars.ClosePrices.Last(0) and Bars.OpenPrices.Last(0) are always equal when the new bar is opened, since they represent the values of the current value. Try using Bars.ClosePrices.Last(1) and Bars.OpenPrices.Last(1) instead

Aieden Technologies

Need help? Join us on Telegram

Need premium support? Trade with us

 


@PanagiotisChar

BullsxBears
23 May 2023, 15:18 ( Updated at: 25 May 2023, 00:20 )

RE:

PanagiotisChar said:

Hi there,

Bars.ClosePrices.Last(0) and Bars.OpenPrices.Last(0) are always equal when the new bar is opened, since they represent the values of the current value. Try using Bars.ClosePrices.Last(1) and Bars.OpenPrices.Last(1) instead

Aieden Technologies

Need help? Join us on Telegram

Need premium support? Trade with us

 

Muito obrigado pela ajuda! Principalmente pela rapidez da resposta.

Ainda estou aprendendo a programar. E quero aprender cada vez mais.

Gostaria, se possível que me ajudasse em outras duas questões:

1º Gostaria de somente realizar nova venda acima da última venda realizada. Somente quando uma nova barra de alta se formar e  fechar acima da última compra. Estou operando contra a tendência, buscando o retorno a média.

2º As ordens não estão sendo fechadas ao cruzar a média (SMA). Como posso fazer para fechar todas as ordens quando fechar abaixo da média ou fechar somente as que estão no lucro?

Novamente, muito obrigado!


@BullsxBears