ข้ามไปที่เนื้อหา

Trend cBot

ภาพรวมกลยุทธ์

Trend cBot นำกลยุทธ์มาใช้โดยที่ Moving Averages (MAs) สองตัวถูกใช้เพื่อตรวจจับแนวโน้มและตัดสินใจเทรด อัลกอริทึมจะคำนวณ Fast MA และ Slow MA เปรียบเทียบค่าของพวกมันเมื่อเวลาผ่านไปและระบุจุดตัดเพื่อสร้างสัญญาณซื้อหรือขาย

เนื่องจาก Trend cBot พึ่งพาการตัดกันของ MA เพื่อตรวจจับการเปลี่ยนแปลงของโมเมนตัม จึงมีประสิทธิภาพสูงสุดในตลาดที่มีแนวโน้มชัดเจนและต่อเนื่อง กล่าวอีกนัยหนึ่ง Algo ทำงานได้ดีกับสัญลักษณ์ที่แสดงการเคลื่อนไหวในทิศทางที่แข็งแกร่ง ไม่ว่าจะเป็นขึ้นหรือลง

การสร้าง cBot

เรียนรู้วิธี สร้าง cBot โดยใช้ C# หรือ Python ใน คู่มือ ขั้นตอนต่อขั้นตอนของเรา

โค้ด Trend cBot มีอยู่ในที่เก็บสาธารณะของเราใน C# และ Python โค้ดเดียวกันนี้ถูกจัดเตรียมเป็นเทมเพลตใน วิซาร์ดการสร้างอัลกอริทึม ใน cTrader Windows หรือ Mac หรือคุณสามารถคัดลอกและใช้ตัวอย่างโค้ดด้านล่างได้:

 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)

การรวมอินดิเคเตอร์

Moving average เป็นอินดิเคเตอร์ทางเทคนิคยอดนิยมที่ปรับราคาให้เรียบเพื่อระบุแนวโน้มในช่วงเวลาที่กำหนด อินดิเคเตอร์ Moving average รวมถึง Simple Moving Average (SMA), Exponential Moving Average (EMA), Time Series, Triangular, Weighted, Welles Wilder Smoothing, Hull, เป็นต้น

Trend cBot ใช้ MA สองตัวเพื่อติดตามแนวโน้มในตลาด:

  • Fast MA – ตอบสนองต่อการเปลี่ยนแปลงของราคาได้เร็วกว่าและมักแสดงถึงแนวโน้มระยะสั้น
  • Slow MA – ตอบสนองต่อการเปลี่ยนแปลงของราคาช้ากว่าและแสดงถึงแนวโน้มระยะยาว

cBot จะเฝ้าดูเหตุการณ์ crossover ระหว่าง Fast MA และ Slow MA และใช้เพื่อสร้างสัญญาณ:

  • Buy signal – เมื่อ slow MA ตัดลงด้านล่าง fast MA จะถูกตีความว่าเป็นโมเมนตัมขึ้นและสร้างสัญญาณซื้อ
  • Sell signal – เมื่อ fast MA ตัดลงด้านล่าง slow MA จะถูกตีความว่าเป็นโมเมนตัมลงและสร้างสัญญาณขาย

หากมีการสร้างสัญญาณใหม่ในขณะที่ตำแหน่งการเทรดตรงข้ามยังเปิดอยู่ เช่น สัญญาณซื้อเมื่อตำแหน่งขายยังเปิดอยู่ cBot จะปิดตำแหน่งที่มีอยู่และเปิดตำแหน่งใหม่ การตั้งค่านี้ช่วยให้มั่นใจว่าจะมีเพียงหนึ่งตำแหน่งที่เปิดอยู่ในเวลาใดเวลาหนึ่ง

การคำนวณและตรรกะ

การตั้งค่าเริ่มต้น

cBot จะเริ่มต้นการทำงานของ MA สองตัวในเมธอด OnStart() ซึ่งจะถูกเรียกเมื่อ cBot เริ่มทำงาน

MA ทั้งสองจะถูกคำนวณโดยใช้ช่วงเวลาที่แตกต่างกันบนชุดข้อมูล fastMA จะถูกคำนวณด้วย FastPeriods ในขณะที่ slowMA จะถูกคำนวณด้วย SlowPeriods

การคำนวณ MA ในเวลาจริง

ตรรกะหลักสำหรับการตัดสินใจเทรดจะถูกดำเนินการในเมธอด OnTick() ซึ่งจะถูกเรียกทุกครั้งที่มีการรับข้อมูล tick ใหม่ (ข้อมูลราคา) MA ทั้งสองจะถูกคำนวณอย่างต่อเนื่องโดยใช้สูตรที่สร้างไว้ใน cTrader สำหรับ MAType ที่เลือกและจะถูกอัปเดตในแต่ละ tick

cBot จะดึงค่าปัจจุบันและค่าก่อนหน้าของ MA แล้วดำเนินการไปยังเงื่อนไข crossover cBot จะเปรียบเทียบค่าปัจจุบันและค่าก่อนหน้าของ MA เพื่อตรวจสอบว่ามี crossover หรือไม่:

  • Uptrend detection – หาก slowMA ตัดลงด้านล่าง fastMA จะถูกตีความว่าเป็นโมเมนตัมขึ้นและส่งผลให้เกิดสัญญาณซื้อ
  • Downtrend detection – หาก fastMA ตัดลงด้านล่าง slowMA จะถูกตีความว่าเป็นโมเมนตัมลงและส่งผลให้เกิดสัญญาณขาย

การดำเนินการเทรด

หลังจากตรวจจับ crossover แล้ว cBot จะดำเนินการเทรดตามสัญญาณที่สร้างขึ้น:

  • Trade execution for a buy signal – cBot จะตรวจสอบและปิดโพสิชันขาย (sell) ที่เปิดอยู่ จากนั้นจะเปิดโพสิชันซื้อใหม่
  • Trade execution for a sell signal – cBot จะตรวจสอบและปิดโพสิชันซื้อ (buy) ที่เปิดอยู่ จากนั้นจะเปิดโพสิชันขายใหม่

พารามิเตอร์

พารามิเตอร์ หน่วย คำจำกัดความ เคล็ดลับ
ปริมาณ ล็อต ปริมาณการเทรดแต่ละครั้ง นักเทรด Scalping ที่มุ่งเน้นการเคลื่อนไหวของราคาเล็กน้อยอาจเลือกใช้ขนาดล็อตเล็กเพื่อลดความเสี่ยงในขณะที่ทำการเทรดหลายครั้งในระยะเวลาสั้นๆ

นักเทรด Swing ที่ถือโพสิชันเป็นเวลานานอาจใช้ขนาดล็อตใหญ่เนื่องจากพวกเขาคาดหวังการเคลื่อนไหวขนาดใหญ่ในตลาดและต้องการเพิ่มศักยภาพในการทำกำไร
ประเภท MA ประเภทของ Moving Averages ในตลาดที่มีความผันผวนน้อย นักเทรดอาจเลือกใช้ SMA เพราะมันช่วยปรับเรียบข้อมูลราคาได้มีประสิทธิภาพมากขึ้น และลดโอกาสที่ cBot จะถูกหลอกโดยความผันผวนระยะสั้น

ในตลาดที่มีความผันผวนสูง ผู้ใช้อาจเลือกใช้ EMA เพราะมันสามารถตอบสนองต่อการเปลี่ยนแปลงของราคาได้อย่างรวดเร็วและจับการกลับตัวของแนวโน้มได้เร็ว
แหล่งข้อมูล ข้อมูลราคาที่ใช้ในการคำนวณ Moving Averages ตัวเลือกที่ใช้ได้ได้แก่ ราคาปิด ราคาเปิด ราคาสูงสุด และราคาต่ำสุด นักเทรดที่ระมัดระวังอาจใช้ราคาปิดเป็นแหล่งข้อมูลเนื่องจากมันแสดงถึงราคาสุดท้ายของแท่งเทียนและมีแนวโน้มที่จะเชื่อถือได้มากกว่า

นักเทรดที่กล้าเสี่ยงมากกว่าอาจเลือกใช้ราคาสูงสุดหรือราคาต่ำสุดหากพวกเขาต้องการจับการกลับตัวของแนวโน้มหรือโอกาสการทะลุที่จุดสุดขั้วในช่วงราคา
ช่วงเวลาช้า จำนวนช่วงเวลาที่ใช้ในการคำนวณ Moving Averages ช้า นักเทรดรายวันอาจตั้งค่าต่ำเพื่อโฟกัสที่แนวโน้มระยะสั้นและจับโอกาสบ่อยครั้งในระหว่างวัน

นักเทรดที่มุ่งเป้าไปที่แนวโน้มระยะยาวอาจตั้งค่าสูงเพื่อให้มั่นใจว่า cBot จะเข้าทำการซื้อขายเฉพาะเมื่อมีแนวโน้มที่แข็งแกร่งและได้รับการยืนยัน
ช่วงเวลาเร็ว จำนวนช่วงเวลาที่ใช้ในการคำนวณ Moving Averages เร็ว นักเทรดที่มองหาการเข้าออกอย่างรวดเร็วอาจตั้งค่าต่ำเพื่อให้มั่นใจว่า cBot จะตอบสนองต่อการเคลื่อนไหวของราคาระยะสั้นได้อย่างรวดเร็ว

นักเทรดที่ติดตามแนวโน้มตลาดที่กว้างขึ้นอาจตั้งค่าสูงเพื่อลดจำนวนสัญญาณผิดพลาดและโฟกัสที่การเคลื่อนไหวของราคาที่มีนัยสำคัญ

การประยุกต์

ตลาดที่มีแนวโน้ม

Trend cBot ประสิทธิภาพดีในตลาดที่มีแนวโน้มซึ่งการเคลื่อนไหวของราคามีความสม่ำเสมอและต่อเนื่อง ในตลาดดังกล่าว moving averages มักจะจับแนวโน้มได้ ทำให้การครอสโอเวอร์เป็นตัวบ่งชี้ที่มีประสิทธิภาพสำหรับสัญญาณซื้อและขาย

กรณีการใช้งาน

พิจารณาสถานการณ์ที่ EURUSD อยู่ในแนวโน้มขาขึ้นที่แข็งแกร่ง ส่งผลให้มีจุดสูงสุดและจุดต่ำสุดที่สูงขึ้นในแผนภูมิประจำวัน การครอสโอเวอร์ของ moving average ตรวจจับแนวโน้ม และ cBot จะเริ่มต้นสัญญาณซื้อที่แต่ละการครอสโอเวอร์ขึ้นของ fast MA เหนือ slow MA

แนวปฏิบัติที่ดีที่สุด

  • ใช้ค่าคาบเวลาสูงสำหรับ MAs เมื่อเทรดในระยะเวลาที่ยาวขึ้นเพื่อหลีกเลี่ยงสัญญาณรบกวนและจับแนวโน้มที่ต่อเนื่อง
  • ในตลาดที่มีแนวโน้มสำหรับสินค้าโภคภัณฑ์ (เช่น ทองคำ) ที่มีความผันผวนต่ำ ใช้ simple moving average เพื่อให้แน่ใจว่าความผันผวนของราคาเล็กน้อยถูกกรองออก

สินทรัพย์ที่มีความผันผวนสูง

สินทรัพย์ที่ประสบกับการเคลื่อนไหวของราคาที่รวดเร็วและมีนัยสำคัญมักจะได้รับประโยชน์จากความสามารถของ cBot ที่จะตอบสนองต่อแนวโน้มที่เคลื่อนไหวอย่างรวดเร็วเมื่อเลือก moving average ที่เหมาะสม

กรณีการใช้งาน

พิจารณาสถานการณ์ที่ Bitcoin อยู่ในช่วงกลางของตลาดขาขึ้นหรือฤดูกาลคริปโต BTC ประสบกับการเคลื่อนไหวของราคาอย่างรวดเร็ว บางครั้งมีแนวโน้มขาขึ้นหลายพันดอลลาร์ในไม่กี่วัน cBot ใช้ประโยชน์จากแนวโน้มขาขึ้นที่รวดเร็วโดยเข้าสู่โพสิชัน Long เมื่อ fast MA ครอสเหนือ slow MA

แนวปฏิบัติที่ดีที่สุด

  • ใช้ exponential moving average เพื่อให้ cBot ตอบสนองต่อการเปลี่ยนแปลงของราคาล่าสุดได้เร็วขึ้น
  • พิจารณาการตั้งค่าคาบเวลาที่สั้นสำหรับ fast และ slow เพื่อจับโมเมนตัมในช่วงต้น

การเทรดแบบ Swing

นักเทรดแบบ Swing ที่ถือโพสิชันเป็นเวลาหลายวันหรือหลายสัปดาห์ได้รับประโยชน์จากความสามารถของ cBot ที่จะตรวจจับแนวโน้มระยะกลางเมื่อใช้การตั้งค่าที่เหมาะสม การครอสโอเวอร์ของ moving average ให้จุดเข้าและออกที่ชัดเจนสำหรับการเทรดในตลาดที่มีการแกว่งตัวของราคาเป็นระยะ

กรณีการใช้งาน

พิจารณาสถานการณ์ที่นักเทรดแบบ Swing ระบุแนวโน้มเป็นระยะใน GBPUSD และใช้ cBot บนแผนภูมิ 4 ชั่วโมงเพื่อจับแนวโน้มที่กินเวลาหลายวัน เมื่อ fast MA ครอสเหนือ slow MA cBot จะเข้าสู่โพสิชันซื้อและถือไว้จนกว่าแนวโน้มจะกลับตัว

แนวปฏิบัติที่ดีที่สุด

ใช้ช่วงเวลาปานกลางสำหรับ Moving Averages แบบเร็วและช้าเพื่อให้ cBot ไม่สนใจความผันผวนเล็กน้อยในขณะที่จับการเคลื่อนไหวที่สำคัญของตลาด

Breakout strategies

Trend cBot มีประโยชน์ในเหตุการณ์ Breakout ที่ราคา Breakout ออกจากช่วงการรวมตัวและเข้าสู่แนวโน้มใหม่ Moving average crossovers สามารถส่งสัญญาณการเริ่มต้นของการเคลื่อนไหวที่แข็งแกร่งเมื่อเกิด Breakout

กรณีการใช้งาน

พิจารณาสถานการณ์ที่หุ้นหลักกำลังซื้อขายในช่วงแคบเป็นเวลาหลายวันหรือหลายสัปดาห์และคาดว่าจะเกิด Breakout สามารถนำ cBot มาใช้เพื่อจับ Breakout เมื่อราคาหุ้น Breakout เหนือระดับ Resistance, Moving Average แบบเร็วจะตัดขึ้นเหนือ Moving Average แบบช้า ซึ่งจะกระตุ้นสัญญาณซื้อ

แนวปฏิบัติที่ดีที่สุด

ใช้ค่าต่ำสำหรับช่วงเวลาของ Moving Average แบบเร็วเพื่อให้ cBot จับแนวโน้มได้เร็วขึ้น ส่งผลให้มีจุดเข้าเทรดที่เอื้ออำนวย

Summary

Trend cBot ปฏิบัติตามกระบวนการทางคณิตศาสตร์ที่ตรงไปตรงมาโดยอิงจากการครอสโอเวอร์ของ Moving Averages เพื่อตรวจจับการเปลี่ยนแปลงของแนวโน้มและดำเนินการเทรด โดยการเปรียบเทียบค่าปัจจุบันและค่าก่อนหน้าของ Moving Averages ที่เร็วและช้า cBot จะตัดสินใจว่าจะซื้อหรือขาย เพื่อให้แน่ใจว่าโพสิชันจะสอดคล้องกับแนวโน้มที่ตรวจจับได้เสมอ

cBot อาจให้ประสิทธิภาพที่ดีขึ้นเมื่อใช้ร่วมกับอินดิเคเตอร์อื่นๆ Relative Strength Index (RSI) หรือ Moving Average Convergence Divergence (MACD) สามารถกรองสัญญาณปลอมและยืนยันความแข็งแกร่งของแนวโน้ม ตัวอย่างเช่น RSI อาจถูกใช้เพื่อตรวจสอบภาวะ Overbought หรือ Oversold ก่อนที่จะดำเนินการตามการครอสโอเวอร์ของ Moving Averages

โดยใช้พารามิเตอร์ที่ปรับแต่งได้ของ cBot คุณสามารถปรับแต่งอัลกอริทึมให้เหมาะกับความต้องการและความเสี่ยงในการเทรดของคุณ นอกจากนี้ คุณยังสามารถทำ backtest cBot ด้วยค่าต่างๆ การตั้งค่าและข้อมูลเพื่อค้นหาชุดพารามิเตอร์ที่เหมาะสมหรือทำกำไรสำหรับสัญลักษณ์และช่วงเวลาที่เฉพาะเจาะจง