The cBot is not entering trades.
The cBot is not entering trades.
01 Mar 2024, 18:01
Hi, I'm seeking help with my cBot. Apparently, it is not entering any trades, and I don't know why. I would also like to ask how to determine the timeframe the cBot is using or, specifically, what timeframe (the one that i am looking at?)the indicator has. Here is my cBot:
//#reference: ..\Indicators\Indicatorbbb.algo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
public class BOTbbb : Robot
{
private Indicatorbbb Meini;
[Parameter("Volume (Units)", DefaultValue = 10000, MinValue = 0)]
public double VolumeInUnits { get; set; }
[Parameter("Stop Loss (pips)", DefaultValue = 20, MinValue = 0)]
public int StopLoss { get; set; }
[Parameter("Take Profit (pips)", DefaultValue = 40, MinValue = 0)]
public int TakeProfit { get; set; }
protected override void OnStart()
{
Meini = Indicators.GetIndicator<Indicatorbbb>(2, MovingAverageType.WilderSmoothing);
}
protected override void OnBar()
{
if (Meini.haOpen.Last(1) < Meini.haClose.Last(1) &&
Meini.haOpen.Last(0) > Meini.haClose.Last(0))
{
// Enter a long trade
ExecuteMarketOrder(TradeType.Buy, Symbol, VolumeInUnits, "Long Trade", StopLoss, TakeProfit);
}
}
}
}
Replies
telefonowelolo
02 Mar 2024, 09:59
( Updated at: 03 Mar 2024, 07:09 )
RE: The cBot is not entering trades.
PanagiotisCharalampous said:
Hi there,
The problem is here
Meini.haOpen.Last(0) > Meini.haClose.Last(0)
On bar opening the values will always be equal. Try executing the code in OnBarClosed() instead.
Regarding the timeframe, the Algo class has a Timeframe parameter, you can user it.
Best regards,
Panagiotis
I followed your instructions, but my bot is still not working. And I reconstructed it so it looks like this
//#reference: ..\Indicators\John.algo
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)]
public class HAK : Robot
{
[Parameter("Initial Volume", DefaultValue = 1, MinValue = 1)]
public int InitialVolume { get; set; }
[Parameter("Initial Stop Loss", DefaultValue = 40)]
public int SL { get; set; }
[Parameter("Initial Take Profit", DefaultValue = 40)]
public int TP { get; set; }
public bool isAlreadyInTrade;
public IndicatorDataSeries haClose { get; set; }
public IndicatorDataSeries haOpen { get; set; }
public John HAJ;
string label = "HAK";
protected override void OnStart()
{
Positions.Closed += OnPositionClosed;
HAJ = Indicators.GetIndicator<John>(10, MovingAverageType.Simple);
isAlreadyInTrade = false;
}
private void OnPositionClosed(PositionClosedEventArgs args)
{
isAlreadyInTrade = false;
}
protected override void OnBar()-----------------tried OnBarClosed()
{
int index = MarketSeries.Close.Count - 2;
if (!isAlreadyInTrade)
{
Print("Current value of Kolor: " + HAJ.Kolor);
if (HAJ.Kolor)
{
ExecuteMarketOrder(TradeType.Buy, Symbol, InitialVolume, label, SL, TP);
isAlreadyInTrade = true;
}
//else
//{
//ExecuteMarketOrder(TradeType.Sell, Symbol, InitialVolume, label, SL, TP);
//isAlreadyInTrade = true;
//}
}
}
}
}
I found out that the bot somehow thinks the kolor is always false
Indicator:
public Colors Color;
public bool Kolor { get; set; }
Color = (haOpen[index] > haClose[index]) ? Colors.Red : Colors.LimeGreen;
Kolor = (haClose[index] > haOpen[index]);
@telefonowelolo
PanagiotisCharalampous
03 Mar 2024, 07:15
RE: RE: The cBot is not entering trades.
telefonowelolo said:
PanagiotisCharalampous said:
Hi there,
The problem is here
Meini.haOpen.Last(0) > Meini.haClose.Last(0)
On bar opening the values will always be equal. Try executing the code in OnBarClosed() instead.
Regarding the timeframe, the Algo class has a Timeframe parameter, you can user it.
Best regards,
Panagiotis
I followed your instructions, but my bot is still not working. And I reconstructed it so it looks like this
//#reference: ..\Indicators\John.algo
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)]
public class HAK : Robot
{
[Parameter("Initial Volume", DefaultValue = 1, MinValue = 1)]
public int InitialVolume { get; set; }
[Parameter("Initial Stop Loss", DefaultValue = 40)]
public int SL { get; set; }
[Parameter("Initial Take Profit", DefaultValue = 40)]
public int TP { get; set; }
public bool isAlreadyInTrade;
public IndicatorDataSeries haClose { get; set; }
public IndicatorDataSeries haOpen { get; set; }
public John HAJ;
string label = "HAK";
protected override void OnStart()
{
Positions.Closed += OnPositionClosed;
HAJ = Indicators.GetIndicator<John>(10, MovingAverageType.Simple);
isAlreadyInTrade = false;
}
private void OnPositionClosed(PositionClosedEventArgs args)
{
isAlreadyInTrade = false;
}
protected override void OnBar()-----------------tried OnBarClosed()
{
int index = MarketSeries.Close.Count - 2;
if (!isAlreadyInTrade)
{
Print("Current value of Kolor: " + HAJ.Kolor);
if (HAJ.Kolor)
{
ExecuteMarketOrder(TradeType.Buy, Symbol, InitialVolume, label, SL, TP);
isAlreadyInTrade = true;
}
//else
//{
//ExecuteMarketOrder(TradeType.Sell, Symbol, InitialVolume, label, SL, TP);
//isAlreadyInTrade = true;
//}
}
}
}
}I found out that the bot somehow thinks the kolor is always false
Indicator:
public Colors Color;
public bool Kolor { get; set; }Color = (haOpen[index] > haClose[index]) ? Colors.Red : Colors.LimeGreen;
Kolor = (haClose[index] > haOpen[index]);
Hi there,
I do not see my instructions being followed anywhere, neither I can help with partial code. You don't seem to use any output IndicatorDataSeries, therefore your Calculate() method is probably not evaluated.
Best regards,
Panagiotis
@PanagiotisCharalampous
... Deleted by UFO ...
PanagiotisCharalampous
02 Mar 2024, 07:30
Hi there,
The problem is here
On bar opening the values will always be equal. Try executing the code in OnBarClosed() instead.
Regarding the timeframe, the Algo class has a Timeframe parameter, you can user it.
Best regards,
Panagiotis
@PanagiotisCharalampous