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 พร้อมกันทั้งหมดเพียงแค่การคลิกครั้งเดียว