Langkau tajuk talian

Parameter boleh disesuaikan dalam algoritma Python

Apabila membangunkan robot dagangan Python, indikator teknikal atau plugin, anda mungkin perlu menambah dan mengkonfigurasi parameter yang boleh disesuaikan. Artikel ini menerangkan cara mengisytiharkan dan menggunakan parameter yang boleh disesuaikan dalam algoritma Python untuk cTrader.

Nota

Model pelaksanaan untuk algoritma Python cTrader melibatkan enjin .NET/C#, yang memerlukan semua parameter yang boleh disesuaikan diisytiharkan dalam fail .cs. Setiap kali anda mencipta algoritma Python dalam cTrader, fail .cs untuk algoritma tersebut dijana secara automatik dan disimpan dalam folder yang berkaitan.

Lokasi

Lokasi fail .cs untuk algoritma Python bergantung pada jenis algoritma, sama ada ia adalah cBot, indikator atau plugin, serta nama algoritma tersebut.

  • 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 boleh mengikuti arahan ini untuk mencari fail .cs untuk algoritma Python:

  1. Klik kanan algoritma dalam cTrader Windows atau Mac, kemudian pilih Tunjukkan dalam folder.

  2. Navigasi melalui {nama-algoritma}/{nama-algoritma}, kemudian kenal pasti fail .cs (fail sumber C#) dari senarai fail.

Fail .cs biasanya mempunyai nama yang sama dengan algoritma, dengan semua ruang dikeluarkan. Sebagai contoh, algoritma bernama Amazing Aroon cBot menghasilkan fail AmazingArooncBot.cs.

Petua

Dalam folder yang sama, anda boleh mengakses kod Python utama untuk algoritma anda, disimpan dalam fail .py seperti Amazing Aroon cBot_main.py. Fail Python mengikut konvensyen penamaan yang mudah:

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

Kandungan

Buka fail .cs dalam mana-mana penyunting teks atau kod, seperti NotePad atau Visual Studio code dan anda akan melihat kod yang serupa 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; }
}

Nota

Anda akan melihat kelas kosong jika anda mencipta cBot Python anda dari awal tanpa menggunakan templat.

Mana-mana parameter yang diisytiharkan dalam fail .cs boleh digunakan dalam fail Python utama, yang menempatkan kod yang dipaparkan dalam penyunting kod. Kod Python utama di bawah menggambarkan penggunaan parameter yang boleh 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)

Kelebihan

Kelebihan utama parameter yang boleh disesuaikan ialah ia muncul sebagai medan yang boleh diedit dalam UI semua aplikasi cTrader, termasuk cTrader Windows, Mac, Web dan Mobile. Nilai dalam medan ini boleh diubah suai dengan mudah untuk memenuhi sebarang keperluan atau operasi, tanpa perlu mengakses atau mengubah suai kod sumber algoritma.

Dalam cTrader Store, penjual sering menggunakan parameter yang boleh disesuaikan untuk memastikan bahawa pembeli algoritma dapat menyesuaikan algo untuk mencapai matlamat dan aliran kerja mereka.

Image title