Lewati ke isi

Jenis parameter di cTrader algo

Dalam artikel ini dan video terkaitnya, kami akan mendemonstrasikan bagaimana Anda dapat mendeklarasikan dan menggunakan parameter yang dapat disesuaikan dalam cBot dan indikator Anda. Kami akan mengembangkan indikator sederhana dan menunjukkan cara mengonfigurasi parameter dari UI cTrader. Kami juga akan menjelaskan jenis parameter apa yang dapat Anda gunakan dalam cBot atau indikator cTrader dan mengilustrasikan bagaimana parameter tersebut dideklarasikan dan digunakan dalam kode Anda.

Parameter yang dapat disesuaikan

Parameter yang dapat disesuaikan adalah nilai yang dapat dikonfigurasi saat menambahkan, memulai, atau menggunakan algoritma. Parameter ini memungkinkan Anda dan pengguna lain untuk menyesuaikan perilaku cBot, indikator, dan plugin tanpa mengubah kode sumber.

Menggunakan parameter dalam cBot, indikator, dan plugin

  • Untuk cBot, Anda dapat mengonfigurasi variabel atau pengaturan yang memengaruhi eksekusi, seperti level Stop Loss dan Take Profit.
  • Untuk indikator, Anda dapat mengonfigurasi variabel yang memengaruhi output indikator, seperti periode yang dipertimbangkan atau sumber data yang akan digunakan.
  • Untuk plugin, Anda dapat menggunakan variabel konfigurasi, seperti opsi UI atau kunci API, yang menentukan bagaimana plugin berinteraksi dengan antarmuka atau layanan eksternal.

Seperti yang telah dijelaskan sebelumnya, cTrader mendukung jenis parameter berikut:

  • int
  • double
  • string
  • bool
  • DataSeries
  • TimeFrame
  • enum
  • Color
  • DateTime
  • DateOnly
  • TimeSpan
  • Symbol
  • Symbol[] (multi-symbol)
  • Enum[] (multi-enum)
  • TimeFrame[] (multi-period)

Catatan

Algoritma Python menggunakan parameter yang dapat disesuaikan yang dideklarasikan dalam file .cs mereka.

Buat indikator sederhana dengan parameter

Untuk mendemonstrasikan bagaimana Anda dapat menggunakan parameter dalam indikator kustom, kami akan membuat indikator baru dan menamainya Standard Deviation.

Untuk menghitung standar deviasi, pertama-tama kita perlu menghitung moving average dari harga. Selanjutnya, kami akan mendeklarasikan parameter yang diperlukan untuk indikator moving average, dimulai dengan periode moving average.

1
public int MaPeriod { get; set; }

Properti publik apa pun yang memiliki salah satu jenis yang didukung dapat menjadi parameter indikator. Untuk mengubah properti MaPeriod kami menjadi parameter, yang perlu kami lakukan adalah menambahkan deklarasi yang diperlukan.

1
2
[Parameter("MA Period")]
public int MaPeriod { get; set; }

Atribut Parameter menginstruksikan cTrader untuk menampilkan properti ini sebagai parameter di panel parameter indikator menggunakan nama yang ditentukan ("MA Period").

Seperti yang ditunjukkan di bawah ini, atribut Parameter juga memungkinkan Anda untuk mendefinisikan beberapa properti parameter seperti nama yang ditampilkan, nilai default, grup di mana parameter ini akan ditempatkan, nilai maksimum dan minimum, serta langkah perubahan parameter saat tombol panah atas dan bawah ditekan (hanya untuk nilai numerik).

1
2
[Parameter("SMA Period", DefaultValue = 14, Group = "MA", MaxValue = 100, MinValue = 1, Step = 1)]
public int MaPeriod { get; set; }

Sekarang kami akan menambahkan sisa parameter yang diperlukan untuk indikator moving average. Parameter MaType akan membantu kami menentukan jenis moving average. Ini adalah enum yang akan muncul sebagai menu dropdown di UI cTrader.

1
2
[Parameter("MA Type", Group = "MA")]
public MovingAverageType MaType { get; set; }

Parameter Source akan memberi pengguna opsi untuk menentukan sumber data untuk indikator moving average kami. Parameter ini bertipe DataSeries.

1
2
[Parameter("Source", Group = "MA")]
public DataSeries Source { get; set; }

Setelah parameter yang diperlukan dideklarasikan, kami akan mendefinisikan dan menginisialisasi moving average kami.

1
2
3
4
5
6
private MovingAverage movingAverage;

protected override void Initialize()
{
    movingAverage = Indicators.MovingAverage(Source, MaPeriod, MaType);
}

Pada titik ini, kami siap untuk mengimplementasikan perhitungan untuk standar deviasi kami. Template kode default sudah berisi properti Output yang dapat kami gunakan untuk menampilkan hasil perhitungan.

1
2
[Output("Result", LineColor = "Orange")]
public IndicatorDataSeries Result { get; set; }

Terakhir tetapi tidak kalah penting, kami akan mengimplementasikan perhitungan standar deviasi dalam metode Calculate().

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public override void Calculate(int index)
{
    var average = movingAverage.Result[index];

    double sum = 0;

    for (var period = 0; period < MaPeriod; period++)
    {
        sum += Math.Pow(Source[index - period] - average, 2.0);
    }

    Result[index] = Math.Sqrt(sum / MaPeriod);
}

Jika kami menambahkan indikator kami ke grafik, kami akan melihat semua parameter kami di jendela Tambahkan instance.

Tambahkan parameter tambahan

Dengan standar deviasi kami yang telah selesai, kami juga dapat menambahkan garis horizontal yang akan berfungsi sebagai ambang batas visual untuk indikator. Untuk tujuan ini, kami perlu menambahkan beberapa parameter lagi.

Yang pertama adalah parameter boolean yang akan menentukan apakah garis kami akan ditampilkan atau tidak.

1
2
[Parameter("Show Line", DefaultValue = true, Group = "Line")]
public bool ShowLine { get; set; }

Parameter LineLevel akan memungkinkan kami menentukan level harga di mana garis harus digambar.

1
2
[Parameter("Line Level", DefaultValue = 0.001, Step = 0.001, Group = "Line")]
public double LineLevel { get; set; }

Kami juga akan menambahkan parameter yang memungkinkan pemilihan warna garis.

1
2
[Parameter("Line Color", DefaultValue = "Blue", Group = "Line")]
public Color LineColor { get; set; }

Dengan semua parameter yang diperlukan, kami dapat menulis kode untuk menggambar garis pada grafik tempat indikator kami terpasang.

1
2
3
4
if (ShowLine)
{
    Chart.IndicatorAreas[0].DrawHorizontalLine("Line", LineLevel, LineColor);
}

Jika kami membangun indikator lagi dan menambahkan instance baru, kami akan dapat menyembunyikan/menampilkan garis, memindahkannya ke atas atau ke bawah, dan memilih warna yang kami inginkan sebagai warna garis.

Seperti yang ditunjukkan dalam contoh di bawah ini, parameter juga dapat digunakan untuk memastikan bahwa indikator kami hanya ditampilkan saat ditambahkan ke grafik untuk rentang waktu tertentu.

1
2
[Parameter("Timeframe")]
public TimeFrame TF { get; set; }

Dalam metode Initialize() kami akan memeriksa rentang waktu grafik tempat indikator kami terpasang. Jika tidak sama dengan nilai parameter TF, kami akan mencegah indikator ditampilkan.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
protected override void Initialize()
{
    if (TimeFrame != TF)
        return;

    movingAverage = Indicators.MovingAverage(Source, MaPeriod, MaType);

    if (ShowLine)
    {
        Chart.IndicatorAreas[0].DrawHorizontalLine("Line", LineLevel, LineColor);
    }
}

Kami berharap panduan ini bermanfaat dalam memahami parameter dan cara kerjanya dalam trading algo cTrader.