انتقل إلى المحتوى

كيفية استخدام المؤشرات في cBots

في هذه المقالة والفيديو المصاحب لها، نشرح كيف يمكنك استخدام المؤشرات المدمجة في cBots الخاصة بك. عادة ما يتم استخدام المؤشرات في cBot لمجموعة متنوعة من الأغراض، وأبرزها جعل cBots تتخذ قرارات التداول اعتمادًا على مخرجات المؤشر. لتوضيح ذلك، سنقوم بتطوير إستراتيجية تداول آلية بسيطة بناءً على مؤشر القوة النسبية (RSI).

إنشاء cBot جديد

لإنشاء cBot جديد، انتقل إلى علامة التبويب Algo وانقر على cBot جديد.

سنعيد تسمية cBot الخاص بنا إلى "RSI cBot". إليك كيف ستعمل إستراتيجية التداول الآلية الخاصة بنا.

  • سيدخل الروبوت في مراكز شراء عندما يتحرك مؤشر RSI أسفل عتبة محددة مسبقًا.
  • سيدخل الروبوت في مراكز بيع عندما يتحرك مؤشر RSI فوق عتبة محددة مسبقًا.

تعريف وتهيئة المؤشر

أول شيء نحتاج إلى القيام به هو تعريف مؤشر RSI في فئة cBot الخاصة بنا. للقيام بذلك، نعلن عن حقل جديد.

1
private RelativeStrengthIndicator rsi;

استخدام أعضاء الفئة الخاصة

يمكننا جعل حقل rsi خاصًا بأمان حيث سيتم استخدامه فقط في cBot الخاص بنا.

يجب تهيئة جميع مؤشرات cTrader قبل أن نتمكن من استخدامها. من الأفضل القيام بذلك في نص طريقة OnStart() حتى يتمكن cBot من الوصول إلى مخرجات المؤشر بعد بدء تشغيله. تقدم cTrader فئة مفيدة تسمح لك بتهيئة المؤشرات المدمجة بسهولة باستخدام منشئات جاهزة. قبل أن نتمكن من رؤية كيفية القيام بذلك، سنضيف معلمتين ضروريتين لتهيئة مؤشر RSI.

1
2
3
4
5
[Parameter("Source", Group = "RSI")]
public DataSeries Source { get; set; }

[Parameter("Periods", Group = "RSI", DefaultValue = 14)]
public int Periods { get; set; }

الآن بعد أن أضفنا المعلمات الخاصة بنا، نحن جاهزون لتهيئة المؤشر.

1
2
3
4
protected override void OnStart()
{
    rsi = Indicators.RelativeStrengthIndex(Source, Periods);
}

تنفيذ منطق التداول

بما أننا قمنا بالفعل بتهيئة المؤشر، يمكننا استدعاؤه واستخدامه في منطق التداول لدينا. في حالة مؤشر RSI، يمكننا قراءة المخرجات باستخدام مجموعة Results.

للقيام بذلك، سنستخدم طريقة OnBar() وتنفيذ الشروط التالية.

  • إذا كانت قيمة RSI الحالية أقل من عتبة شراء RSI، قم بإدخال مركز شراء جديد.
  • إذا كانت قيمة RSI الحالية أعلى من عتبة بيع RSI، قم بإدخال مركز بيع جديد.

نظرًا لأننا نعتمد على عتبات محددة مسبقًا لتنفيذ منطق التداول لدينا، سنضيف معلمتين إضافيتين إلى cBot الخاص بنا.

1
2
3
4
5
[Parameter("Buy Level", Group = "RSI", DefaultValue = 30)]
public int BuyLevel { get; set; }

[Parameter("Sell Level", Group = "RSI", DefaultValue = 70)]
public int SellLevel { get; set; }

بعد ذلك، سنقوم بتنفيذ شروطنا في كود cBot.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnBarClosed()
{
    if (rsi.Result.LastValue < BuyLevel)
    {
    // Enter buy position
    }
    else if (rsi.Result.LastValue > SellLevel)
    {
    // Enter sell position
    }
}

حان الوقت لتنفيذ الطرق المساعدة لتنفيذ أوامر التداول. يتم ذلك لإنشاء مستوى إضافي من التجريد في الكود، مما يحسن القراءة وإعادة الاستخدام.

نبدأ بإضافة معلمة cBot واحدة أخرى تسمح لك بتعيين حجم التداول.

1
2
[Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
public double Quantity { get; set; }

بعد ذلك، سنضيف طرق Open() و Close() لإدخال مركز جديد وإغلاق جميع المراكز التي فتحها cBot في اتجاه معين.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
private void Open(TradeType tradeType)
{
    var position = Positions.Find("SampleRSI", SymbolName, tradeType);
    var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

    if (position == null)
        ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "RSI cBot");
}

private void Close(TradeType tradeType)
{
    foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
        ClosePosition(position);
}

يمكننا استخدام طرقنا المساعدة لإكمال إستراتيجية التداول الآلي.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
protected override void OnTick()
{
    if (rsi.Result.LastValue < BuyLevel)
    {
        Close(TradeType.Sell);
        Open(TradeType.Buy);
    }
    else if (rsi.Result.LastValue > SellLevel)
    {
        Close(TradeType.Buy);
        Open(TradeType.Sell);
    }
}

اختبار cBot عكسيًا

بعد الانتهاء من كتابة التعليمات البرمجية لـ cBot، يمكننا بناؤه والانتقال إلى علامة التبويب الاختبار العكسي لمعرفة كيفية أدائه على البيانات التاريخية.

يمكننا أيضًا إرفاق مؤشر RSI بالرسم البياني الحالي لمعرفة ما إذا كانت الصفقات التي نفذها cBot تتطابق مع نقاط الدخول المقصودة.

Image title