หน้าแรก การเทรดด้วยระบบ โพสต์

ปิดคำสั่งเมื่อถึงเป้า หรือ ตัดขาดทุน - เครื่องมือสำหรับ MetaTrader 4

ไฟล์แนบ
34194.zip (995 bytes, ดาวน์โหลด 0 ครั้ง)

สวัสดีครับเพื่อนๆ เทรดเดอร์ทุกคน! วันนี้เราจะมาพูดถึงเครื่องมือที่ใช้ในการเทรดกันนะครับ นั่นก็คือ Expert Advisor หรือที่เราเรียกกันว่า EA นั่นเอง

EA ตัวนี้จะช่วยให้เราสามารถปิดคำสั่งเทรดได้ตามที่เรากำหนดไว้ โดยมี 3 ตัวแปรที่ต้องตั้งค่าดังนี้:

  1. เป้าหมายกำไร
  2. ตัดขาดทุน
  3. หมายเลขเวทมนตร์
extern double inTargetProfitMoney = 10; // เป้าหมายกำไร ($)
extern double inCutLossMoney = 0.0; // ตัดขาดทุน ($)
extern int inMagicNumber = 0; // หมายเลขเวทมนตร์

เมื่อ EA นี้ทำงาน มันจะเรียกใช้ฟังก์ชัน OnInit() ก่อน เพื่อยืนยันค่าที่เราตั้งไว้

int OnInit()
    {
        //---
        if(inTargetProfitMoney <= 0)
        {
            Alert("ค่าที่ป้อนไม่ถูกต้อง");
            return(INIT_PARAMETERS_INCORRECT);
        }

        inCutLossMoney = MathAbs(inCutLossMoney) * -1;
        //---
        return(INIT_SUCCEEDED);
    }

ทุกครั้งที่มีการเคลื่อนไหวของราคา (tick) จะเรียกใช้ฟังก์ชัน OnTick()

void OnTick()
    {
        //---

        double tFloating = 0.0;
        int tOrder = OrdersTotal();
        for(int i=tOrder-1; i>=0; i--)
        {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
                if(OrderMagicNumber() == inMagicNumber)
                {
                    tFloating += OrderProfit() + OrderCommission() + OrderSwap();
                }
            }
        }

        if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0))
        {
            fCloseAllOrders();
        }
    }

ในฟังก์ชัน OnTick จะคำนวณกำไรหรือขาดทุนรวม แล้วทำการปิดคำสั่งทั้งหมดเมื่อถึงเป้าหมายหรือขาดทุนสูงสุด

void fCloseAllOrders()
    {
        double priceClose = 0.0;
        int tOrders = OrdersTotal();
        for(int i=tOrders-1; i>=0; i--)
        {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
                if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL))
                {
                    priceClose = (OrderType() == OP_BUY) ? MarketInfo(OrderSymbol(), MODE_BID) : MarketInfo(OrderSymbol(), MODE_ASK);
                    if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold))
                    {
                        Print("คำเตือน: ปิดคำสั่งล้มเหลว");
                    }
                }
            }
        }
    }

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการศึกษาโค้ด MQL4 และการแชร์ประสบการณ์กัน สามารถเข้าร่วมกลุ่ม Telegram ของเราได้ที่ t.me/codeMQL

โพสต์ที่เกี่ยวข้อง

ความคิดเห็น (0)