Langkau tajuk talian

Cara menggunakan indikator dalam cBot

Dalam artikel ini dan video yang berkaitan, kami menerangkan bagaimana anda boleh menggunakan indikator terbina dalam dalam cBot anda. Penggunaan indikator dalam cBot biasanya dilakukan untuk pelbagai tujuan, terutamanya membuat cBot mengambil keputusan dagangan bergantung pada output indikator. Untuk menunjukkan ini, kami akan membangunkan strategi dagangan diautomasi mudah berdasarkan Relative Strength Index (RSI).

Cipta cBot baharu

Untuk mencipta cBot baharu, beralih ke tab Algo dan klik cBot Baharu.

Kami akan menamakan semula cBot kami kepada "RSI cBot". Berikut adalah bagaimana strategi dagangan diautomasi kami akan berfungsi.

  • Bot akan memasuki posisi beli apabila indikator RSI bergerak di bawah ambang yang telah ditetapkan.
  • Bot akan memasuki posisi jual apabila indikator RSI bergerak di atas ambang yang telah ditetapkan.

Tentukan dan mulakan indikator

Perkara pertama yang perlu kita lakukan adalah menentukan indikator RSI dalam kelas cBot kita. Untuk berbuat demikian, kita mengisytiharkan medan baharu.

1
private RelativeStrengthIndicator rsi;

Menggunakan ahli kelas peribadi

Kita boleh membuat medan rsi peribadi dengan selamat kerana ia hanya akan digunakan dalam cBot kita.

Semua indikator cTrader perlu dimulakan sebelum kita boleh menggunakannya. Ini paling baik dilakukan dalam badan kaedah OnStart() supaya cBot mempunyai akses kepada output indikator selepas ia mula berjalan. cTrader menawarkan kelas yang berguna yang membolehkan anda memulakan indikator terbina dalam dengan mudah menggunakan pembina yang telah disediakan. Sebelum kita boleh melihat bagaimana ini dilakukan, kita akan menambah dua parameter yang diperlukan untuk memulakan indikator 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; }

Sekarang kita telah menambah parameter kita, kita bersedia untuk memulakan indikator.

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

Laksanakan logik dagangan

Memandangkan kita telah memulakan indikator, kita boleh memanggilnya dan menggunakannya dalam logik dagangan kita. Dalam kes indikator RSI, kita boleh membaca output menggunakan koleksi Results.

Untuk berbuat demikian, kita akan menggunakan kaedah OnBar() dan melaksanakan syarat berikut.

  • Jika nilai RSI semasa adalah di bawah ambang beli RSI, masukkan posisi beli baharu.
  • Jika nilai RSI semasa adalah di atas ambang jual RSI, masukkan posisi jual baharu.

Kerana kita bergantung pada ambang yang telah ditetapkan untuk melaksanakan logik dagangan kita, kita akan menambah dua lagi parameter kepada cBot kita.

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; }

Seterusnya, kita akan melaksanakan syarat kita dalam kod 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
    }
}

Sudah tiba masanya untuk melaksanakan kaedah tambahan untuk melaksanakan pesanan dagangan. Ini dilakukan untuk mencipta tahap abstraksi tambahan dalam kod, meningkatkan kebolehbacaan dan kebolehgunaan semula.

Kita mulakan dengan menambah satu lagi parameter cBot yang membolehkan anda menetapkan volum yang didagangkan.

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

Selepas itu, kita akan menambah kaedah Open() dan Close() untuk memasuki posisi baharu dan menutup semua posisi yang dibuka oleh cBot dalam arah tertentu.

 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);
}

Kita boleh menggunakan kaedah bantuan kita untuk melengkapkan strategi dagangan automatik.

 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);
    }
}

Ujian belakang cBot

Selepas kita selesai mengekod cBot, kita boleh membinanya dan beralih ke tab Ujian Belakang untuk melihat bagaimana ia berprestasi pada data sejarah.

Kita juga boleh melampirkan indikator RSI pada carta semasa untuk melihat sama ada dagangan yang dilaksanakan oleh cBot sepadan dengan titik masuk yang dimaksudkan.

Image title