Topics
Replies
PanagiotisCharalampous
06 Sep 2024, 05:18
RE: RE: Backtesting doesn't work
joao.rodm said:
PanagiotisCharalampous said:
Hi there,
Can you please share a full screenshot of your UI so that we can see what you are looking at?
Best regards,
Panagiotis
Here a snapshot of the screen of for backtesting. But sometimes it starts after a while… Best regards. Joao Martins
Hi Joao,
There is no obvious problem in the screenshot you have posted. The button seems enabled. As you sai, it might take some time for the backtesting to start.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
06 Sep 2024, 05:14
Hi Steve,
This is not expected to happen anytime soon. While the Mac team is catching up, the Windows team is developing new features. So there will be differences at least for the foreseeable future.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
06 Sep 2024, 05:11
RE: RE: RE: RE: RE: RE: using Bar collection and indicators (eg DMS) in background job.
Shares4us said:
PanagiotisCharalampous said:
Shares4us said:
I have a backgroundworker that needs to use some indicators(eg DMS) while running calculating some MTF bars.
The values of the indicators are to be used in the backgroundcalculations and the indicators should preferably be local to the static backgroundworker.
Usage like var O = Bars[10].Open;
and like
var RS = Indicators.RelativeStrengthIndex(closePrices, entry.14);
var I DM = Indicators.DirectionalMovementSystem(entry.14);How to achieve that without invoking the main thread?
You can't. If you need data from the Bars object, you need to work on the main thread.
Ok. Related Question. Is there a way to start a Plugin from an indicator or Cbot. Alternate: can i start Backtesting (from plugin) in Indicator/Cbot?
No there isn't
@PanagiotisCharalampous
PanagiotisCharalampous
05 Sep 2024, 11:28
Hi there,
Can you please share a full screenshot of your UI so that we can see what you are looking at?
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
05 Sep 2024, 04:58
Hi there,
Could you please send us some troubleshooting information the next time this happens? Please paste a link to this discussion inside the text box before you submit it.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
05 Sep 2024, 04:56
Hi Waxy,
It will be fixed in 5.1.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
05 Sep 2024, 04:49
Hi there,
You can use ChartFibonacciRetracement but I do not think is necessary. Fibo level calculation is straight forward, you can calculate them yourself using the selected high and low.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
05 Sep 2024, 04:45
RE: Push notifications on ios ctrader app not working for days
Ryan618 said:
Hi,
Did your notifications come back?
Since yesterday, I'm no longer getting push notifications on the iOS cTrader app either. I've checked the settings on the app, cTrader account, iOS notification settings and they're all turned on. I've reinstalled the app but still nothing. 🤷♂️
Hi there,
A fix is planned to be released over the weekend.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 13:48
RE: RE: RE: RE: Very simple issue
tuuguu177 said:
PanagiotisCharalampous said:
tuuguu177 said:
PanagiotisCharalampous said:
Hi there,
No this is not possible at the moment.
Best regards,
Panagiotis
Hello
How to make line into transparent at coding?
Hi there,
You need to set make your line's color transparent by setting the alpha to 0. See below
var color = Color.FromArgb(0,255,0,0);
Best regards,
Panagiotis
Color.FromArgb(0,255,0,0)
Is 4th transparency value? I changed 4th value with 0 and 90. But there is not any change of line transparency
the first one, which determines the alpha
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 13:36
RE: RE: RE: RE: RE: RE: RE: RE: When a bot was "unexpectedly terminated", cTrader shows the bot as still running
firemyst said:
PanagiotisCharalampous said:
firemyst said:
PanagiotisCharalampous said:
Hi firemyst,
It seems we have not received this email. Can you please resend it to community@ctrader.com?
Best regards,
Panagiotis
Resent as requested. PLease let me know if you received it. If not, I might have to send separate individual emails with all the info as I wonder if your email system might be blocking it or sending it to spam for some reason.
Hi firemyst,
Try my personal one as well pcharalampous@spotware.com
Best regards,
Panagiotis
Just wanting to confirm you've received the messages I've sent? If not, I think Spotware's email system is blocking them for some reason because all my initial messages got through to the Community team - obviously since they asked for the VPS' details to check out the issue.
Thank you
Hi firemyst,
Messages received, the team will check later this week or early next week. Thanks for your patience!
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 13:33
Hi there,
Talk you your broker to check what the exact reason is for this behavior.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 13:30
Hi Nick,
There are no limits to how many symbols you can subscribe. One thing that could be happening is that you do not read the incoming messages fast enough causing a buffer overflow on the server which eventually drops your connection. If you cannot figure it out yourself, contact the Open API support on Telegram so that they can check what is happening with your connection
https://t.me/ctrader_open_api_support
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 05:56
Hi there,
We do not have such plans at the moment.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 05:55
Hi there,
cTrader is just a platform and Spotware is a technology provider. We are not brokers, therefore we do not offer brokerage services to traders.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 05:55
Hi there,
cTrader is just a platform and Spotware is a technology provider. We are not brokers, therefore we do not offer brokerage services to traders.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 05:55
RE: RE: RE: RE: Algo Compiler v8 for Cloud?
elia.morling said:
Thanks, yes I found this tab.
The code below works perfectly locally. All it does it connect to a websocket, and printsOnStart…
When I run this in the cloud I get no errors, and no prints either. Should I not see a Print statement with this?
using System;using cAlgo.API;using cAlgo.API.Collections;using cAlgo.API.Indicators;using cAlgo.API.Internals;namespace cAlgo.Robots{ [Robot(AccessRights = AccessRights.None, AddIndicators = true)] public class AlgoBot2 : Robot { // Defining the necessary WebSocketClientOptions private static WebSocketClientOptions _webSocketClientOptions = new WebSocketClientOptions { KeepAliveInterval = new TimeSpan(0, 1, 30), UseDefaultCredentials = true, }; // Initialising the WebSocketClient private WebSocketClient _webSocketClient = new WebSocketClient(_webSocketClientOptions); // Defining the target URI where the AI service is available private readonly Uri _targetUri = new Uri("wss://custom-subdomain.loca.lt"); protected override void OnStart() { Print("OnStart..."); _webSocketClient.Connect(_targetUri); // Serialize JSON data string jsonMessage = System.Text.Json.JsonSerializer.Serialize(new { hello = "world" }); _webSocketClient.Send(jsonMessage); _webSocketClient.TextReceived += webSocketClient_TextReceived; } protected override void OnBarClosed() { // Attaining data for the current bar that has just closed // and the preceding bar var currentBar = Bars.LastBar; var previousBar = Bars.Last(Bars.Count - 2); // Creating a prompt for market analysis based on bar data string marketPrompt = @$" For the current bar, the high, low, open, and close were the following: {currentBar.High}, {currentBar.Low}, {currentBar.Open}, {currentBar.Close}. For the previous bar, these values were {previousBar.High}, {previousBar.Low}, {previousBar.Open}, {previousBar.Close}. Make predictions about the future. "; // Sending the new prompt to the AI service _webSocketClient.Send(marketPrompt); } protected void webSocketClient_TextReceived(WebSocketClientTextReceivedEventArgs obj) { Print("Received message"); } protected override void OnStop() { // Disposing of the WebSocketClient to avoid memory leaks _webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure); } }}
Can you share a screenshot of the cBot log as well?
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 05:52
Hi there,
There is no such feature unfortunately.
Best regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 05:26
RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: RE: Backtesting - Incorrect TP / SL calculation
zytotoxiziteat said:
zytotoxiziteat said:
zytotoxiziteat said:
PanagiotisCharalampous said:
zytotoxiziteat said:
PanagiotisCharalampous said:
zytotoxiziteat said:
PanagiotisCharalampous said:
zytotoxiziteat said:
zytotoxiziteat said:
zytotoxiziteat said:
PanagiotisCharalampous said:
Hi there,
Please share your cBot code and make sure you are using tick data for your backtests.
Best regards,
Panagiotis
using System;using System.Collections.Generic;using cAlgo.API;using cAlgo.API.Indicators;using cAlgo.API.Internals;namespace cAlgo.Robots{ [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)] public class TradingBot : Robot { [Parameter("Risk Percentage", DefaultValue = 1, MinValue = 0.1, MaxValue = 10)] public double RiskPercentage { get; set; } [Parameter("Stop Loss (Pips)", DefaultValue = 40, MinValue = 0, MaxValue = 100)] public double StopLossPips { get; set; } [Parameter("Take Profit (Pips)", DefaultValue = 20, MinValue = 0, MaxValue = 200)] public double TakeProfitPips { get; set; } private AI_101.ML101.ModelInput _modelInput; private double _lastPrediction; protected override void OnStart() { _modelInput = new AI_101.ML101.ModelInput(); } protected override void OnTick() { // Ensure only one open position per currency pair if (Positions.FindAll("ML Prediction", Symbol.Name).Length > 0) return; // Update model input with the latest close price _modelInput.ClosePrice = (float)Symbol.Bid; // Use Symbol.Bid instead of Symbol.LastTick.Bid // Get prediction var prediction = AI_101.ML101.Predict(_modelInput); // Calculate the predicted price change double predictedChange = prediction.ClosePrice[0] - _modelInput.ClosePrice; // Determine if we should open a position if (Math.Abs(predictedChange) > Symbol.PipSize) { if (predictedChange > 0 && _lastPrediction <= 0) { OpenPosition(TradeType.Buy); } else if (predictedChange < 0 && _lastPrediction >= 0) { OpenPosition(TradeType.Sell); } } _lastPrediction = predictedChange; } private void OpenPosition(TradeType tradeType) { // Calculate position size based on risk double riskAmount = Account.Balance * (RiskPercentage / 100); double volumeInUnits = riskAmount / (StopLossPips * Symbol.PipValue); // Ensure volume is within acceptable range and increments volumeInUnits = Symbol.NormalizeVolumeInUnits(volumeInUnits, RoundingMode.ToNearest); // Check if the volume is valid if (volumeInUnits < Symbol.VolumeInUnitsMin || volumeInUnits > Symbol.VolumeInUnitsMax) { Print("Volume is out of range: " + volumeInUnits); return; } // Open the position ExecuteMarketOrder(tradeType, Symbol.Name, volumeInUnits, "ML Prediction", StopLossPips, TakeProfitPips); } }}
My thought was:
Since I collected only m5 candle data for my Machine learning module I changed the “Data” in settings to “m5 bars from server” for backtestingand I was considering to change “protected override void OnTick()” to "protected override void OnBar()".
Is that wrong?
What is the best solution?
Thank youHi there,
If you are using fixed SL and TP, you need to use tick data to ensure accurate results in backtesting.
Best regards,
Panagiotis
Okay, my cbot code uses
protected override void OnTick()
I still get wrong TP.
You need to use tick data on your backtesting settings. OnTick() is irrelevant.
Where does the option “m5 bars from server” come from?
I thought the system provided the best possible set-up because of my csv file, which contains only m5 bars data.
I don't understand what you mean. It's just an option in a dropdown list
My friend,
I created a csv file with m5 bars only to train my module. I thought that is why I the option “M5” is available.
Can you please explain why in any of the options in Backtesting drop-down list is not triggering my predefined TP or SL .
What is the point of predefining it?
I thought the Backtesting process should prepare for the real environment. But when there are options which are not correctly executed by the system makes no sense to me.
The options have nothing to do with the data you used to generate the model. The backtesting module has no clue what your cBot is doing. Those options are there to choose the data source to be used for the backtesting. If you don't use tick data but you use SP and TP at specific price levels, your execution will be inaccurate, since m5 bars data source only uses open prices for the execution
@PanagiotisCharalampous
PanagiotisCharalampous
04 Sep 2024, 05:20
RE: RE: RE: RE: Placing Stop Order - FAILED with error "TechnicalError"
sebastien.t said:
My broker is ICMarkets and here is the simple code, I just put an order. It could be anything a Market order or a stop order, i have always the Failure message.
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.Indicators;
using System;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class StopLimitOrdersAt915 : Robot
{
private double _high15;
private double _low15;
[Parameter("Volume (in units)", DefaultValue = 10)]
public int VolumeInUnits { get; set; }
[Parameter("Offset (points)", DefaultValue = 20)]
public double OffsetInPoints { get; set; }
[Parameter("Take Profit (points)", DefaultValue = 50)]
public double TakeProfitInPoints { get; set; }
protected override void OnStart(){
var closedBar = Bars[1];
_high15 = closedBar.High;
_low15 = closedBar.Low;
double sellStopLoss = OffsetInPoints / Symbol.PipSize;
double takeProfit = TakeProfitInPoints / Symbol.PipSize;
double StopLoss= (_high15-_low15)/Symbol.PipSize
PlaceStopOrder(TradeType.Sell, SymbolName, VolumeInUnits, _low15, "Sell Stop Limit Order", StopLoss, takeProfit);
}
}}
Please let us know the symbol as well. I tried this on EURUSD and works fine
@PanagiotisCharalampous
PanagiotisCharalampous
06 Sep 2024, 05:19
Hi there,
No there is no such option in APIs available for traders. Account creation is only available to brokers.
Best regards,
Panagiotis
@PanagiotisCharalampous