Lewati ke isi

Parameter yang dapat disesuaikan dalam algoritma Python

Saat mengembangkan bot trading Python, indikator teknis atau plugin, Anda mungkin perlu menambahkan dan mengonfigurasi parameter yang dapat disesuaikan. Artikel ini menjelaskan cara mendeklarasikan dan menggunakan parameter yang dapat disesuaikan dalam algoritma Python untuk cTrader.

Catatan

Model eksekusi untuk algoritma Python cTrader melibatkan mesin .NET/C#, yang mengharuskan semua parameter yang dapat disesuaikan dideklarasikan dalam file .cs. Setiap kali Anda membuat algoritma Python di cTrader, file .cs untuk algoritma tersebut akan dibuat secara otomatis dan disimpan di folder yang relevan.

Lokasi

Lokasi file .cs untuk algoritma Python bergantung pada jenis algoritma, apakah itu cBot, indikator, atau plugin, serta nama algoritma.

  • Untuk cBot: Documents/cAlgo/Sources/Robots/{nama-cBot}/{nama-cBot}/
  • Untuk indikator: Documents/cAlgo/Sources/Indicators/{nama-Indikator}/{nama-Indikator}/
  • Untuk plugin: Documents/cAlgo/Sources/Indicators/{nama-Plugin}/{nama-Plugin}/

Anda dapat mengikuti instruksi ini untuk menemukan file .cs untuk algoritma Python:

  1. Klik kanan algoritma di cTrader Windows atau Mac, lalu pilih Show in folder.

  2. Telusuri {nama-algoritma}/{nama-algoritma}, lalu identifikasi file .cs (file sumber C#) dari daftar file.

File .cs biasanya memiliki nama yang sama dengan algoritma, dengan semua spasi dihapus. Misalnya, algoritma bernama Amazing Aroon cBot menghasilkan file AmazingArooncBot.cs.

Kiat

Di folder yang sama, Anda dapat mengakses kode Python utama untuk algoritma Anda, yang disimpan dalam file .py seperti Amazing Aroon cBot_main.py. File Python mengikuti konvensi penamaan sederhana:

  • Untuk cBot: nama-cBot_main.py
  • Untuk indikator: nama-Indikator_main.py
  • Untuk plugin: nama-Plugin_main.py

Konten

Buka file .cs di editor teks atau kode apa pun, seperti NotePad atau Visual Studio code dan Anda akan melihat kode yang mirip dengan ini:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using cAlgo.API;

namespace cAlgo.Robots;

[Robot(AccessRights = AccessRights.None, AddIndicators = true)]
public partial class AmazingArooncBot : Robot
{
    [Parameter("Volume (Lots)", DefaultValue = 0.01)]
    public double VolumeInLots { get; set; }

    [Parameter("Stop Loss (Pips)", DefaultValue = 10, MaxValue = 100, MinValue = 1, Step = 1)]
    public double StopLossInPips { get; set; }

    [Parameter("Take Profit (Pips)", DefaultValue = 10, MaxValue = 100, MinValue = 1, Step = 1)]
    public double TakeProfitInPips { get; set; }

    [Parameter("Label", DefaultValue = "AmazingArooncBot")]
    public string Label { get; set; }

    [Parameter("Periods", DefaultValue = 25, Group = "Aroon", MinValue = 2)]
    public int Periods { get; set; }
}

Catatan

Anda akan melihat kelas kosong jika Anda membuat cBot Python dari awal tanpa menggunakan template.

Parameter apa pun yang dideklarasikan dalam file .cs dapat digunakan dalam file Python utama, yang menampung kode yang ditampilkan di editor kode. Kode Python utama di bawah ini menggambarkan penggunaan parameter yang dapat disesuaikan:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class AmazingArooncBot():
    def on_start(self):
        self.volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.VolumeInLots)
        self.aroon = api.Indicators.Aroon(api.Periods)

    def on_bar_closed(self):
        if self.aroon.Up.Last(0) > self.aroon.Down.Last(0) and self.aroon.Up.Last(1) < self.aroon.Down.Last(1):
            self.close_positions(TradeType.Sell)
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)
        elif self.aroon.Up.Last(0) < self.aroon.Down.Last(0) and self.aroon.Up.Last(1) > self.aroon.Down.Last(1):
            self.close_positions(TradeType.Buy)
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)

    def get_bot_positions(self):
        return api.Positions.FindAll(api.Label)

    def close_positions(self, tradeType):
        for position in self.get_bot_positions():
            if position.TradeType != tradeType:
                continue
            api.ClosePosition(position)

Keuntungan

Keuntungan utama dari parameter yang dapat disesuaikan adalah bahwa mereka muncul sebagai bidang yang dapat diedit di UI semua aplikasi cTrader, termasuk cTrader Windows, Mac, Web, dan Mobile. Nilai dalam bidang ini dapat dengan mudah dimodifikasi untuk memenuhi kebutuhan atau operasi apa pun, tanpa perlu mengakses atau memodifikasi kode sumber algoritma.

Di Toko cTrader, penjual sering menggunakan parameter yang dapat disesuaikan untuk memastikan bahwa pembeli algoritma dapat menyesuaikan algo sesuai dengan tujuan dan alur kerja mereka.

Image title