int start() { int total =OrdersTotal(); int x=0; while (x<1) //Point 1 { for(int i=0;i<total;i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); int type = OrderType(); bool result = false; switch(type) { case OP_BUY : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Pink); break; case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,Pink); break; case OP_BUYLIMIT : result = OrderDelete(OrderTicket()); break; case OP_SELLLIMIT : result = OrderDelete(OrderTicket()); break; case OP_BUYSTOP : result = OrderDelete(OrderTicket()); break; case OP_SELLSTOP : result = OrderDelete(OrderTicket()); break; } } if(OrdersTotal()==0) //Point 2 x=1; } return(0); }
วันอาทิตย์ที่ 21 พฤษภาคม พ.ศ. 2560
ฝึกเขียน EA ตัวอย่างที่ 2 ปิด Order ทั้งหมด
จุดประสงค์ เพื่อศึกษา Code ของ EA ที่ใช้คำสั่งปิด Order ที่เปิดอยู่และ Pending Order ทั้งหมดทุก ๆ คู่เงิน
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
จุดสังเกต
ตอบลบPoint 1 คือจุดที่เราใช้สร้าง While Loop เพื่อครอบ For Loop อีกชั้นหนึ่งก็เพื่อจะให้ EA ตรวจสอบจนแน่ใจจริง ๆ แล้วว่าไม่มี Order อะไรหลงเหลืออยู่ในบัญชีแล้วจริง ๆ เหตุที่ทำเช่นนี้เพราะในความเป็นจริงการสั่งคำสั่ง Close ออกไปเป็นจำนวนมากย่อมจะมีบางครั้งที่บางออร์เดอร์อาจยังปิดไม่ได้
Point 2 คือจุดที่เราใช้ตรวจสอบว่า Order ทั้งหมดได้ถูกปิดหมดแล้ว ใช่หรือไม่ หากใช่ตัวแปร x ซึ่งเป็นตัวแปรที่ควบคุม While loop จะถูกกำหนดค่าใหม่เพื่อให้เงื่อนไขของ while เป็นเท็จจึงหลุดออกจากการทำงานของ while loop
สรุปความรู้ที่ได้จากตัวอย่างนี้
ตอบลบทำให้เราสามารถนำความรู้เรื่องนี้ไปพัฒนาระบบปิด Order ของ EA ได้ หรือนำไปสร้างเป็น script สำหรับเอาไวสั่งให้ปิด Order พร้อมกันทั้งหมดเพียงแค่การคลิกครั้งเดียว