วันเสาร์ที่ 14 พฤษภาคม พ.ศ. 2554

เริ่มต้นเขียน EA จะซื้อ-ขายต้องเขียนอย่างไร

        สำหรับมือใหม่อาจจะมองภาพของการทำงานของ Expert Advisor (EA) ไม่ออกว่ามันเริ่มต้นการทำงานของโค๊ดที่เราเขียนอย่างไร ผมขออธิบายคร่าว ๆ ก่อน เพื่อใช้เป็นพื้นฐานก่อนที่เราจะเริ่มเขียนคำสั่งซื้อ (Buy) และ ขาย (Sell)
    ถ้าเราสร้างไฟล์ EA ขึ้นมาใหม่เราจะเห็นว่ามีฟังก์ที่สร้างมาให้อัตโนมัติ มาดูกันนะครับว่ามีอะไรบ้างแล้วแต่ละส่วนมีไว้ทำอะไร

    /* ส่วนนี้เป็นการประกาศฟังก์ชัน ชื่อฟังก์ชันคือ init */
    /* int (integer - เลขจำนวนเต็ม) หน้าชื่อฟังก์ชั่น คือชนิดของค่าที่ส่งกลับคืน หลังจากทำงานในฟังก์ชันนี้แล้ว */
    int init () {

            /* ฟังก์ชันนี้เป็นฟังก์ชั่นหลักของ EA ซึ่งจะทำงานเมื่อเริ่มต้น EA ครั้งแรก */
            /* ถ้าเรามีตัวแปรไหนที่ต้องการให้มีการกำหนดค่าก่อนที่จะเริ่มการทำงานของ EA เราก็สามารถมากำหนดในฟังก์ชันนี้ได้ */

        /* ส่งค่า 0 กลับคืน */
        return(0);
    }

    /* ฟังก์ชันนี้ชื่อ deinit คืนค่ากลับเป็น int พอมองออกรึยังครับ */
    int deinit () {

        /* ฟังก์ชั่นจะทำงานอัตโนมัติเหมือนฟังก์ชั่น init แต่ต่างกันตรงที่จะทำงานตอนที่เราปิด EA ครับ */
        /* ซึ่งเราจะใช้ฟังก์ชันนี้เพื่อเขียนคำสั่งลบสิ่งที่เราสร้างตอนที่ EA ทำงาน */
        /* ส่งค่า 0 กลับคืน */
        return(0);
    }



    /* ตามชื่อฟังก์ชันแหละครับ เมื่อเราเริ่มรัน EA หลังจากที่ทำงานฟังก์ชัน init เสร็จแล้ว ก็จะมาทำฟังก์ชันนี้ต่อ */
    int start () {

        /* ความรู้ในการเทรดที่เรามี เราจะเปลี่ยนมันให้เป็นโค๊ตแล้วเขียนมันให้ทำงานอัตโนมัติที่ตรงนี้แหละครับ */
        /* จะทำให้ได้กำไรหรือว่าขาดทุนนั้นนอกจากมีกลยุทธ์ที่ดีแล้วก็ต้องอาศัยการเขียนโค๊ดที่มีประสิทธิภาพด้วย ถึงจะทำให้เราบรรลุวัตถุประสงค์ที่ตั้งไว้นะครับ ถ้าความคิดดีแต่เขียนโค๊ตไม่ดีก็อาจทำให้ขาดทุนได้หรือถึงขั้นล้างพอร์ตได้ครับ */
        /* แต่ว่าหลังจากที่เรา EA เสร็จ อย่างน้อยเราก็ต้องทดสอบก่อนว่ามันสามารถทำงานได้ตามที่เราเขียน แล้วค่อยนำไปใช้งานจริง */
        /* มาเริ่มกันเลยดีกว่าครับ */
        /* ก่อนที่เราจะส่งคำสั่งซื้อขาย หรือว่าเปิด Order เราก็ต้องการวิเคราะห์ด้วยเครื่องมือต่าง ๆ ตามความถนัดของแต่และคน อาจจะใช้ RSI MA MACD STOCHASTICหรืออื่นๆ อีกมากมาย ซึ่งเราจะมาศึกษาวิธีการเขียนโค๊ตเพื่อ นำค่าจากเครื่องมือต่างๆ เหล่านี้ มาใช้ในการกำหนดเป็นเงื่อนไขซื้อขาย หรือปิด order */
        /* แต่ตอนนี้ผมอยากให้เข้าใจคำสั่งในการซื้อขายก่อนครับ ซึงหลังจาก วิเคราะห์สัญญาณแล้ววก็ทำการเปิด Order ด้วยคำสั่งOrderSend */
        int ticket = OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"EA Comment",255,0,CLR_NONE);

        /* การส่งคำสั่งด้วยฟังก์ชั่นก์ OrderSend เมื่อฟังก์ชั้นนี้ทำงานเสร็จก็จะส่งค่ากลับมาเป็นชนิด int เราจึงประกาศตัวแปรชื่อ ticket เป็นชนิด int เพื่อรับค่าจากฟังก์ OrderSend */
        /* ซึ่ง Parameter ที่ต้องส่งเข้าไปในฟังก์ชั่น OrderSend ได้แก่ */
        /* Symbol() เป็นฟังก์ที่ใช้บอกชื่อคู่เงินที่เรากำลังจะเทรด */
        /* OP_BUY เพื่อบอกว่าเราต้องการจะเปิด Order ซื้อ ถ้าเราจะเปิด Order ขายก็กำหนดเป็น OP_SELL */
        /* 1.0 เป็นค่าของ Lot Size ที่เราจะเทรด ซึ่งค่านี้สามารถปรับเปลี่ยนตามความต้องการของผู้เทรด ซึ่งต่อไปเราจะเขียนเป็นตัวแปร แล้วสามารถรับค่าจากผู้เทรดได้ */
        /* Ask ในการเปิดแบบ BUY เราต้องซื้อที่ราคา Ask ถ้าเปิดแบบ SELL ขายเราต้องซื้อที่ราคา Bid */
        /* 3 หมายถึง slippage ก็คือราคาที่เรายอมให้มีเปลี่ยนแปลงได้สูงสุดกี่จุด จากราค่าขณะที่ส่งคำสั่งจนถึงเวลาที่ Server ประมวลผล */
        /* 0 ตัวแรกหมายถึงจุด Stop Loss ถ้าใส่ 0 คือไม่กำหนด แต่ในการเทรดการเปิด Order ควรกำหนดจุด Stop Loss ด้วย ซึ่งวิธีการคำนวนจุด Stop Loss จะมาพูดในบทความต่อไป */
        /* 0 ตัวที่สองคือค่าจุดเป้าหมายของกำไร ซึ่งเมื่อราคามาถึงจุดนี้ก็จะทำการปิด Order ให้อัตโนมัติ ถ้าใส่ 0 คือไม่ได้กำหนด ซึ่งผู้เทรดสามารถเขียนเงื่อนไขขึ้นมาเพื่อทำการส่งคำสั่งปิด Order เองได้จะกล่าวในบทความถัดไป */
        /* "EA Comment" เป็นคอมเมนท์ ที่เราตั้งเพื่อความเข้าใจของเราเอง */
        /* 255 เป็นตัวเลขที่ใช้ระบุหมายเลขคำสั่ง ที่เราเข้าใจเอง */
        /* 0 เป็นการกำหนดระยะเวลาในการยกเลิก Order ใช้สำหรับคำสั่งที่ Pending เท่านั้น */
        /* CLR_NONE เป็นการกำหนดสีของลูกศรเวลาเปิด Order ถ้าไม่ให้มีลูกศรก็หนดเป็น CLR_NONE */

        /* ถ้าการส่งคำสั่งสำเร็จไม่มี Error เกิดขึ้น ตัวแปร ticket ก็จะได้รับค่าหมายเลข ticket จาก Server */

    /* จบการทำงานคืนค่า 0 กลับไป หลังจากนั้นจะเข้ามาทำฟังก์ชันนี้อีกเมื่อมีการส่งข้อมูลมาจากโบรกเกอร์ของเรา */
    /* ซึ่งถ้าตรงกลับช่วงที่ตลาดปิด เสาร์-อาทิตย์ หลายคนอาจสงสัยว่าเขียน EA เสร็จแล้ว ทดสอบรัน ปรากฏว่าไม่เห็นมีอะไรเกิดขึ้นเลย ไม่ต้องสงสัยแแล้วนะครับ */
        return(0);
    }
    ก่อนจบบทความนี้ ผมอยากจะพูดถึงความรู้สึกในการทำบล็อกนี้สักเล็กน้อย คือจากการที่ผมดูสถิติการเข้ามาชมบล๊อกนี้ มันทำให้ผมรู้สึกมีกำลังใจและอยากจะทำบทความต่อๆไป คิดว่ามันน่าจะเป็นประโยชน์กันคนที่อยากหาความรู้เพิ่มเติม และก็หวังเป็นอย่างยิ่งว่าผู้ที่เข้ามาอ่านบทความเหล่านี้แล้ว จะรู้สึกพอใจและอยากติดตามบทความต่อๆไป ซึ่งหากมีผู้สนใจมันก็จะเป็นแรงผลักดันให้เกิดบทความต่อๆไปครับ ขอขอบคุณที่ร่วมติดตามครับ