يمكنك تطوير cBot يتداول رموزًا متعددة بالإضافة إلى الرمز المحدد عند إنشاء نسخة جديدة.
لجعل ذلك ممكنًا، Symbols هي مجموعة من جميع الرموز المتاحة لحساب التداول الخاص بك. يمكنك التكرار عليها باستخدام الحلقات؛ بدلاً من ذلك، يمكنك البحث فيها للعثور على رموز محددة.
للعمل بشكل صحيح مع رموز متعددة، تحتاج cBots إلى معرفة المعلومات التالية:
الحد الأدنى والأقصى للحجم المسموح به
خطوة الحجم
حجم نقطة السعر
قيمة نقطة السعر (القيمة النقدية لنقطة سعر واحدة أو نقرة في عملة إيداع الحساب)
يمكن معرفة هذه البيانات من كائن Symbol. في الكود أدناه، نجد رمزًا باسم "GBPUSD" ثم ننشئ أمر سوق له. نستخدم أيضًا الحد الأدنى للحجم المسموح به كحجم للأمر.
usingSystem;usingcAlgo.API;usingcAlgo.API.Internals;namespaceSamples{[Robot(AccessRights = AccessRights.None)]publicclassSample:Robot{protectedoverridevoidOnStart(){varspreadInPips=Symbol.NormalizePips(Symbol.ToPips(Symbol.Spread));Print(spreadInPips);varspreadInTicks=Math.Round(Symbol.ToTicks(Symbol.Spread));Print(spreadInTicks);/* Calculating a long position stop loss using the absolute price value. */varstopLossInPips=60;/* We use 'NormalizePips' to avoid the 'invalid decimal places' error in case our stop loss value has too many decimals. */varstopLossInPrice=Symbol.Ask-(Symbol.NormalizePips(stopLossInPips)*Symbol.PipSize);Print(stopLossInPrice);}}publicstaticclassSymbolExtensions{/// <summary>/// Returns a symbol pip value/// </summary>/// <param name="symbol"></param>/// <returns>double</returns>publicstaticdoubleGetPip(thisSymbolsymbol){returnsymbol.TickSize/symbol.PipSize*Math.Pow(10,symbol.Digits);}/// <summary>/// Returns a price value in terms of pips/// </summary>/// <param name="symbol"></param>/// <param name="price">The price level</param>/// <returns>double</returns>publicstaticdoubleToPips(thisSymbolsymbol,doubleprice){returnprice*symbol.GetPip();}/// <summary>/// Returns a price value in terms of ticks/// </summary>/// <param name="symbol"></param>/// <param name="price">The price level</param>/// <returns>double</returns>publicstaticdoubleToTicks(thisSymbolsymbol,doubleprice){returnprice*Math.Pow(10,symbol.Digits);}/// <summary>/// Rounds a price level to the number of symbol digits/// </summary>/// <param name="symbol">The symbol</param>/// <param name="price">The price level</param>/// <returns>double</returns>publicstaticdoubleRound(thisSymbolsymbol,doubleprice){returnMath.Round(price,symbol.Digits);}/// <summary>/// Normalize x Pips amount decimal places to something that can be used as a stop loss or take profit for an order./// For example if symbol is EURUSD and you pass to this method 10.456775 it will return back 10.5/// </summary>/// <param name="symbol">The symbol</param>/// <param name="pips">The amount of Pips</param>/// <returns>double</returns>publicstaticdoubleNormalizePips(thisSymbolsymbol,doublepips){varcurrentPrice=Convert.ToDecimal(symbol.Bid);varpipSize=Convert.ToDecimal(symbol.PipSize);varpipsDecimal=Convert.ToDecimal(pips);varpipsAddedToCurrentPrice=Math.Round((pipsDecimal*pipSize)+currentPrice,symbol.Digits);vartickSize=Convert.ToDecimal(symbol.TickSize);varresult=(pipsAddedToCurrentPrice-currentPrice)*tickSize/pipSize*Convert.ToDecimal(Math.Pow(10,symbol.Digits));returndecimal.ToDouble(result);}}}
توفر cTrader مجموعة HistoricalOrder لتمكين المستخدمين من استرداد معلومات عن الأوامر، بما في ذلك أوامر السوق المكتملة والأوامر المعلقة التي تم تنفيذها أو إلغاؤها. تتضمن التفاصيل القابلة للاسترداد معرف الأمر، ونوعه، وتسميته، وسعر الهدف، وتاريخ انتهاء الصلاحية، إلخ.
يوضح لك كود cBot أدناه كيفية الحصول على تفاصيل الأوامر التاريخية:
usingSystem;usingcAlgo.API;usingSystem.Text;usingSystem.IO;namespaceSamples{/* We provide the access rights required for reading and writing in locally stored files. */[Robot(AccessRights = AccessRights.FullAccess)]publicclassSample:Robot{protectedoverridevoidOnStart(){varstringBuilder=newStringBuilder();_=stringBuilder.AppendLine($"PositionId,TradeType,SymbolName,VolumeInUnits,EntryTime,EntryPrice,ClosingTime,ClosingPrice,NetProfit,Balance");// All trades are inside the 'History' collectionforeach(vartradeinHistory){_=stringBuilder.AppendLine($"{trade.PositionId},{trade.TradeType},{trade.SymbolName},{trade.VolumeInUnits},{trade.EntryTime:o},{trade.EntryPrice},{trade.ClosingTime:o},{trade.ClosingPrice},{trade.NetProfit},{trade.Balance}");}// We will save the CSV file on our desktopvardesktopPath=Environment.GetFolderPath(Environment.SpecialFolder.Desktop);varfilePath=Path.Combine(desktopPath,$"{Account.Number}_History.csv");File.WriteAllText(filePath,stringBuilder.ToString());}}}
الحصول على معلومات عن الصفقات
في cTrader، تنفذ الصفقات الأوامر وتتسبب في فتح المراكز أو إغلاقها. اعتمادًا على سيولة السوق، قد يتم تنفيذ الأمر بالكامل من خلال صفقة واحدة أو على أجزاء من خلال عدة صفقات. راجع المراكز والصفقات لمعرفة المزيد.
يوضح لك كود cBot أدناه كيفية استرداد معلومات حول صفقات متعددة موجودة في مركز واحد:
importclrclr.AddReference("cAlgo.API")# Import cAlgo API typesfromcAlgo.APIimport*fromcAlgo.API.Internalsimport*# Import trading wrapper functionsfromrobot_wrapperimport*classSample():defon_start(self):lots=2.5volume_in_units=api.Symbol.QuantityToVolumeInUnits(lots)api.ExecuteMarketOrder(TradeType.Sell,api.SymbolName,volume_in_units)
بدلاً من ذلك، يمكنك استخدام طريقة Symbol.VolumeInUnitsToQuantity() لتحويل الوحدات إلى لوت.
العمل مع الألوان
يمكن لـ cBots استخدام ألوان مخصصة عند إجراء عمليات مختلفة (على سبيل المثال، عند عرض النص على الرسوم البيانية للتداول). لإضافة اللون كمعلمة قابلة للتخصيص، أضف الكود التالي إلى إعلانات المعلمات الخاصة بك.
يمكنك استخدام كل من أكواد الألوان السداسية العشرية وأسماء الألوان (مثل red") عند تحديد DefaultValue لمثل هذه المعلمة."
لتوضيح كيفية عمل معلمات اللون، سننشئ cBot بسيطًا يقوم، عند بدء تشغيله، بكتابة نص على الرسم البياني للتداول الذي يعمل عليه. سيكون لون هذا النص قابلاً للتخصيص عبر معلمة TextColor.
1 2 3 4 5 6 7 8 910111213141516171819202122232425
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingcAlgo.API;usingcAlgo.API.Collections;usingcAlgo.API.Indicators;usingcAlgo.API.Internals;namespacecAlgo.Robots{[Robot(AccessRights = AccessRights.None)]publicclassSampleColorcBot:Robot{[Parameter("Text Color", DefaultValue = "red")]publicColorTextColor{get;set;}protectedoverridevoidOnStart(){varstaticText=Chart.DrawStaticText("static","Sample text to demonstrate how color works",VerticalAlignment.Center,HorizontalAlignment.Center,TextColor);}}}
1 2 3 4 5 6 7 8 91011121314151617181920
importclrclr.AddReference("cAlgo.API")# Import cAlgo API typesfromcAlgo.APIimport*fromcAlgo.API.Internalsimport*# Import trading wrapper functionsfromrobot_wrapperimport*classSampleColorcBot():defon_start(self):api.Chart.DrawStaticText("static","Sample text to demonstrate how color works",VerticalAlignment.Center,HorizontalAlignment.Center,api.TextColor)