วันศุกร์ที่ 14 กันยายน พ.ศ. 2555

การเขียน EA เพื่อแสดงข้อความบน Chart

        ในการเขียน EA บางครั้งเราจำเป็นต้องแสดงผลของค่าบางค่าที่เราต้องการบน Chart เพื่อให้ง่ายต่อการตรวจสอบผลการทำงานของ EA ว่าทำงานได้ถูกต้องตามเงื่อนไขที่เราตั้งไว้หรือไม่
        จากตัวอย่างด้านล่างเป็นการแสดงผลขอกำไร/ขาดทุนของ Order ที่เราเปิดอยู่ ซึ่งจะแสดงหมายเลข Ticket และ Profit ที่เกิดขึ้น



ตัวอย่างการเขียนโค๊ด

วันพุธที่ 5 กันยายน พ.ศ. 2555

สอนวิธีการเขียน EA เพื่อทำการปิด Order

        ในการเขียน EA เพื่อช่วยในการเทรด Forex แบบอัตโนมัตินั้น การส่งคำสั่งเพื่อปิด Order นั้นถือเป็นส่วนหนึ่งที่มีความสำคัญอีกส่วนหนึ่ง เราต้องทำความเข้าใจถึงแนวคิดและขั้นตอนในการทำงานของการปิด Order เพื่อลดความผิดพลาดที่จะเกิดขึ้น

        ทุกครั้งที่มีการเปลี่ยนแปลงราคา Server จะส่งสัญญาณกลับมายัง Client ฟังก์ชั่น start จะทำงาน


    int start () {

        /* สมมติว่าเราได้วิเคราะห์สัญญาณแล้วปรากฏว่าถึงจุดที่เราจะต้องทำการปิด Order */
        /* ทำการเรียกฟังก์ชั่นเพื่อปิด Order จากตัวอย่างจะทำการปิด Order ซึ่งมีการเปิดแบบ BUY */

        if(closeOrder(OP_BUY)) {
            /* ปิด Order สำเร็จ Order */
        } else {
            /* ปิด Order ไม่สำเร็จสำเร็จ Order */
        }

        return(0);
    }


        เราเขียนฟังก์ชั่นการปิด Order แยกออกมาจากส่วนของฟังก์ชั่น start เพื่อให้ง่ายต่อการแก้ไขแล้วตรวจสอบหากมีการทำงานผิดพลาดเกิดขึ้น จากฟังก์ชั่น closeOrder จะเห็นว่า Input ที่จะป้อนให้แก่ฟังก์ชั่นนี้คือ ลักษณะของฟังก์ชั่นที่เปิดเป็น BUY หรือ SELL ถ้าต้องการปิด Order ที่เปิดเป็น BUY ก็ส่งค่า OP_BUY และถ้าต้องการปิด Order ที่เปิดแบบ SELL ก็ส่ง OP_SELL มาให้ฟังก์ชั่น closeOrder หลังจากที่ประมวลผลเสร็จแล้ว ฟังก์ชั่น closeOrder จะส่งค่าคืนให้กับฟังก์ชั่นที่มีการเรียก closeOrder ซึ่งก็คือฟังก์ชั่น start โดยข้อมูลที่ส่งกลับเป็นชนิดบูลีน ซึ่งถ้าปิด Order สำเร็จจะส่ง true กลับ แต่หากปิด Order ไม่สำเร็จจะส่งค่า false กับ ดังนั้นที่ฟังก์ชั่น start ต้องทำการตรวจสอบค่าผลการทำงานของการปิด Order ว่าสำเร็จหรือไม่

วันอาทิตย์ที่ 2 กันยายน พ.ศ. 2555

ตัวอย่างการเขียน 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 ครับ

วันพุธที่ 29 สิงหาคม พ.ศ. 2555

สิ่งสำคัญที่ไม่ควรมองข้ามในการเขียน EA

             สิ่งที่เราคาดหวังจาก Expert Advisor (EA) นั้น นอกจากการความาสามารถในการกำไรให้เราแล้วนั้น สิ่งหนึ่งที่เราต้องการก็คือ การทำงานที่ถูกต้องโดยไม่เกิดข้อผิดพลาด ซึ่งหลังจากที่เราเขียน EA เสร็จแล้วเราจะต้องทำการทดสอบด้วย Strategy Tester เพื่อให้แน่ใจว่าการทำงานของ EA นั้นสามารถทำงานได้ตรงตามที่เราคาดหวังไว้ ซึ่งการทดสอบ EA วิธีการนี้เป็นเพียงการทดสอบขั้นต้นเท่านั้น เพราะในสภาวะของการใช้งานจริงจะมีปัญจัยที่จะสารมารถที่ทำให้เกิดความผิดพลาดหรือการการงานผิดเพี้ยนจากหลักการที่กำหนดให้ตัว EA คือ ในสถานะการณ์ที่มีความผันผวน เมื่อมีการส่งคำสั่งซื้อ (BUY) หรือส่งคำสั่งขาย (SELL) เราอาจจะไม่สามารถซื้อหรือขายได้ในราคาที่เราต้องการ เพราะในขณะที่เราส่งคำสั่งซื้อ/ขายไปนั้น ราคาได้มีการเปลี่ยน ยกตัวอย่างการส่งคำสั่งซื้อ
       

วันพุธที่ 22 สิงหาคม พ.ศ. 2555

เตือนสำหรับนักเทรด Forex ทั้งมือใหม่และมือเก่า

อันตราย!!

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

วันพฤหัสบดีที่ 10 พฤษภาคม พ.ศ. 2555

รู้สักนิดก่อนเขียน EA - ราคาการซื้อและขายของ BUY กับ SELL

สิ่งหนึ่งที่ผู้เขียน EA หรือแม้แต่ผู้เทรด Forex ต้องทำความเข้าใจเกี่ยวกับการเปิด Order ก็คือ ต้องรู้ว่า
  •  Order Buy ซื้อที่ราคา Ask ขายที่ราคา Bid
  • Order Sell  ซื้อที่ราคา Bid ขายที่ราคา Ask

แล้วอย่างไง ??

สมมติว่าเรามี Order Buy อยู่ในมือและราคาปัจุบันอยู่ที่ 1.6100 และเราคิดว่าเราจะเขียน EA เพื่อ Modify Order นี้เพื่อตั้ง TP (Target Profit) ให้ Order นี้ปิดที่ราคา 1.6150 ซึ่ง Order นี้เป็น Order Buy ราคา 1.6150 จึงเป็นราคา Ask แต่เราต้องปิดที่ราคา Bid เพราะฉะนั้น  ราคาที่จะทำให้ Order นี้ปิดก็คือ 1.6150 + Spread (ค่า Spread คือค่าความต่างระหว่างราคา Ask กับ ราคา Bid ซึ่งค่า Spread นี้จะมีความต่างไม่เท่ากันขึ้นอยู่กับคูเงินที่เราเทรด และขึ้นอยู่กับโปรกเกอร์หรือลักษณะของบัญชีที่เราเปิด แต่ในการเขียน EA เพื่อคำนวณหาค่านี้จะเขียนเหมือนกันคือ Ask -Bid