Ana içeriğe geç

Python algoritmalarında özelleştirilebilir parametreler

Python işlem botları, teknik göstergeler veya eklentiler geliştirirken, özelleştirilebilir parametreler eklemeniz ve yapılandırmanız gerekebilir. Bu makale, cTrader için bir Python algoritmasında özelleştirilebilir parametrelerin nasıl bildirileceğini ve kullanılacağını açıklar.

Not

cTrader Python algoritmaları için yürütme modeli, tüm özelleştirilebilir parametrelerin .cs dosyaları içinde bildirilmesini gerektiren bir .NET/C# motoru içerir. cTrader'da bir Python algoritması oluşturduğunuz her seferde, o algoritma için bir .cs dosyası otomatik olarak oluşturulur ve ilgili klasörde saklanır.

Konum

Bir Python algoritması için .cs dosyasının konumu, algoritma türüne (bir cBot, gösterge veya eklenti olup olmadığına) ve algoritmanın adına bağlıdır.

  • cBot'lar için: Documents/cAlgo/Sources/Robots/{cBot-name}/{cBot-name}/
  • Göstergeler için: Documents/cAlgo/Sources/Indicators/{Indicator-name}/{Indicator-name}/
  • Eklentiler için: Documents/cAlgo/Sources/Indicators/{Plugin-name}/{Plugin-name}/

Bir Python algoritması için .cs dosyasını bulmak üzere bu talimatları takip edebilirsiniz:

  1. cTrader Windows veya Mac'te algoritmaya sağ tıklayın, ardından Klasörde Göster'i seçin.

  2. {name-of-algorithm}/{name-of-algorithm} üzerinden gezinin, ardından dosyalar listesinden .cs dosyasını (C# kaynak dosyası) tanımlayın.

.cs dosyası genellikle algoritmayla aynı ada sahiptir, tüm boşluklar kaldırılmış olarak. Örneğin, Amazing Aroon cBot adlı bir algoritma, AmazingArooncBot.cs dosyasıyla sonuçlanır.

İpucu

Aynı klasörde, Amazing Aroon cBot_main.py gibi bir .py dosyasında depolanan algoritmanızın ana Python koduna erişebilirsiniz. Python dosyası basit bir adlandırma kuralına uyar:

  • cBot'lar için: cBot-adı_main.py
  • Göstergeler için: Gösterge-adı_main.py
  • Eklentiler için: Eklenti-adı_main.py

İçerik

.cs dosyasını Not Defteri veya Visual Studio Code gibi herhangi bir metin veya kod düzenleyicide açtığınızda buna benzer bir kod görmelisiniz:

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

Not

Python cBot'unuzu bir şablon kullanmadan sıfırdan oluşturduysanız boş bir sınıf görürsünüz.

.cs dosyasında tanımlanan herhangi bir parametre, kod düzenleyicide görüntülenen kodu barındıran ana Python dosyasında kullanılabilir. Aşağıdaki ana Python kodu, özelleştirilebilir parametrelerin kullanımını göstermektedir:

 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)

Avantajlar

Özelleştirilebilir parametrelerin birincil avantajı, cTrader Windows, Mac, Web ve Mobil dahil tüm cTrader uygulamalarının kullanıcı arayüzünde düzenlenebilir alanlar olarak görünmeleridir. Bu alanlardaki değerler, algoritmanın kaynak koduna erişmeye veya değiştirmeye gerek kalmadan herhangi bir ihtiyaca veya işleme uyacak şekilde kolayca değiştirilebilir.

cTrader Store içinde, satıcılar genellikle algoritmaların alıcılarının algoritmaları kendi hedeflerine ve iş akışlarına uyacak şekilde ayarlayabilmelerini sağlamak için özelleştirilebilir parametreler kullanır.

Image title