Lewati ke isi

Trend cBot

Ikhtisar strategi

Trend cBot menerapkan strategi di mana dua moving averages (MAs) digunakan untuk mendeteksi tren dan membuat keputusan trading. Algoritma ini menghitung MA cepat dan MA lambat, membandingkan nilainya dari waktu ke waktu dan mengidentifikasi titik crossover untuk menghasilkan sinyal beli atau jual.

Karena Trend cBot mengandalkan crossover MA untuk mendeteksi pergeseran momentum, ia paling efektif di pasar dengan tren yang jelas dan berkelanjutan. Dengan kata lain, algo ini bekerja baik dengan simbol yang menunjukkan pergerakan arah yang kuat, baik ke atas maupun ke bawah.

Pembuatan cBot

Pelajari cara membuat cBot, menggunakan C# atau Python, dalam panduan langkah demi langkah kami.

Kode Trend cBot tersedia di repositori publik kami C# dan Python. Kode yang sama disediakan sebagai templat dalam wizard pembuatan algoritma di cTrader Windows atau Mac, atau Anda dapat menyalin dan menggunakan cuplikan 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
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 adalah indikator teknikal populer yang meratakan data harga untuk mengidentifikasi tren dalam periode tertentu. Indikator moving average mencakup Simple Moving Average (SMA), Exponential Moving Average (EMA), Time Series, Triangular, Weighted, Welles Wilder Smoothing, Hull, dll.

Trend cBot menggunakan dua MA untuk memantau tren di pasar:

  • Fast MA – bereaksi lebih cepat terhadap perubahan harga dan biasanya mewakili tren jangka pendek.
  • Slow MA – bereaksi lebih lambat terhadap perubahan harga dan mewakili tren jangka panjang.

cBot mengawasi peristiwa crossover antara Fast MA dan Slow MA dan menggunakannya untuk menghasilkan sinyal:

  • Sinyal beli – ketika slow MA melintasi di bawah fast MA, hal ini diinterpretasikan sebagai momentum naik dan sinyal beli dihasilkan.
  • Sinyal jual – ketika fast MA melintasi di bawah slow MA, hal ini diinterpretasikan sebagai momentum turun dan sinyal jual dihasilkan.

Jika sinyal baru dihasilkan sementara posisi trading yang berlawanan masih terbuka, seperti sinyal beli ketika posisi jual terbuka, cBot akan menutup posisi yang ada dan membuka yang baru. Pengaturan ini memastikan bahwa hanya satu posisi yang terbuka pada satu waktu.

Perhitungan dan logika

Pengaturan awal

cBot menginisialisasi dua MA dalam metode OnStart(), yang dipanggil saat cBot dimulai.

MA dihitung menggunakan periode yang berbeda pada seri data. fastMA dihitung dengan FastPeriods, sedangkan slowMA dihitung dengan SlowPeriods.

Perhitungan MA waktu nyata

Logika utama untuk keputusan trading dilaksanakan dalam metode OnTick(), yang dipanggil setiap kali tick baru (data harga) diterima. Dua MA terus dihitung menggunakan rumus bawaan cTrader untuk MAType yang dipilih dan diperbarui pada setiap tick.

cBot mengambil nilai saat ini dan sebelumnya dari MA dan kemudian melanjutkan ke kondisi crossover. cBot membandingkan nilai saat ini dan sebelumnya dari MA untuk menentukan apakah telah terjadi crossover:

  • Deteksi tren naik – jika slowMA melintasi di bawah fastMA, hal ini diinterpretasikan sebagai momentum naik dan menghasilkan sinyal beli.
  • Deteksi tren turun – jika fastMA melintasi di bawah slowMA, hal ini diinterpretasikan sebagai momentum turun dan menghasilkan sinyal jual.

Eksekusi trading

Setelah mendeteksi crossover, cBot melaksanakan trade berdasarkan sinyal yang dihasilkan:

  • Eksekusi trading untuk sinyal beli – cBot memeriksa dan menutup posisi jual (short) yang terbuka. Kemudian membuka posisi beli baru.
  • Eksekusi trading untuk sinyal jual – cBot memeriksa dan menutup posisi beli (long) yang terbuka. Kemudian membuka posisi jual baru.

Parameter

Parameter Unit Definisi Tips
Kuantitas Lot Volume setiap trade. Trader scalping yang fokus pada pergerakan harga kecil mungkin memilih ukuran lot kecil untuk meminimalkan risiko sambil melakukan banyak trade dalam waktu singkat.

Trader swing yang memegang posisi lebih lama mungkin menggunakan ukuran lot besar karena mereka mengantisipasi pergerakan besar di pasar dan ingin memaksimalkan potensi keuntungan mereka.
Tipe MA — Jenis moving average. Di pasar yang kurang volatil, trader mungkin lebih memilih SMA karena dapat menghaluskan data harga dengan lebih efektif dan mengurangi kemungkinan cBot terpengaruh oleh fluktuasi jangka pendek.

Di pasar yang volatil, pengguna mungkin lebih memilih EMA karena kemampuannya untuk merespons perubahan harga dengan cepat dan menangkap pembalikan tren sejak dini.
Sumber — Data harga yang digunakan untuk menghitung moving average. Opsi yang tersedia termasuk harga penutupan, harga pembukaan, harga tertinggi, dan harga terendah. Trader konservatif mungkin menggunakan harga penutupan sebagai sumber karena mewakili harga akhir dari sebuah candle dan cenderung lebih dapat diandalkan.

Trader yang lebih agresif mungkin lebih memilih harga tinggi atau harga rendah jika mereka ingin menangkap pembalikan tren atau peluang breakout pada titik ekstrem dalam rentang harga.
Periode lambat — Jumlah periode yang digunakan untuk menghitung slow moving average. Trader harian mungkin menetapkan nilai rendah untuk fokus pada tren jangka pendek dan menangkap peluang yang sering terjadi sepanjang hari.

Trader yang menargetkan tren jangka panjang mungkin menetapkan nilai tinggi untuk memastikan cBot hanya memasuki perdagangan ketika ada tren yang kuat dan terkonfirmasi.
Periode cepat — Jumlah periode yang digunakan untuk menghitung fast moving average. Trader yang mencari entri dan keluar cepat mungkin menetapkan nilai rendah untuk memastikan cBot merespons pergerakan harga jangka pendek dengan cepat.

Trader yang mengikuti tren pasar yang lebih luas mungkin menetapkan nilai tinggi untuk mengurangi jumlah sinyal palsu dan fokus pada pergerakan harga yang signifikan.

Penerapan

Pasar yang sedang tren

Trend cBot berkinerja baik di pasar yang sedang tren di mana pergerakan harga konsisten dan berkelanjutan. Di pasar seperti ini, moving averages sering kali menangkap tren, membuat crossover menjadi indikator efektif untuk sinyal beli dan jual.

Contoh penggunaan

Pertimbangkan skenario di mana EURUSD berada dalam tren bullish yang kuat, menghasilkan high harian dan low yang lebih tinggi pada grafiknya. Crossover moving average mendeteksi tren, dan cBot memulai sinyal beli di setiap crossover ke atas dari MA cepat di atas MA lambat.

Praktik terbaik

  • Gunakan nilai periode tinggi untuk MA saat trading pada periode yang lebih panjang untuk menghindari noise dan menangkap tren yang berkelanjutan.
  • Di pasar yang sedang tren untuk komoditas (misalnya, emas) dengan volatilitas yang relatif rendah, gunakan simple moving average untuk memastikan fluktuasi harga minor tersaring.

Aset dengan volatilitas tinggi

Aset yang mengalami pergerakan harga yang tajam dan signifikan cenderung mendapatkan manfaat dari kemampuan cBot untuk merespons tren yang bergerak cepat ketika moving average yang sesuai dipilih.

Contoh penggunaan

Pertimbangkan skenario di mana Bitcoin berada di tengah bull run atau musim kripto. BTC mengalami fluktuasi harga yang cepat, terkadang tren naik hingga ribuan dolar dalam beberapa hari. cBot memanfaatkan tren naik yang tajam dengan memasuki posisi Long ketika MA cepat melintasi di atas MA lambat.

Praktik terbaik

  • Gunakan exponential moving average agar cBot bereaksi lebih cepat terhadap perubahan harga terkini.
  • Pertimbangkan untuk mengatur periode cepat dan lambat yang pendek untuk menangkap momentum awal.

Swing trading

Swing trader yang memegang posisi selama beberapa hari atau minggu mendapatkan manfaat dari kemampuan cBot untuk mendeteksi tren jangka menengah ketika pengaturan yang sesuai digunakan. Crossover moving average memberikan titik masuk dan keluar yang jelas untuk trading di pasar yang memiliki ayunan harga periodik.

Contoh penggunaan

Pertimbangkan skenario di mana seorang swing trader mengidentifikasi tren periodik dalam GBPUSD dan menggunakan cBot pada grafik 4 jam untuk menangkap tren yang berlangsung selama beberapa hari. Ketika MA cepat melintasi di atas MA lambat, cBot memasuki posisi beli, memegangnya hingga tren berbalik.

Praktik terbaik

Gunakan periode panjang sedang untuk MA cepat dan lambat untuk memastikan cBot mengabaikan fluktuasi minor sambil menangkap pergerakan pasar yang signifikan.

Strategi Breakout

Trend cBot berguna dalam peristiwa breakout di mana harga keluar dari kisaran konsolidasi dan memasuki tren baru. Moving average crossovers dapat menandakan awal dari pergerakan kuat ketika terjadi breakout.

Contoh penggunaan

Pertimbangkan skenario di mana saham utama diperdagangkan dalam kisaran ketat selama beberapa hari atau minggu dan breakout diperkirakan terjadi. cBot dapat digunakan untuk menangkap breakout tersebut. Ketika harga saham menembus di atas resistance, fast MA melintasi slow MA, memicu sinyal beli.

Praktik terbaik

Gunakan nilai rendah untuk periode fast MA agar cBot dapat menangkap tren lebih awal, menghasilkan titik masuk yang menguntungkan untuk perdagangan.

Summary

Trend cBot mengikuti proses matematis sederhana berdasarkan moving average crossovers untuk mendeteksi perubahan tren dan mengeksekusi perdagangan. Dengan membandingkan nilai saat ini dan sebelumnya dari fast dan slow MA, cBot menentukan apakah akan membeli atau menjual, memastikan posisi selalu sejalan dengan tren yang terdeteksi.

cBot dapat memberikan kinerja yang lebih baik ketika dikombinasikan dengan indikator lain. Relative Strength Index (RSI) atau Moving Average Convergence Divergence (MACD) dapat menyaring sinyal palsu dan mengkonfirmasi kekuatan tren. Sebagai contoh, RSI dapat digunakan untuk memeriksa kondisi overbought atau oversold sebelum MA crossovers diambil tindakan.

Menggunakan parameter yang dapat disesuaikan pada cBot, Anda dapat menyempurnakan algoritma sesuai dengan kebutuhan trading dan toleransi risiko Anda. Selain itu, Anda dapat melakukan backtesting pada cBot dengan nilai, pengaturan, dan data yang berbeda untuk menemukan kombinasi parameter yang optimal atau menguntungkan untuk simbol dan periode tertentu.