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

ประเภทหลักของ cBot

cBot เป็นเครื่องมือที่มีความหลากหลาย ซึ่งขึ้นอยู่กับโค้ดและตรรกะของมัน อาจทำหน้าที่และฟังก์ชันต่างๆ ได้หลากหลาย ตั้งแต่การเทรดอัตโนมัติอย่างเต็มรูปแบบไปจนถึงการให้การสนับสนุนสำหรับการนำกลยุทธ์การเทรดด้วยตนเองไปใช้ ในบทความนี้และวิดีโอที่เกี่ยวข้อง เราจะกำหนดประเภทหลักของ cBot อธิบายความแตกต่างที่สำคัญ และระบุแนวทางปฏิบัติที่ดีที่สุดสำหรับการสร้างและใช้ cBot ประเภทต่างๆ

โดยทั่วไปแล้ว มี cBot หลัก 4 ประเภท

หมายเหตุ

หมวดหมู่ด้านล่างแตกต่างกันเพียงพฤติกรรมของ cBot เท่านั้น ไม่มีการระบุหมวดหมู่ใดๆ ในโค้ด cBot จริง นอกจากนี้ นักพัฒนาบางคนอาจสร้างการจัดประเภท cBot แบบกำหนดเองด้วย

  • กลยุทธ์การเทรดอัตโนมัติ - ตามชื่อที่บ่งบอก cBot ประเภทนี้จะดำเนินกลยุทธ์การเทรดโดยอัตโนมัติ ตัวอย่างเช่น cBot Three black crows & three white soldiers จะวางคำสั่งซื้อใหม่หลังจากพบแท่งเทียนสีเขียวติดต่อกันสามแท่ง และคำสั่งขายใหม่เมื่อเผชิญกับแท่งเทียนสีแดงติดต่อกันสามแท่ง
  • สคริปต์ - cBot ที่อยู่ในประเภทนี้จะดำเนินการเมื่อเริ่มต้นและหยุดหลังจากการดำเนินการเสร็จสมบูรณ์ ตัวอย่างเช่น สคริปต์ cBot อาจกำหนด Stop Loss สำหรับโพสิชันที่เปิดอยู่ทั้งหมดโดยไม่คำนึงถึงทิศทาง ปริมาณ หรือเครื่องมือ
  • ผู้ช่วยการเทรด - ถูกออกแบบมาเพื่อดำเนินการที่เป็นประโยชน์บางอย่างซึ่งเสริมกลยุทธ์การเทรดด้วยตนเองหรืออัตโนมัติ ตัวอย่างเช่น cBot ประเภทนี้สามารถจัดการ Trailing Stop Loss ของคุณโดยใช้กฎที่กำหนดเองซึ่งแตกต่างจากฟังก์ชัน Trailing Stop Loss ในตัวที่ cTrader มีให้
  • แผงควบคุมการเทรด - cBot ประเภทนี้ไม่ได้เทรดโดยอัตโนมัติ แต่สร้างการควบคุมที่กำหนดเองซึ่งอาจใช้สำหรับวัตถุประสงค์ต่างๆ ตัวอย่างเช่น cBot อาจเปิดตัว WebView ของตัวรวบรวมข่าว Forex ในขณะที่รวมปุ่มซื้อและขายที่กำหนดเองรวมถึงตัวเลือกสัญลักษณ์ภายใน WebView ซึ่งช่วยให้ผู้ใช้สามารถเทรดได้โดยไม่ต้องออกจากเว็บไซต์ข่าว

ในหัวข้อย่อยด้านล่าง เราจะอภิปรายแต่ละประเภทข้างต้นโดยละเอียด อธิบายข้อดีและข้อจำกัด และแนะนำกรณีการใช้งานต่างๆ

กลยุทธ์การเทรดด้วย Algo

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

คุณสามารถสร้างกลยุทธ์การเทรดอัตโนมัติอย่างง่ายได้ในเวลาน้อยกว่าสองนาทีโดยเพียงแค่แทนที่เทมเพลต cBot ใหม่เริ่มต้นด้วยโค้ดด้านล่าง

 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 จะเปิดโพสิชันใหม่ในทุกแท่งเทียน โพสิชัน Long จะถูกเปิดหากราคาเพิ่มขึ้นในแท่งเทียนก่อนหน้าเมื่อเทียบกับแท่งก่อนหน้านั้น ในทางกลับกัน โพสิชัน Short จะถูกเปิดหากราคาลดลง

การ Backtesting และการเพิ่มประสิทธิภาพ

กลยุทธ์การเทรดอัตโนมัติมักจะมีส่วนประกอบและพารามิเตอร์มากมาย ดังนั้น cBot เหล่านี้มักจะต้องผ่านการ Backtesting และการเพิ่มประสิทธิภาพอย่างกว้างขวางก่อนที่จะเปิดตัวในบัญชีจริง โชคดีที่ cTrader มีเครื่องมือในตัวที่สามารถ จัดการการ Backtesting และ การเพิ่มประสิทธิภาพ ให้คุณได้

เครื่องมือคำสั่งบรรทัดของ cTrader (CLI)

กลยุทธ์การเทรดอัตโนมัติมักจะต้องทำงานเป็นระยะเวลานานเพื่อให้สามารถตอบสนองต่อสัญญาณการวิเคราะห์ทางเทคนิคต่างๆ ได้ เพื่อประหยัด RAM และการใช้งาน CPU ในกรณีเหล่านี้ คุณสามารถเปิดใช้งาน cBot ผ่าน cTrader CLI โดยไม่ต้องเปิด cTrader Windows (โปรดทราบว่าสามารถเปิดใช้งาน cBot ใดๆ ผ่าน cTrader CLI ได้ ไม่เฉพาะ cBot ประเภทนี้เท่านั้น)

สคริปต์

สคริปต์มักจำเป็นต้องดำเนินการบางอย่างที่จะยากหรือใช้เวลานานหากทำด้วยตนเอง การดำเนินการเหล่านี้มักจะเกิดขึ้นเมื่อเริ่มต้น cBot เพื่อให้คุณสามารถเปิดใช้งานสคริปต์ สังเกตผลลัพธ์ของการทำงาน และหยุดการทำงานเมื่อสำเร็จเพื่อประหยัด RAM และการใช้งาน CPU

ตัวอย่างเช่น สคริปต์สามารถปิดโพสิชันทั้งหมดที่มีกำไรขั้นต้นเกิน 50 หน่วยของสกุลเงินฝากในบัญชีของนักเทรด โดยทั่วไปแล้ว สคริปต์จะทำหน้าที่เป็น Take Profit สากลสำหรับโพสิชันที่เปิดอยู่ทั้งหมดซึ่งคุณสามารถเรียกใช้ได้ตลอดเวลา นี่คือวิธีที่โค้ดสำหรับสคริปต์นี้จะมีลักษณะ

 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 เราควรเห็นโพสิชันที่มีกำไรหลายรายการถูกปิดอย่างค่อยเป็นค่อยไป

การหยุดสคริปต์

เนื่องจากสคริปต์จำเป็นต้องดำเนินการเฉพาะเพียงครั้งเดียว คุณสามารถสั่งให้ cTrader ปิดสคริปต์ทันทีหลังจากการดำเนินการเสร็จสมบูรณ์ ตามที่แสดงในตัวอย่างข้างต้น คุณสามารถทำเช่นนี้ได้โดยเรียกใช้เมธอด Stop()

ผู้ช่วยการเทรด

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

ตัวอย่างเช่น พิจารณา cBot ที่ป้องกันความเสี่ยงโพสิชันของคุณโดยอัตโนมัติทันทีที่คุณเปิดโพสิชัน โค้ดสำหรับ cBot นี้อาจมีลักษณะดังต่อไปนี้

 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

เมื่อเปิดโพสิชัน cBot จะพยายามเปิดอีกโพสิชันหนึ่งในทิศทางตรงกันข้ามทันที โดยปริมาณของโพสิชันใหม่นี้จะเท่ากับครึ่งหนึ่งของปริมาณโพสิชันเดิมพอดี

โปรดทราบว่าเรากำลังใช้ฟิลด์ hasHedgedPosition เพื่อหลีกเลี่ยงการวนซ้ำไม่รู้จบ เพื่อให้ cBot ป้องกันความเสี่ยงโพสิชันใหม่เพียงครั้งเดียว

ฟังก์ชัน Callback

ผู้ช่วยการเทรดมักใช้ฟังก์ชัน Callback ที่ทำหน้าที่เป็นตัวจัดการสำหรับเหตุการณ์ต่างๆ หากต้องการทราบว่าคุณสามารถจัดการเหตุการณ์ใดได้สำหรับคลาสใดคลาสหนึ่ง ให้เปิดเอกสารประกอบ API ในตัว ค้นหาคลาสที่ต้องการ และไปที่ส่วน Events ในสารบัญ

แผงการเทรด

แผงการเทรดแสดงการควบคุมที่กำหนดเองซึ่งทริกเกอร์การดำเนินการต่างๆ เมื่อมีการโต้ตอบ โดยทั่วไปแล้วจะช่วยปรับปรุงคุณภาพชีวิตให้กับ UI เริ่มต้นของ cTrader ตัวอย่างเช่น cBot อาจแสดงปุ่ม ซื้อ ที่เมื่อคลิกแล้วจะดำเนินการคำสั่ง Market สำหรับปริมาณที่กำหนดไว้ล่วงหน้าใน cTrader

ในการสร้าง cBot ดังกล่าว เพียงแค่ใช้โค้ดด้านล่างนี้

 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)

เมื่อคลิกที่ปุ่ม ซื้อ คำสั่ง Market ใหม่สำหรับ 10,000 หน่วยจะถูกส่ง การวางตำแหน่งปุ่มที่สะดวกช่วยให้สามารถตอบสนองต่อโอกาสทางการตลาดใหม่ๆ ได้อย่างรวดเร็ว

การรวมแผงการเทรดกับ cBot ประเภทอื่นๆ

แผงการเทรดให้การควบคุม UI ที่กำหนดเองซึ่งช่วยให้คุณดำเนินการต่างๆ ได้ คุณสามารถใช้งานร่วมกับ cBot ประเภทอื่นๆ ได้ ตัวอย่างเช่น แผงการเทรดอาจรวมปุ่ม Hedge ที่กำหนดเองซึ่งเมื่อคลิกแล้วจะทำการ Hedge โพสิชันที่เปิดอยู่ทั้งหมด คล้ายกับตัวอย่างผู้ช่วยการเทรดด้านบน

สรุป

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

Image title