Topics
Replies
afhacker
27 Sep 2018, 13:40
It's possible to get TradingView alerts data and use it as a trading signal on your cTrader trading account, you can do it directly from cTrader Automate API or by using Spotware Connect API.
Post a job request in the Jobs page and somebody will develop it for you,
@afhacker
afhacker
26 Sep 2018, 17:03
( Updated at: 21 Dec 2023, 09:20 )
RE: RE:
andresfborrero97@gmail.com said:
ColossusFX said:
Have you guys seen this?
cMulti
Copy trades to & from multiple cTrader accounts.
cMulti - Copy trades to & from multiple cTrader accounts.
I have been using this to manage accounts for friends.
You set which account/s you want to copy from and all trades are copied in real time.
Yeah, although it looks like a nice tool... It lacks scalability for enterprise use... It says it is a PAMM when it really is just a personal mirror assistant for copying trades.
Thanks still
Where did it say its a PAMM? cMulti (cMAM) is a tool for managing multiple cTrader accounts.
@afhacker
afhacker
21 Sep 2018, 07:21
For double generic collections you can use this method:
public static double Correlation(IEnumerable<double> x, IEnumerable<double> y) { double xSum = x.Sum(); double ySum = y.Sum(); double xSumSquared = Math.Pow(xSum, 2); double ySumSquared = Math.Pow(ySum, 2); double xSquaredSum = x.Select(value => Math.Pow(value, 2)).Sum(); double ySquaredSum = y.Select(value => Math.Pow(value, 2)).Sum(); double xAndyProductSum = x.Zip(y, (value1, value2) => value1 * value2).Sum(); double n = x.Count(); return ((n * xAndyProductSum) - (xSum * ySum)) / Math.Sqrt(((n * xSquaredSum) - xSumSquared) * ((n * ySquaredSum) - ySumSquared)); }
@afhacker
afhacker
21 Sep 2018, 07:16
public static double GetCorrelation(DataSeries dataSeries, DataSeries otherDataSeries) { double[] values1 = new double[dataSeries.Count]; double[] values2 = new double[dataSeries.Count]; for (int i = 0; i < dataSeries.Count; i++) { values1[i] = dataSeries.Last(i); values2[i] = otherDataSeries.Last(i); } var avg1 = values1.Average(); var avg2 = values2.Average(); var sum = values1.Zip(values2, (x1, y1) => (x1 - avg1) * (y1 - avg2)).Sum(); var sumSqr1 = values1.Sum(x => Math.Pow((x - avg1), 2.0)); var sumSqr2 = values2.Sum(y => Math.Pow((y - avg2), 2.0)); return Math.Round(sum / Math.Sqrt(sumSqr1 * sumSqr2), 2); }
This function returns the correlation between two data series.
@afhacker
afhacker
21 Jun 2018, 07:23
RE:
PapaGohan said:
Pivot points with sup/res is available on every other platform I have tried. Is this something in the works? Could it be added to some sort of "todo list"?
FX Trading Station has the ability to add 6 different types of pivot points:
- Classic pivot
- Camarilla
- Woodie
- Fibonacci
- Floor
- Fibonacci retracement
It's super useful, having anything like this built in would be great!
Five different types of pivot points indicator for cTrader: https://www.algodeveloper.com/product/pivot-points/
@afhacker
afhacker
13 Jun 2018, 15:01
RE:
Panagiotis Charalampous said:
Dear Trader,
Thanks for posting in our forum. This is currently not possible in cAlgo. A workaround is to get the Color as a string parameter and use the following function to convert the string to a Color
//A function for getting the color from a string private Colors GetColor(string colorString) { foreach (Colors color in Enum.GetValues(typeof(Colors))) { if (color.ToString() == colorString) return color; } return Colors.White; }Let me know if this helps,
Best Regards,
Panagiotis
Simple method:
private Colors GetColor(string colorText, string colorParameterName) { Colors color; if (!Enum.TryParse(colorText, true, out color)) { string errorObjName = string.Format("Your input for '{0}' parameter is incorrect", colorParameterName); ChartObjects.DrawText("Error", errorObjName, StaticPosition.Center, Colors.Red); // throw new ArgumentException(errorObjName); } return color; }
@afhacker
afhacker
18 Mar 2018, 06:07
Supply and demand zones indicator for cTrader: https://www.algodeveloper.com/1-supply-and-demand-zones
@afhacker
afhacker
02 Mar 2018, 09:56
First thanks for adding this new features but what about community requests? where is multi-symbol backtesting? or different parameter types like Enums, date time picker,...
And is there any property to get a collection of all available symbols? that will be a simple feature to add before releasing the new version of API.
The current API library is based on .Net framework 4 which is obsolete, please update the .Net version to > 4.6 at least.
Another main issue of current API is limited drawing, please improve the API chart drawing feature by adding:
1. Transparency
2. Different shapes drawing
3. Checking current objects on chart and modifying those objects
4. A collection of objects drawn by current indicator or cBot
And please add a property to get the user platform (not system as it's available by .Net) time zone as a .Net TimeZoneInfo object.
Adding all these features will not get much time but I don't know why Spotware is very slow in adding new features?
Multi-symbol backtesting is one of the top suggestions and most voted of the community so please add it!
@afhacker
afhacker
02 Nov 2017, 16:04
( Updated at: 21 Dec 2023, 09:20 )
Hi Hamid Reza,
There were some bugs in Alert library that I fixed and the new version is available, you can download your indicator which uses the new version of the alert library from here:
https://drive.google.com/open?id=0B93GK1Ip4NSMWldXRTljRTZ1ZEk
@afhacker
afhacker
31 Oct 2017, 17:28
You can download the compiled version of indicator from this link: https://drive.google.com/open?id=0B93GK1Ip4NSMdVVLbThRWjhMZmM
using System; using cAlgo.API; using cAlgo.API.Indicators; using System.Threading.Tasks; namespace cAlgo.Indicators { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)] public class IchimokuKinkoHyo : Indicator { private int alertBarIndex = 0; [Parameter(DefaultValue = 9)] public int periodFast { get; set; } [Parameter(DefaultValue = 26)] public int periodMedium { get; set; } [Parameter(DefaultValue = 52)] public int periodSlow { get; set; } [Parameter(DefaultValue = 26)] public int DisplacementChikou { get; set; } [Parameter(DefaultValue = 26)] public int DisplacementCloud { get; set; } [Parameter(DefaultValue = 26)] public int Displacementkijunsen { get; set; } [Parameter(DefaultValue = 0)] public int Displacemenspanb { get; set; } [Parameter("Text Color", DefaultValue = "Black")] public string TextColor { get; set; } [Parameter(DefaultValue = true)] public bool Common_cross { get; set; } [Parameter(DefaultValue = false)] public bool Uncommon { get; set; } [Parameter(DefaultValue = true)] public bool Common_cross_kumo { get; set; } [Output("TenkanSen", Color = Colors.Red)] public IndicatorDataSeries TenkanSen { get; set; } [Output("Kijunsen", Color = Colors.Blue)] public IndicatorDataSeries KijunSen { get; set; } [Output("ChikouSpan", Color = Colors.DarkViolet)] public IndicatorDataSeries ChikouSpan { get; set; } [Output("qualityline", Color = Colors.Black)] public IndicatorDataSeries qualityline { get; set; } [Output("SenkouSpanB", Color = Colors.Red, LineStyle = LineStyle.Lines)] public IndicatorDataSeries SenkouSpanB { get; set; } [Output("SenkouSpanA", Color = Colors.Green, LineStyle = LineStyle.Lines)] public IndicatorDataSeries SenkouSpanA { get; set; } [Output("Directionline", Color = Colors.Yellow)] public IndicatorDataSeries Directionline { get; set; } private Colors color = Colors.Black; double maxfast, minfast, maxmedium, minmedium, maxslow, minslow, maxbig, minbig; protected override void Initialize() { Alert.Manager.Indicator = this; Alert.Manager.WindowTheme = Alert.Manager.Theme.BaseLight; Alert.Manager.WindowAccent = Alert.Manager.Accent.Red; Enum.TryParse(TextColor, out color); } public override void Calculate(int index) { if (IsLastBar) DisplaySpreadOnChart(); if ((index < periodFast) || (index < periodSlow)) { return; } string signalType = string.Empty; maxfast = MarketSeries.High[index]; minfast = MarketSeries.Low[index]; maxmedium = MarketSeries.High[index]; minmedium = MarketSeries.Low[index]; maxbig = MarketSeries.High[index]; minbig = MarketSeries.Low[index]; maxslow = MarketSeries.High[index]; minslow = MarketSeries.Low[index]; for (int i = 0; i < periodFast; i++) { if (maxfast < MarketSeries.High[index - i]) { maxfast = MarketSeries.High[index - i]; } if (minfast > MarketSeries.Low[index - i]) { minfast = MarketSeries.Low[index - i]; } } for (int i = 0; i < periodMedium; i++) { if (maxmedium < MarketSeries.High[index - i]) { maxmedium = MarketSeries.High[index - i]; } if (minmedium > MarketSeries.Low[index - i]) { minmedium = MarketSeries.Low[index - i]; } } for (int i = 0; i < periodSlow; i++) { if (maxslow < MarketSeries.High[index - i]) { maxslow = MarketSeries.High[index - i]; } if (minslow > MarketSeries.Low[index - i]) { minslow = MarketSeries.Low[index - i]; } } TenkanSen[index] = (maxfast + minfast) / 2; KijunSen[index] = (maxmedium + minmedium) / 2; ChikouSpan[index - DisplacementChikou] = MarketSeries.Close[index]; SenkouSpanA[index + DisplacementCloud] = (TenkanSen[index] + KijunSen[index]) / 2; SenkouSpanB[index + DisplacementCloud] = (maxslow + minslow) / 2; qualityline[index + Displacementkijunsen] = (maxmedium + minmedium) / 2; Directionline[index] = (maxslow + minslow) / 2; if (KijunSen[index] == TenkanSen[index] && Common_cross) { ChartObjects.DrawVerticalLine(index.ToString(), MarketSeries.OpenTime[index], Colors.Red, 1, LineStyle.DotsVeryRare); ChartObjects.RemoveObject((index - 1).ToString()); TriggerAlert(TradeType.Sell, index, "Common_cross"); } if (TenkanSen.HasCrossedAbove(KijunSen, 0) && Uncommon) { ChartObjects.DrawVerticalLine(index.ToString(), MarketSeries.OpenTime[index], Colors.Green, 1, LineStyle.DotsVeryRare); ChartObjects.RemoveObject((index - 1).ToString()); TriggerAlert(TradeType.Sell, index, "Uncommon"); } if (KijunSen[index] == TenkanSen[index] && SenkouSpanA[index + DisplacementCloud] == SenkouSpanB[index + DisplacementCloud] && Common_cross_kumo) { ChartObjects.DrawVerticalLine(index.ToString(), MarketSeries.OpenTime[index], Colors.Blue, 1, LineStyle.DotsVeryRare); ChartObjects.RemoveObject((index - 1).ToString()); TriggerAlert(TradeType.Sell, index, "Common_cross_kumo"); } } private void DisplaySpreadOnChart() { var spread = Math.Round(Symbol.Spread / Symbol.PipSize, 2); string text = string.Format("{0}", spread); ChartObjects.DrawText("spread", "\t" + text, StaticPosition.BottomRight, Colors.Black); } private void TriggerAlert(TradeType alertType, int index, string msg) { if (index != alertBarIndex && IsLastBar && IsRealTime) { alertBarIndex = index; Alert.Manager.Trigger(alertType, Symbol, MarketSeries.TimeFrame, Server.Time, msg); } } } }
@afhacker
afhacker
23 Oct 2018, 07:57
You can also use my Advanced Volume indicator, it counts each up/down tick of the last bar and shows it in two different up/down histogram bar.
For historical bars, it uses a formula to count the number of up/down ticks, you can find more detail on its description.
@afhacker