Langkau tajuk talian

Trend cBot

Gambaran keseluruhan strategi

Trend cBot melaksanakan strategi di mana dua Moving Averages (MA) digunakan untuk mengesan aliran dan membuat keputusan dagangan. Algoritma ini mengira MA pantas dan MA perlahan, membandingkan nilai-nilai mereka dari masa ke masa dan mengenal pasti titik persilangan untuk menjana isyarat beli atau jual.

Memandangkan Trend cBot bergantung pada persilangan MA untuk mengesan peralihan momentum, ia paling berkesan dalam pasaran dengan aliran yang jelas dan berterusan. Dengan kata lain, algo ini berfungsi dengan baik dengan simbol yang menunjukkan pergerakan berarah yang kuat, sama ada menaik atau menurun.

Penciptaan cBot

Pelajari cara mencipta cBot, menggunakan sama ada C# atau Python, dalam panduan langkah demi langkah kami.

Kod Trend cBot tersedia dalam repositori awam kami C# dan Python. Kod yang sama disediakan sebagai templat dalam panduan penciptaan algoritma dalam cTrader Windows atau Mac, atau anda hanya boleh menyalin dan menggunakan coretan di bawah:

 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using cAlgo.API;
using cAlgo.API.Indicators;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, AddIndicators = true)]
    public class SampleTrendcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("MA Type", Group = "Moving Average")]
        public MovingAverageType MAType { get; set; }

        [Parameter("Source", Group = "Moving Average")]
        public DataSeries SourceSeries { get; set; }

        [Parameter("Slow Periods", Group = "Moving Average", DefaultValue = 10)]
        public int SlowPeriods { get; set; }

        [Parameter("Fast Periods", Group = "Moving Average", DefaultValue = 5)]
        public int FastPeriods { get; set; }


        private MovingAverage slowMa;
        private MovingAverage fastMa;
        private const string label = "Sample Trend cBot";

        protected override void OnStart()
        {
            fastMa = Indicators.MovingAverage(SourceSeries, FastPeriods, MAType);
            slowMa = Indicators.MovingAverage(SourceSeries, SlowPeriods, MAType);
        }

        protected override void OnTick()
        {
            var longPosition = Positions.Find(label, SymbolName, TradeType.Buy);
            var shortPosition = Positions.Find(label, SymbolName, TradeType.Sell);

            var currentSlowMa = slowMa.Result.Last(0);
            var currentFastMa = fastMa.Result.Last(0);
            var previousSlowMa = slowMa.Result.Last(1);
            var previousFastMa = fastMa.Result.Last(1);

            if (previousSlowMa > previousFastMa && currentSlowMa <= currentFastMa && longPosition == null)
            {
                if (shortPosition != null)
                    ClosePosition(shortPosition);

                ExecuteMarketOrder(TradeType.Buy, SymbolName, VolumeInUnits, label);
            }
            else if (previousSlowMa < previousFastMa && currentSlowMa >= currentFastMa && shortPosition == null)
            {
                if (longPosition != null)
                    ClosePosition(longPosition);

                ExecuteMarketOrder(TradeType.Sell, SymbolName, VolumeInUnits, label);
            }
        }

        private double VolumeInUnits
        {
            get { return Symbol.QuantityToVolumeInUnits(Quantity); }
        }
    }
}
 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
34
35
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleTrendcBot():
    Label = "Sample Trend cBot"

    def on_start(self):
        self.volume_in_units = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
        self.fastMa = api.Indicators.MovingAverage(api.SourceSeries, api.FastPeriods, api.MAType)
        self.slowMa = api.Indicators.MovingAverage(api.SourceSeries, api.SlowPeriods, api.MAType)

    def on_tick(self):
        longPosition = api.Positions.Find(self.Label, api.SymbolName, TradeType.Buy)
        shortPosition = api.Positions.Find(self.Label, api.SymbolName, TradeType.Sell)

        currentSlowMa = self.slowMa.Result.Last(0)
        currentFastMa = self.fastMa.Result.Last(0)
        previousSlowMa = self.slowMa.Result.Last(1)
        previousFastMa = self.fastMa.Result.Last(1)

        if previousSlowMa > previousFastMa and currentSlowMa <= currentFastMa and longPosition is None:
            if shortPosition is not None:
                api.ClosePosition(shortPosition)
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volume_in_units, self.Label)
        elif previousSlowMa < previousFastMa and currentSlowMa >= currentFastMa and shortPosition is None:
            if longPosition is not None:
                api.ClosePosition(longPosition)
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, self.volume_in_units, self.Label)

Integrasi indikator

Moving average ialah penunjuk teknikal popular yang melicinkan data harga untuk mengenal pasti aliran dalam tempoh tertentu. Penunjuk purata bergerak termasuk Simple Moving Average (SMA), Exponential Moving Average (EMA), Time Series, Triangular, Weighted, Welles Wilder Smoothing, Hull, dsb.

Trend cBot menggunakan dua MA untuk memantau aliran dalam pasaran:

  • Fast MA – bertindak balas lebih pantas terhadap perubahan harga dan biasanya mewakili trend jangka pendek.
  • Slow MA – bertindak balas lebih perlahan terhadap perubahan harga dan mewakili trend jangka panjang.

cBot memerhati peristiwa persilangan antara MA pantas dan MA perlahan dan menggunakannya untuk menjana isyarat:

  • Isyarat beli – apabila slow MA melintasi di bawah fast MA, ia ditafsirkan sebagai momentum menaik dan isyarat beli dijana.
  • Isyarat jual – apabila fast MA melintasi di bawah slow MA, ia ditafsirkan sebagai momentum menurun, dan isyarat jual dijana.

Jika isyarat baharu dijana semasa posisi dagangan bertentangan dibuka, seperti isyarat beli apabila posisi jual dibuka, cBot menutup posisi sedia ada dan membuka yang baharu. Persediaan ini memastikan hanya satu posisi dibuka pada satu masa.

Pengiraan dan logik

Persediaan awal

cBot memulakan dua MA dalam kaedah OnStart(), yang dipanggil apabila cBot bermula.

MA dikira menggunakan tempoh yang berbeza dalam siri data. fastMA dikira dengan FastPeriods, manakala slowMA dikira dengan SlowPeriods.

Pengiraan MA masa nyata

Logik utama untuk keputusan dagangan dilaksanakan dalam kaedah OnTick(), yang dipanggil setiap kali tick baharu (data harga) diterima. Kedua-dua MA dikira secara berterusan menggunakan formula terbina dalam cTrader untuk MAType yang dipilih dan dikemas kini pada setiap tick.

cBot mendapatkan nilai semasa dan sebelumnya MA dan kemudian meneruskan kepada keadaan persilangan. cBot membandingkan nilai semasa dan sebelumnya MA untuk menentukan sama ada terdapat persilangan:

  • Pengesanan trend menaik – jika slowMA melintasi di bawah fastMA, ia ditafsirkan sebagai momentum menaik dan menghasilkan isyarat beli.
  • Pengesanan trend menurun – jika fastMA melintasi di bawah slowMA, ia ditafsirkan sebagai momentum menurun dan menghasilkan isyarat jual.

Pelaksanaan dagangan

Selepas mengesan persilangan, cBot melaksanakan dagangan berdasarkan isyarat yang dijana:

  • Pelaksanaan dagangan untuk isyarat beli – cBot memeriksa dan menutup sebarang posisi jual (short) yang terbuka. Ia kemudian membuka posisi beli baharu.
  • Pelaksanaan dagangan untuk isyarat jual – cBot memeriksa dan menutup sebarang posisi beli (long) yang terbuka. Ia kemudian membuka posisi jual baharu.

Parameter

Parameter Unit Definisi Petua
Kuantiti Lot Volum setiap dagangan. Pedagang scalping yang memberi tumpuan kepada pergerakan harga kecil mungkin memilih saiz lot kecil untuk meminimumkan risiko sambil membuat banyak dagangan dalam tempoh yang singkat.

Pedagang swing yang memegang posisi untuk tempoh yang lebih lama mungkin menggunakan saiz lot besar kerana mereka menjangkakan pergerakan besar dalam pasaran dan ingin memaksimumkan potensi keuntungan mereka.
Jenis MA — Jenis moving average. Dalam pasaran yang kurang tidak menentu, pedagang mungkin lebih suka SMA kerana ia melicinkan data harga dengan lebih berkesan dan mengurangkan peluang cBot disesatkan oleh turun naik jangka pendek.

Dalam pasaran yang tidak menentu, pengguna mungkin lebih suka EMA kerana keupayaannya untuk bertindak balas dengan cepat terhadap perubahan harga dan menangkap pembalikan aliran awal.
Sumber — Data harga yang digunakan untuk mengira moving average. Pilihan yang tersedia termasuk harga penutup, harga pembukaan, harga tinggi dan harga rendah. Pedagang konservatif mungkin menggunakan harga penutup sebagai sumber mereka kerana ia mewakili harga akhir lilin dan cenderung lebih boleh dipercayai.

Pedagang yang lebih agresif mungkin lebih suka harga tinggi atau harga rendah jika mereka ingin menangkap pembalikan aliran atau peluang pecah keluar pada titik ekstrem dalam julat harga.
Tempoh Perlahan — Bilangan tempoh yang digunakan untuk mengira moving average perlahan. Pedagang harian mungkin menetapkan nilai rendah untuk memberi tumpuan kepada aliran jangka pendek dan menangkap peluang yang kerap sepanjang hari.

Pedagang yang mensasarkan aliran jangka panjang mungkin menetapkan nilai tinggi untuk memastikan cBot memasuki dagangan hanya apabila terdapat aliran yang kuat dan disahkan.
Tempoh Pantas — Bilangan tempoh yang digunakan untuk mengira purata bergerak pantas. Pedagang yang mencari kemasukan dan keluar pantas boleh menetapkan nilai rendah untuk memastikan cBot bertindak balas dengan cepat terhadap pergerakan harga jangka pendek.

Pedagang yang mengikuti trend pasaran yang lebih luas boleh menetapkan nilai tinggi untuk mengurangkan bilangan isyarat palsu dan memberi tumpuan kepada pergerakan harga yang ketara.

Penggunaan

Pasaran yang menunjukkan trend

Trend cBot berprestasi baik dalam pasaran yang menunjukkan trend di mana pergerakan harga adalah konsisten dan berterusan. Dalam pasaran sedemikian, purata bergerak sering menangkap trend, menjadikan persilangan sebagai penunjuk yang berkesan untuk isyarat beli dan jual.

Kes penggunaan

Pertimbangkan senario di mana EURUSD berada dalam trend menaik yang kuat, mengakibatkan paras tinggi harian dan paras rendah yang lebih tinggi pada cartanya. Persilangan purata bergerak mengesan trend tersebut, dan cBot memulakan isyarat beli pada setiap persilangan menaik MA pantas ke atas MA perlahan.

Amalan terbaik

  • Gunakan nilai tempoh tinggi untuk MA apabila berdagang pada tempoh yang lebih panjang untuk mengelakkan hingar dan menangkap trend yang berterusan.
  • Dalam pasaran yang menunjukkan trend untuk komoditi (contohnya, emas) dengan turun naik yang agak rendah, gunakan purata bergerak mudah untuk memastikan turun naik harga kecil ditapis keluar.

Aset turun naik tinggi

Aset yang mengalami pergerakan harga yang tajam dan ketara cenderung mendapat manfaat daripada keupayaan cBot untuk bertindak balas terhadap trend yang bergerak pantas apabila purata bergerak yang sesuai dipilih.

Kes penggunaan

Pertimbangkan senario di mana Bitcoin berada di tengah-tengah kenaikan atau musim crypto. BTC mengalami turun naik harga yang pesat, kadang-kadang menunjukkan trend menaik sebanyak ribuan dolar dalam beberapa hari. cBot mengambil kesempatan daripada trend menaik yang tajam dengan memasuki posisi long apabila MA pantas melintasi di atas MA perlahan.

Amalan terbaik

  • Gunakan purata bergerak eksponen supaya cBot bertindak balas lebih cepat terhadap perubahan harga terkini.
  • Pertimbangkan untuk menetapkan tempoh pantas dan perlahan yang pendek untuk menangkap momentum awal.

Dagangan ayunan

Pedagang ayunan yang memegang posisi selama beberapa hari atau minggu mendapat manfaat daripada keupayaan cBot untuk mengesan trend jangka sederhana apabila tetapan yang sesuai digunakan. Persilangan purata bergerak memberikan titik kemasukan dan keluar yang jelas untuk dagangan dalam pasaran yang mempunyai ayunan harga berkala.

Kes penggunaan

Pertimbangkan senario di mana pedagang ayunan mengenal pasti trend berkala dalam GBPUSD dan menggunakan cBot pada carta 4 jam untuk menangkap trend yang bertahan selama beberapa hari. Apabila MA pantas melintasi di atas MA perlahan, cBot memasuki posisi beli, memegangnya sehingga trend berbalik.

Amalan terbaik

Gunakan tempoh sederhana panjang untuk MA pantas dan perlahan untuk memastikan cBot mengabaikan turun naik kecil sambil menangkap pergerakan pasaran yang ketara.

Strategi terobosan

Trend cBot berguna dalam peristiwa terobosan di mana harga keluar daripada julat penyatuan dan memasuki trend baharu. Persilangan purata bergerak boleh menandakan permulaan pergerakan yang kuat apabila terobosan berlaku.

Kes penggunaan

Pertimbangkan senario di mana saham utama didagangkan dalam julat yang ketat selama beberapa hari atau minggu dan terobosan dijangka berlaku. cBot boleh digunakan untuk menangkap terobosan tersebut. Apabila harga saham melangkaui rintangan, MA pantas melintasi MA perlahan, mencetuskan isyarat beli.

Amalan terbaik

Gunakan nilai rendah untuk tempoh MA pantas untuk membolehkan cBot menangkap trend lebih awal, menghasilkan titik kemasukan yang menguntungkan untuk dagangan.

Ringkasan

Trend cBot mengikuti proses matematik yang mudah berdasarkan persilangan purata bergerak untuk mengesan perubahan trend dan melaksanakan dagangan. Dengan membandingkan nilai semasa dan sebelumnya MA pantas dan perlahan, cBot menentukan sama ada untuk membeli atau menjual, memastikan posisi sentiasa sejajar dengan trend yang dikesan.

cBot mungkin memberikan prestasi yang lebih baik apabila ia digabungkan dengan penunjuk lain. Relative Strength Index (RSI) atau Moving Average Convergence Divergence (MACD) boleh menapis isyarat palsu dan mengesahkan kekuatan trend. Sebagai contoh, RSI boleh digunakan untuk memeriksa keadaan terlebih beli atau terlebih jual sebelum persilangan MA dilaksanakan.

Menggunakan parameter boleh suai cBot, anda boleh menala halus algoritma untuk memenuhi keperluan dagangan dan selera risiko anda. Selain itu, anda boleh menjalankan ujian belakang cBot dengan nilai, tetapan dan data yang berbeza untuk mencari kombinasi parameter yang optimum atau menguntungkan untuk simbol dan tempoh tertentu.