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

Martingale cBot

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

Martingale cBot เป็นหุ่นยนต์เทรดที่ใช้กลยุทธ์ Martingale ซึ่งเป็นระบบการเดิมพันแบบคลาสสิกที่ปรับใช้กับตลาดการเงิน ค้นพบโดยนักคณิตศาสตร์ชาวฝรั่งเศสในศตวรรษที่ 18 กลยุทธ์ Martingale กลายเป็นที่นิยมอย่างรวดเร็วในหมู่นักพนันในคาสิโน

ตัวอย่าง

เพื่อทำความเข้าใจกลไกของกลยุทธ์ Martingale ให้พิจารณาสถานการณ์ที่มีการโยนเหรียญในเกมหัวหรือก้อย โดยเริ่มต้นด้วยการเดิมพัน 1 ดอลลาร์สหรัฐ

เหรียญมีโอกาส 50/50 ที่จะออกหัวหรือก้อย การโยนเหรียญแต่ละครั้งเป็นอิสระต่อกัน - ผลลัพธ์ของการโยนครั้งหนึ่งไม่ส่งผลต่อครั้งต่อไป

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

การสร้าง cBot

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

โค้ด Martingale 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
using cAlgo.API;

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

        [Parameter("Stop Loss", Group = "Protection", DefaultValue = 40)]
        public int StopLoss { get; set; }

        [Parameter("Take Profit", Group = "Protection", DefaultValue = 40)]
        public int TakeProfit { get; set; }


        private Random random = new Random();

        protected override void OnStart()
        {
            Positions.Closed += OnPositionsClosed;

            ExecuteOrder(InitialQuantity, GetRandomTradeType());
        }

        private void ExecuteOrder(double quantity, TradeType tradeType)
        {
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(quantity);
            var result = ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "Martingale", StopLoss, TakeProfit);

            if (result.Error == ErrorCode.NoMoney)
                Stop();
        }

        private void OnPositionsClosed(PositionClosedEventArgs args)
        {
            Print("Closed");
            var position = args.Position;

            if (position.Label != "Martingale" || position.SymbolName != SymbolName)
                return;

            if (position.GrossProfit > 0)
            {
                ExecuteOrder(InitialQuantity, GetRandomTradeType());
            }
            else
            {
                ExecuteOrder(position.Quantity * 2, position.TradeType);
            }
        }

        private TradeType GetRandomTradeType()
        {
            return random.Next(2) == 0 ? TradeType.Buy : TradeType.Sell;
        }
    }
}
 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
import clr

clr.AddReference("cAlgo.API")

from cAlgo.API import *

from robot_wrapper import *

import random

class SampleMartingalecBot():
    def on_start(self):
        api.Positions.Closed += self.on_position_closed
        self.execute_order(api.InitialQuantity, self.get_random_trade_type())

    def execute_order(self, quantity, tradeType):
        volumeInUnits = api.Symbol.QuantityToVolumeInUnits(quantity)
        result = api.ExecuteMarketOrder(tradeType, api.SymbolName, volumeInUnits, "Martingale",  api.StopLoss,  api.TakeProfit)
        if result.Error == ErrorCode.NoMoney:
            api.Stop()

    def on_position_closed(self, args):
        api.Print("Closed")

        position = args.Position
        if position.Label != "Martingale" or position.SymbolName != api.SymbolName:
            return
        if position.GrossProfit > 0:
            self.execute_order(api.InitialQuantity, self.get_random_trade_type())
        else:
            self.execute_order(position.Quantity * 2, position.TradeType)

    def get_random_trade_type(self):
        return TradeType.Buy if random.randint(0, 1) == 0 else TradeType.Sell

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

Martingale cBot ไม่ได้ใช้โมเดลการคาดการณ์หรืออินดิเคเตอร์ทางเทคนิคใดๆ เพื่อคาดการณ์ทิศทางของตลาด แทนที่จะเป็นเช่นนั้น มันอาศัยโอกาสสุ่มสำหรับการตัดสินใจซื้อและขาย ส่งผลให้เกิดผลลัพธ์ที่คาดเดาไม่ได้ (กำไรหรือขาดทุน) สำหรับแต่ละการเทรด

ตรรกะ

ทิศทางการเทรดแบบสุ่ม

  • cBot สุ่มเลือกว่าจะวางคำสั่งซื้อหรือขายผ่านวิธี GetRandomTradeType()

  • วิธี ExecuteOrder() วางคำสั่งตลาดด้วยปริมาณ stop loss และ take profit ที่กำหนดไว้ในพารามิเตอร์

กลไก Martingale

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

การบริหารความเสี่ยง

  • cBot นี้ใช้กลยุทธ์ Martingale โดยเพิ่มขนาดโพสิชันเป็นสองเท่าหลังจากทุกการเทรดที่ขาดทุน เพื่อฟื้นทุนและทำกำไรเมื่อมีการเทรดที่ประสบความสำเร็จ
  • ค่า Stop Loss และ Take Profit เริ่มต้นมีเป้าหมายเพื่อสร้างสมดุลระหว่างความเสี่ยงและผลตอบแทนในการเทรดแต่ละครั้ง

การดำเนินการและสิ้นสุด

หาก cBot พบข้อผิดพลาดเนื่องจากเงินทุนไม่เพียงพอ (NoMoney), cBot จะหยุดพยายามทำการเทรด

พารามิเตอร์

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

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

Stop Loss ที่เล็กจะปิดการเทรดขาดทุนได้เร็วขึ้น ลดการขาดทุนที่อาจเกิดขึ้นต่อการเทรด อย่างไรก็ตาม ก็เพิ่มความเสี่ยงที่จะถูก Stop Out เร็วเกินไปเนื่องจากความผันผวนระยะสั้น ทำให้รอบการเพิ่มขนาดโพสิชันแบบ Martingale เกิดขึ้นบ่อยครั้งขึ้น
Take Profit Pip ระยะทางจากราคาเข้าที่การเทรดจะถูกปิดเมื่อถึงระดับกำไรที่กำหนด การตั้งค่า Take Profit ที่สูงช่วยให้คุณสามารถทำกำไรได้มากเมื่อตลาดเคลื่อนไหวในทิศทางที่คุณคาดหวังอย่างมีนัยสำคัญ อย่างไรก็ตาม นี่ก็หมายความว่าการเทรดอาจใช้เวลานานขึ้นในการปิด หรืออาจกลับตัวก่อนที่จะถึงเป้าหมายกำไร ซึ่งอาจทำให้พลาดโอกาส

Take Profit ที่เล็กกว่าจะทำให้การเทรดปิดเร็วขึ้น ทำให้ได้กำไรที่น้อยกว่าแต่บ่อยครั้งขึ้น แนวทางนี้อาจลดโอกาสที่จะพลาดกำไร แต่ก็จำกัดศักยภาพในการทำกำไรของแต่ละการเทรด

การประยุกต์

ตลาดที่เคลื่อนไหวในกรอบหรือตลาดด้านข้าง

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

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

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

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

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

ตลาดที่มีความผันผวนต่ำ

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

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

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

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

หลีกเลี่ยงการใช้งาน cBot ในช่วงเวลาที่คาดว่าจะมีเหตุการณ์ทางเศรษฐกิจหรือการประกาศข่าวสำคัญเนื่องจากจะทำให้เกิดความผันผวนสูง

สินทรัพย์ที่กลับสู่ค่าเฉลี่ย

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

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

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

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

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

Summary

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

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