Topics
Replies
Mikro
04 Nov 2021, 09:20
RE:
amusleh said:
Hi,
C# is a different programming language, its a managed programming language with garbage collection that runs on top of .NET runtime.
You can call unmanaged C++ DLL functions on C#, check this tutorial please: How to call a c++ dll in C#.net code - CodeProject
Hi,
thanks for the hint, I'll look into it!
@Mikro
Mikro
15 Mar 2019, 18:00
RE:
Hi Panagiotis,
unfortunately not since cTrader does not support .Net 4.5 Framework. There literailly is no Library for InfluxDb Interaction that does not at least require .Net 4.5.
So my only alternative is to either write the InfluxDB interface myselft in .Net 4 which is more than a p.... or calling a Python script which interacts with the database.
To do that I need to reference a script... and cTrader I now learn does not support using embedded resources during build ... I start to feel abandoned !
Is there any way you can think of to feed and retreive data from an InfluxDatabase from within cAlgo???
Best regards
Mikro
Panagiotis Charalampous said:
Hi Mikro,
This is not supported at the moment. Is it not possible to replace the python script with C# code?
Best Regards,
Panagiotis
@Mikro
Mikro
28 Feb 2019, 12:07
.Net Framework update needed!
Dear support,
when will there be an update on a up to date .Net framework?
Literally no C# NuGet packages still support .Net 4.0 so coding algos is becoming a pain in the a.. needing to focus precious coding time to try and avoid the compatibility issues.
We need help here!
cheers
@Mikro
Mikro
05 Feb 2019, 14:43
Hey guys,
I have the same issue at the moment.
One indicator I opened from cAlgo via "Edit in Visual Studio" compiles just fine to the 'indicator.algo' in the
/Resources/Indicators/
directory.
Another indicator which I resored from an old git repository compiles, but does not build the .calgo file.
I find the indicator.dll under
/Resources/Indicators/myIndicator/bin/Release/
folder, but no
/Resources/Indicators/myIndicator.calgo
is created?
I tried to set build action for the .cs file to 'resource' but with no result.
What am I missing?
thanks!
@Mikro
Mikro
01 Jul 2018, 17:28
Hi Panagiotis,
according to the hoomepage Ta-Lib ist Open Source and links a Community Forum for help.
http://tadoc.org/forum/
This seems to be down, at least I wasn't able to open the Site.
But taking a closer look at several google Hits the issue seems to be that I have to transform the Price Arrays from double[] to float[] since TA-Lib seems to need this format.
Is there a smoother way the transform double[] to float[] than iterating through all members in a
for i to double[].count
loop?
Cheers
Mikro
@Mikro
Mikro
03 Dec 2017, 23:26
RE:
Hi Panagiotis,
From I read about nested indicators using the Moving Average Indicators in my code is pretty much using nested indicators, isn't it?
protected override void Initialize() { jawsMa = Indicators.SimpleMovingAverage(MarketSeries.Close, JawsPeriods); teethMa = Indicators.SimpleMovingAverage(MarketSeries.Close, TeethPeriods); lipsMa = Indicators.ExponentialMovingAverage(MarketSeries.Close, LipsPeriods); }
This way the indicator parameters can be handled by the algo but I have no option to draw the used indicators to different chart types, do I?
THX
Mirko
Panagiotis Charalampous said:
Hi Mikro,
Have a look at nested indicators. I believe that they can help you solve your issue. Let me know if this helpful.
Best Regards,
Panagiotis
@Mikro
Mikro
25 Nov 2017, 14:24
( Updated at: 21 Dec 2023, 09:20 )
Hi Panagiotis,
I am trying to build an integrated Indicator with an output for generated trade signals.
As a simple example if all lines of an Alligator are stacked by speed in long direction the output is "1", if stacked short "-1" and else "0".
So I open a nested Alligator in the new indicator an calculate the output.
using System.Collections.Generic; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; using cAlgo.Indicators; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AutoRescale = false, AccessRights = AccessRights.None)] public class indTradeDirection : Indicator { [Parameter(DefaultValue = 13)] public int JawsPeriods { get; set; } [Parameter(DefaultValue = 8)] public int JawsShift { get; set; } [Parameter(DefaultValue = 8)] public int TeethPeriods { get; set; } [Parameter(DefaultValue = 5)] public int TeethShift { get; set; } [Parameter(DefaultValue = 5)] public int LipsPeriods { get; set; } [Parameter(DefaultValue = 3)] public int LipsShift { get; set; } [Output("Jaws", Color = Colors.Blue)] public IndicatorDataSeries Jaws { get; set; } [Output("Teeth", Color = Colors.Red)] public IndicatorDataSeries Teeth { get; set; } [Output("Lips", Color = Colors.Lime)] public IndicatorDataSeries Lips { get; set; } [Output("TradeDirection", Thickness = 3, PlotType = PlotType.Line, Color = Colors.WhiteSmoke)] public IndicatorDataSeries TradeDirection { get; set; } private SimpleMovingAverage jawsMa; private SimpleMovingAverage teethMa; private ExponentialMovingAverage lipsMa; protected override void Initialize() { jawsMa = Indicators.SimpleMovingAverage(MarketSeries.Close, JawsPeriods); teethMa = Indicators.SimpleMovingAverage(MarketSeries.Close, TeethPeriods); lipsMa = Indicators.ExponentialMovingAverage(MarketSeries.Close, LipsPeriods); } public override void Calculate(int index) { Jaws[index + JawsShift] = jawsMa.Result[index]; Teeth[index + TeethShift] = teethMa.Result[index]; Lips[index + LipsShift] = lipsMa.Result[index]; calcTradeDirection(index); } private void calcTradeDirection(int index) { double lastLips = Lips[index]; double lastTeeth = Teeth[index]; double lastJaws = Jaws[index]; if (lastLips > lastTeeth && lastTeeth > lastJaws) { TradeDirection[index] = 1; return; } if (lastLips < lastTeeth && lastTeeth < lastJaws) { TradeDirection[index] = -1; return; } TradeDirection[index] = 0; } public TradeType? GetTradeDirection() { if (TradeDirection.LastValue == 1) { return TradeType.Buy; } if (TradeDirection.LastValue == -1) { return TradeType.Sell; } return null; } } }
If I use
IsOverlay = true
it looks like this
IsOverlay = false
looks like this
what I would like to have is
But if I open an aditional Indicators for the overlay and separate Chart the Parameters of the Indicators are not synchronised because the reside in different indicators.
Any Idea how to solve this?
THX
@Mikro
Mikro
01 Nov 2017, 22:01
Hi Panagiotis,
that clarifies the Orderhandling an rises another Question ;)
Are there any "Benefits" in Terms of the Precision or Speed executing a pending Order vs a Markt Order? Does the Market Maker "preallocate" the pending Order an matches it prior to the Price hitting the Stop Level?
Or in short, will I encouter a better Order Execution with pending Orders?
Thx Mikro
@Mikro
Mikro
09 Jun 2017, 18:12
Try something like this:
protected override void OnStart() { _myEquity = Account.Equity; } protected override void OnTick() { if ((_myEquity / Account.Equity)<0.95) { Position _myWorstPosition=Positions[0]; foreach (Position pos in Positions) { if (_myWorstPosition.NetProfit>pos.NetProfit) { _myWorstPosition = pos; } } ClosePosition(_myWorstPosition); } }
cheers Mirko
@Mikro
Mikro
09 Jun 2017, 17:38
You can create these two Orders as pending Orders and subscribe to the ServerEvent if Orders are filled.
If one Order is filled you cancel the other an set your intended Stop-Levels. Like so:
using System; using System.Linq; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.API.Requests; using cAlgo.Indicators; namespace cAlgo { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class NewcBot : Robot { [Parameter(DefaultValue = 0.0)] public double Parameter { get; set; } protected override void OnStart() { Positions.Opened += OnPositionOpened; PlaceStopOrder(TradeType.Buy, this.Symbol, 10000, Symbol.Ask + 15*Symbol.PipSize); PlaceStopOrder(TradeType.Sell, this.Symbol, 10000, Symbol.Bid - 15 * Symbol.PipSize); } protected override void OnTick() { } protected override void OnStop() { // Put your deinitialization logic here } public void OnPositionOpened(PositionOpenedEventArgs args) { foreach (PendingOrder pOrder in PendingOrders) { CancelPendingOrderAsync(pOrder); } foreach (Position pos in Positions) { if (pos.TradeType==TradeType.Buy) { ModifyPosition(pos, pos.EntryPrice - 15*Symbol.PipSize, pos.EntryPrice + 30*Symbol.PipSize); } else { ModifyPosition(pos, pos.EntryPrice + 15*Symbol.PipSize, pos.EntryPrice - 30*Symbol.PipSize); } } } } }
@Mikro
Mikro
04 Nov 2021, 12:39
Has anyone succeeded in runing a life Simulink modell with data feed from a running cBot?
@Mikro