Ana içeriğe geç

cBot'ların temel türleri

cBot'lar, kodlarına ve mantıklarına bağlı olarak, tam otomatik işlem yapmadan manuel işlem yapma stratejilerinin uygulanmasına destek sağlamaya kadar çeşitli roller ve işlevler yerine getirebilen çok yönlü araçlardır. Bu makalede ve ilgili videosunda, cBot'ların temel türlerini tanımlayacak, temel farklılıklarını özetleyecek ve çeşitli türlerde cBot'lar oluşturmak ve kullanmak için bazı en iyi uygulamaları listeleyeceğiz.

Genel olarak konuşursak, cBot'ların dört temel türü vardır.

Not

Aşağıdaki kategoriler tamamen cBot davranışlarına göre farklılık gösterir. Gerçek cBot kodunda hiçbir kategori belirtilmez. Ayrıca, bazı geliştiriciler cBot'ların özel sınıflandırmalarını da oluşturabilir.

  • Otomatik alım satım stratejileri - adından da anlaşılacağı gibi, bu tür cBot'lar alım satım stratejilerini otonom olarak yürütür. Örneğin, bir Three black crows ve three white soldiers cBot'u art arda üç yeşil mumla karşılaştıktan sonra yeni bir alış emri ve art arda üç kırmızı mumla karşılaştığında yeni bir satış emri verir.
  • Betikler - bu türe ait cBot'lar başlangıçta bir eylem gerçekleştirir ve yürütme tamamlandıktan sonra durur. Örneğin, bir betik cBot'u, yönleri, hacimleri veya enstrümanları ne olursa olsun, şu anda açık olan tüm pozisyonlar için bir zarar durdur belirleyebilir.
  • İşlem yardımcıları - manuel veya otomatik alım satım stratejisini tamamlayıcı nitelikte faydalı bir eylem gerçekleştirmek üzere tasarlanmıştır. Örneğin, bu tür bir cBot, cTrader tarafından sunulan yerleşik takip eden zarar durdur işlevselliğinden farklı özel kurallar kullanarak takip eden zarar durdur emirlerinizi yönetebilir.
  • İşlem panelleri - bu tür cBot'lar otonom olarak işlem yapmaz; bunun yerine, çeşitli amaçlar için kullanılabilecek özel kontroller oluştururlar. Örneğin, bir cBot, bir Forex haber toplayıcısının WebView'ını başlatabilir ve WebView içinde özel al ve sat düğmelerinin yanı sıra bir sembol seçiciyi entegre ederek kullanıcının haber sitesinden ayrılmadan işlem yapmasına olanak tanır.

Aşağıdaki alt bölümlerde, yukarıdaki türlerin her birini ayrıntılı olarak ele alacak, faydalarını ve sınırlamalarını özetleyecek ve çeşitli kullanım durumları önereceğiz.

Algo alım satım stratejileri

Otomatik alım satım stratejisi türüne ait cBot'lar karmaşık ama güçlüdür. Risk yönetimi, pozisyon büyüklüğü ve teknik analiz gibi tüm yönlerini içeren bir alım satım stratejisini doğru bir şekilde uygulamaları gerekir.

Varsayılan yeni cBot şablonunu aşağıdaki kodla değiştirerek iki dakikadan daha kısa sürede basit bir otomatik alım satım stratejisi oluşturabilirsiniz.

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

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicTrendBot : Robot
    {
        protected override void OnBar()
        {
            if (Bars.ClosePrices.Last(1) > Bars.ClosePrices.Last(2))
            {
                ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000, "FollowTrend");
            }
            else if (Bars.ClosePrices.Last(1) < Bars.ClosePrices.Last(2))
            {
                ExecuteMarketOrder(TradeType.Sell, SymbolName, 1000, "FollowTrend");
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicTrendBot():
    def on_bar(self):
        if api.Bars.ClosePrices.Last(1) > api.Bars.ClosePrices.Last(2):
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, 1000, "FollowTrend")
        elif api.Bars.ClosePrices.Last(1) < api.Bars.ClosePrices.Last(2):
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, 1000, "FollowTrend")

cBot her barda yeni bir pozisyon açar. Fiyat bir önceki bara göre daha önceki barda artmışsa uzun bir pozisyon açılır. Tersine, fiyat düşmüşse kısa bir pozisyon açılır.

Geriye dönük test ve optimizasyon

Otomatik alım satım stratejileri genellikle birçok hareketli parça ve parametre içerir. Sonuç olarak, bu tür cBot'ların canlı hesaplarda başlatılmadan önce kapsamlı bir şekilde geriye dönük test edilmesi ve optimize edilmesi gerekir. Neyse ki, cTrader sizin için geriye dönük testi ve optimizasyonu halledebilecek yerleşik araçlar sunar.

cTrader komut satırı aracı (CLI)

Otomatik alım satım stratejileri, çeşitli teknik analiz sinyallerine tepki verebilmek için genellikle uzun süreler boyunca çalışmalıdır. Bu durumlarda RAM ve CPU tüketiminden tasarruf etmek için cTrader Windows'u hiç açmadan cBot'ları cTrader CLI aracılığıyla başlatabilirsiniz (bu tür cBot'ların yanı sıra herhangi bir cBot'u cTrader CLI aracılığıyla başlatmanın mümkün olduğunu unutmayın).

Betikler

Betikler genellikle manuel olarak yapılması zor veya zaman alıcı olacak bir tür eylemi gerçekleştirmek için gereklidir. Bu eylemler genellikle cBot başlangıcında gerçekleştirilir, böylece bir betiği başlatabilir, çalışmasının sonuçlarını gözlemleyebilir ve ardından RAM ve CPU tüketiminden tasarruf etmek için başarılı olduğunda örneğini durdurabilirsiniz.

Örneğin, bir betik, brüt kârı bir trader'ın hesap yatırma para biriminin 50 birimini aşan tüm pozisyonları kapatabilir. Etkili bir şekilde, betik, istediğiniz zaman tetikleyebileceğiniz tüm açık pozisyonlar için evrensel bir kâr al olarak işlev görecektir. Bu betiğin kodu şöyle görünür.

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

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicScriptBot : Robot
    {

        protected override void OnStart()
        {
            foreach (var position in Positions) 
            {
                if (position.GrossProfit > 50) 
                {
                    ClosePosition(position);
                }
            }
            Stop();
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicScriptBot():
    def on_start(self):
        for position in api.Positions:
            if position.GrossProfit > 50:
                api.ClosePosition(position)
        api.Stop()

cBot'u başlattıktan sonra, birkaç kârlı pozisyonun kademeli olarak kapandığını görmeliyiz.

Betikleri durdurma

Betiklerin yalnızca belirli bir eylemi bir kez yürütmesi gerektiğinden, cTrader'a yürütme başarıyla tamamlandıktan sonra bir betiği hemen kapatmasını söyleyebilirsiniz. Yukarıdaki örnekte gösterildiği gibi, bunu Stop() yöntemini çağırarak yapabilirsiniz.

İşlem yardımcıları

İşlem yardımcılarının amacı, düzenli olarak faydalı eylemler gerçekleştirmektir. Bu onları betiklere benzer kılsa da, betikler yalnızca örnek başlangıcında bir eylem gerçekleştirir. Buna karşılık, işlem yardımcıları piyasa koşullarına veya diğer faktörlere sürekli tepki vermek ve belirli kalıplara yanıt olarak operasyonları yürütmek üzere tasarlanmıştır.

Örneğin, pozisyonlarınızı açar açmaz otomatik olarak hedging yapan bir cBot düşünün. Bu cBot'un kodu şöyle görünebilir.

 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
32
33
using System;
using cAlgo.API;
using cAlgo.API.Collections;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicAssistantBot : Robot

    {
        private bool hasHedgedPosition = false;

        protected override void OnStart()
        {
            Positions.Opened += Positions_Opened;
        }

        private void Positions_Opened(PositionOpenedEventArgs args) 
        {
            if (!hasHedgedPosition) 
            {
                hasHedgedPosition = true;
                var position = args.Position;
                var oppositeTradeType = position.TradeType == TradeType.Buy ? TradeType.Sell : TradeType.Buy;
                ExecuteMarketOrder(oppositeTradeType, SymbolName, position.VolumeInUnits / 2);
            }
            else 
            {
                hasHedgedPosition = false;            
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicAssistantBot():
    def on_start(self):
        self.hasHedgedPosition = False
        api.Positions.Opened += self.positions_opened

    def positions_opened(self, args):
        if not self.hasHedgedPosition:
            self.hasHedgedPosition = True
            position = args.Position
            opposite = TradeType.Sell if position.TradeType == TradeType.Buy else TradeType.Buy
            api.ExecuteMarketOrder(opposite, api.SymbolName, position.VolumeInUnits / 2)
        else:
            self.hasHedgedPosition = False

Bir pozisyon açıldığında, cBot hemen ters yönde başka bir pozisyon açmaya çalışır; bu yeni pozisyonun hacmi, orijinal pozisyonun hacminin tam olarak yarısıdır.

Sonsuz bir döngüyü önlemek için hasHedgedPosition alanını kullandığımızı unutmayın, böylece cBot yeni bir pozisyonu yalnızca bir kez hedging yapar.

Geri arama işlevleri

İşlem yardımcıları genellikle çeşitli olaylar için işleyici görevi gören geri arama işlevlerini kullanır. Belirli bir sınıf için hangi olayları işleyebileceğinizi öğrenmek için yerleşik API belgelerini açın, gerekli sınıfı arayın ve içindekiler tablosundaki Olaylar bölümüne gidin.

İşlem panelleri

İşlem panelleri, etkileşimde bulunulduğunda çeşitli eylemleri tetikleyen özel kontrolleri görüntüler. Genellikle varsayılan cTrader kullanıcı arayüzüne yaşam kalitesi iyileştirmeleri sağlarlar. Örneğin, bir cBot, tıklandığında cTrader'da önceden tanımlanmış bir hacim için bir piyasa emri yürüten bir Al düğmesi görüntüleyebilir.

Böyle bir cBot oluşturmak için aşağıdaki kodu kullanmanız yeterlidir.

 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
32
using System;
using cAlgo.API;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicPanelBot : Robot
    {

        Button buttonBuyOrder;

        protected override void OnStart()
        {

            buttonBuyOrder = new Button
            {
                Text = "Buy",
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center,
            };

            buttonBuyOrder.Click += ButtonBuyOrder_Click;

            Chart.AddControl(buttonBuyOrder);
        }

        private void ButtonBuyOrder_Click(ButtonClickEventArgs args) 
        {
            ExecuteMarketOrder(TradeType.Buy, SymbolName, 10000);
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicPanelBot():
    def on_start(self):
        self.buttonBuyOrder = Button()
        self.buttonBuyOrder.Text = "Buy"
        self.buttonBuyOrder.HorizontalAlignment = HorizontalAlignment.Center
        self.buttonBuyOrder.VerticalAlignment = VerticalAlignment.Center
        self.buttonBuyOrder.Click += self.button_buy_order_click
        api.Chart.AddControl(self.buttonBuyOrder)

    def button_buy_order_click(self, args):
        api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, 10000)

Al düğmesine tıklandığında, 10.000 birimlik yeni bir piyasa emri verilir. Düğmenin uygun yerleşimi, yeni piyasa fırsatlarına hızlı bir şekilde tepki vermeyi sağlar.

İşlem panellerini diğer cBot türleriyle birleştirme

İşlem panelleri, çeşitli işlemleri gerçekleştirmenizi sağlayan özel kullanıcı arayüzü kontrolleri sunar. Bunları diğer cBot türleriyle birlikte kullanabilirsiniz. Örneğin, bir işlem paneli, tıklandığında yukarıdaki işlem yardımcısı örneğine benzer şekilde, şu anda açık olan tüm pozisyonları hedging yapan özel bir Hedge Et düğmesi içerebilir.

Özet

Dört cBot kategorisinin de geçerli kullanım alanları vardır ve tercihlerinize bağlı olarak birleştirilebilir. Örneğin, mümkün olan en iyi sonuçları elde etmek için aynı anda otomatik alım satım stratejisi ve bir işlem yardımcısı başlatabilirsiniz. Tercih ettiğiniz alım satım yaklaşımının eksiksiz ve hatasız bir şekilde yürütüldüğünden emin olmak için çeşitli türlerde cBot'larla deneyler yapabilirsiniz.

Image title