Lewati ke isi

Jenis-jenis utama cBot

cBot adalah alat serbaguna yang, tergantung pada kode dan logikanya, dapat memenuhi berbagai peran dan fungsi mulai dari trading otomatis sepenuhnya hingga memberikan dukungan untuk implementasi strategi trading manual. Dalam artikel ini dan video terkait, kami akan mendefinisikan jenis-jenis utama cBot, menguraikan perbedaan utama mereka dan mencantumkan beberapa praktik terbaik untuk membuat dan menggunakan cBot dari berbagai jenis.

Secara umum, ada empat jenis utama cBot.

Catatan

Kategori di bawah ini berbeda murni berdasarkan perilaku cBot. Tidak ada kategori yang ditentukan dalam kode cBot yang sebenarnya. Selain itu, beberapa pengembang juga dapat membuat klasifikasi kustom cBot.

  • Strategi trading otomatis - seperti yang tersirat oleh namanya, cBot jenis ini secara otonom mengeksekusi strategi trading. Misalnya, cBot Three black crows & three white soldiers menempatkan order beli baru setelah menemui tiga lilin hijau berturut-turut, dan order jual baru ketika menghadapi tiga lilin merah berturut-turut.
  • Skrip - cBot yang termasuk dalam jenis ini melakukan tindakan saat mulai dan berhenti setelah eksekusi selesai. Misalnya, cBot skrip dapat menetapkan stop loss untuk semua posisi yang saat ini terbuka terlepas dari arah, volume atau instrumennya.
  • Asisten trading - dirancang untuk melakukan semacam tindakan membantu yang melengkapi strategi trading manual atau otomatis. Misalnya, cBot jenis ini dapat mengelola trailing stop loss Anda menggunakan aturan kustom yang berbeda dari fungsionalitas trailing stop loss bawaan yang ditawarkan oleh cTrader.
  • Panel trading - cBot jenis ini tidak melakukan trading secara otonom; sebaliknya, mereka membuat kontrol kustom yang dapat digunakan untuk berbagai tujuan. Misalnya, cBot dapat meluncurkan WebView dari agregator berita Forex sambil mengintegrasikan tombol beli dan jual kustom serta pemilih simbol di dalam WebView, memungkinkan pengguna untuk melakukan trading tanpa meninggalkan situs berita.

Dalam sub-bagian di bawah ini, kami membahas masing-masing jenis di atas secara detail, menguraikan manfaat dan keterbatasannya, serta menyarankan berbagai kasus penggunaan.

Strategi trading algo

cBot yang termasuk dalam jenis strategi trading otomatis bersifat kompleks namun kuat. Mereka harus mengimplementasikan strategi trading dengan benar termasuk semua aspeknya seperti manajemen risiko, pengaturan ukuran posisi dan analisis teknikal.

Anda dapat membuat strategi trading otomatis sederhana dalam waktu kurang dari dua menit dengan hanya mengganti template cBot baru default dengan kode di bawah ini.

 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 membuka posisi baru pada setiap bar. Posisi long dibuka jika harga meningkat di bar sebelumnya dibandingkan dengan bar sebelumnya. Sebaliknya, posisi short dibuka jika harga telah turun.

Backtesting dan optimisasi

Strategi trading otomatis biasanya mencakup banyak bagian yang bergerak dan parameter. Akibatnya, cBot seperti itu sering perlu dilakukan backtesting dan dioptimalkan secara ekstensif sebelum diluncurkan pada akun riil. Untungnya, cTrader menyediakan alat bawaan yang dapat menangani backtesting dan optimisasi untuk Anda.

Alat command-line cTrader (CLI)

Strategi trading otomatis biasanya perlu berjalan untuk periode waktu yang lama sehingga mereka dapat bereaksi terhadap berbagai sinyal analisis teknikal. Untuk menghemat konsumsi RAM dan CPU dalam kasus ini, Anda dapat meluncurkan cBot melalui CLI cTrader tanpa pernah membuka cTrader Windows (perhatikan bahwa dimungkinkan untuk meluncurkan cBot apa pun melalui CLI cTrader, tidak hanya cBot jenis ini).

Skrip

Skrip biasanya diperlukan untuk melakukan suatu tindakan yang sulit atau memakan waktu jika dilakukan secara manual. Tindakan ini biasanya dilakukan saat cBot dimulai sehingga Anda dapat meluncurkan skrip, mengamati hasil kerjanya, dan kemudian menghentikan instansinya setelah berhasil untuk menghemat penggunaan RAM dan CPU.

Misalnya, skrip dapat menutup semua posisi yang laba kotornya melebihi 50 unit mata uang deposit akun trader. Pada dasarnya, skrip akan bertindak sebagai take profit universal untuk semua posisi terbuka yang dapat Anda aktifkan kapan saja. Berikut adalah bagaimana kode untuk skrip ini akan terlihat.

 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()

Setelah meluncurkan cBot, kita akan melihat beberapa posisi yang menguntungkan secara bertahap ditutup.

Menghentikan skrip

Karena skrip hanya perlu menjalankan tindakan tertentu sekali, Anda dapat menginstruksikan cTrader untuk segera menutup skrip setelah eksekusi selesai dengan sukses. Seperti yang ditunjukkan dalam contoh di atas, Anda dapat melakukannya dengan memanggil metode Stop().

Asisten trading

Tujuan asisten trading adalah untuk secara teratur melakukan tindakan yang membantu. Meskipun ini membuat mereka mirip dengan skrip, skrip hanya melakukan tindakan saat instansi dimulai. Sebaliknya, asisten trading dirancang untuk terus bereaksi terhadap kondisi pasar atau faktor lain, dan melaksanakan operasi sebagai respons terhadap pola tertentu.

Misalnya, pertimbangkan cBot yang secara otomatis melakukan hedging posisi Anda segera setelah Anda membukanya. Kode untuk cBot ini bisa terlihat sebagai berikut.

 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

Setelah membuka posisi, cBot segera mencoba membuka posisi lain dalam arah yang berlawanan; volume posisi baru ini tepat setengah dari volume posisi asli.

Perhatikan bahwa kita menggunakan field hasHedgedPosition untuk menghindari loop tak terbatas sehingga cBot hanya melakukan hedging posisi baru sekali.

Fungsi callback

Asisten trading sering menggunakan fungsi callback yang bertindak sebagai penangan untuk berbagai peristiwa. Untuk mengetahui peristiwa apa saja yang dapat Anda tangani untuk kelas tertentu, buka dokumentasi API bawaan, cari kelas yang diperlukan, dan navigasikan ke bagian Events di daftar isi.

Panel trading

Panel trading menampilkan kontrol kustom yang memicu berbagai tindakan ketika berinteraksi dengannya. Mereka biasanya memberikan peningkatan kualitas hidup pada UI cTrader default. Misalnya, cBot dapat menampilkan tombol Beli yang, ketika diklik, mengeksekusi order pasar untuk volume yang telah ditentukan sebelumnya di cTrader.

Untuk membuat cBot seperti itu, cukup gunakan kode di bawah ini.

 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)

Setelah mengeklik tombol Beli, order pasar baru untuk 10.000 unit ditempatkan. Penempatan tombol yang nyaman memungkinkan reaksi cepat terhadap peluang pasar baru.

Menggabungkan panel trading dengan jenis cBot lainnya

Panel trading menyediakan kontrol UI kustom yang memungkinkan Anda melakukan berbagai operasi. Anda dapat menggunakannya bersama dengan jenis cBot lainnya. Misalnya, panel trading mungkin menyertakan tombol Hedge kustom yang, ketika diklik, melakukan hedging semua posisi yang saat ini terbuka, mirip dengan contoh asisten trading di atas.

Ringkasan

Keempat kategori cBot memiliki kegunaan yang valid dan dapat dikombinasikan sesuai preferensi Anda. Misalnya, Anda dapat meluncurkan strategi trading otomatis dan asisten trading secara bersamaan untuk mencapai hasil terbaik yang mungkin. Anda dapat bereksperimen dengan cBot dari berbagai jenis untuk memastikan bahwa pendekatan trading pilihan Anda dijalankan sepenuhnya dan tanpa kesalahan.

Image title