ตัวอย่างการเขียน EA เพื่อเปิด Order โดยครอบคลุมทั้ง BUY และ SELL

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


/* ฟังก์ชั่นนี้จะทำงานเมื่อมีสัญญาณมาจากฝั่ง Server */

    int start(){



        /* เมื่อเราตรวจสอบราคาด้วยอินดิเคเตอร์ใดๆแล้ว แล้วถึงจุดที่ต้องการเปิด Order */

        /* ยกตัวอย่าง ถ้าต้องการเปิด ORDER BUY และ Lotsize เท่ากับ 1

        openOrder(OP_BUY,1);



        /* ยกตัวอย่าง ถ้าต้องการเปิด ORDER SELL และ Lotsize เท่ากับ 1

        openOrder(OP_SELL,1);



        return(0);

    }

    

    /* ฟังก์ชั่นสำหรับเปิด Order

    bool openOrder(int cmd,double lot,double tp=0.0) {

        int ticket,count;

        int error;

        double price;

        count  = 0;

        ticket = -1;

  

        /* วนลูปเพื่อส่งคำสั่งซื้อจนกว่าจะเปิด Order ได้ แต่ไม่เกิน 5 ครั้ง */

        while((ticket<0) && (count < 5)){
  
            /* ถ้าเป็นคำสั่ง BUY ให้ซื้อที่ Ask */
            if(cmd==OP_BUY) price=Ask;  
            /* ถ้าเป็นคำสั่ง SELL ให้ซื้อที่ Bid */
            else price=Bid;
  
            /* ถ้าเป็นคำสั่ง BUY */
            if(cmd==OP_BUY){
                ticket=OrderSend(Symbol(),OP_BUY,lot,price,3,0.0,tp,NULL,255,0,CLR_NONE);
                /* ตรวจสอบว่าเปิด Order สำเร็จรึปล่าว */
                if(ticket<0){ 
                    error = GetLastError();
                    Print("Error:Send Buy Order LastError = ",error," price=",price);
                    /* ถ้า error code เกี่ยวกับราคาที่เปลี่ยนไปจากราคาที่ต้องการให้อ่านค่าใหม่ */
                    if(error==129 || error==135 || error==146 || error==138){
                        RefreshRates(); 
                    }   
                }else{ 
                    /* ได้รับค่า ticket แสดงว่าเปิด Order สำเร็จ */
                    return (true); 
                }
            /* ถ้าเป็นคำสั่ง SELL */
            }else { 
                ticket=OrderSend(Symbol(),OP_SELL,lot,price,3,0.0,tp,NULL,255,0,CLR_NONE);  
                if(ticket<0 ){  
                    error = GetLastError();
                    Print("Error:Send Sell Order LastError = ",error," price=",price);
                    if(error==129 || error==135 || error==146 || error==138){
                        RefreshRates(); 
                    }
                }else {
                    /* เปิด Order สำเร็จ */ 
                    return (true); 
                }
            }
            /* เปิด Order ไม่สำเร็จกับไปเปิดใหม่ */   
            count++;
        }
        /* ไม่สามารถเปิด Order ได้ */   
        return (false);
     }
  

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

ไม่มีความคิดเห็น:

แสดงความคิดเห็น