EA Programing => MT4 Code Libary => Topic started by: admin on ตุลาคม 12, 2010, 04:23:42 am
-
การเปิด ORDER ใน MT4
คำสั่งที่เราใช้ในการเปิด Order ก็คือ Ordersend โดยมีค่าพารามิเตอร์ตามตัวอย่างด้านล่านนี้
OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) ;
ตัวอย่าง เช่น
OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order",16384,0,Green);
มีความหมายว่า เปิด Order buy ที่ราคาตลาด โดนกำหนดให้ราคาคลาดเคลื่อนได้ 3 จุดจากราคาปัจจุบัน แล้วมีค่า SL TP ที่ 25 จุดจากราคาเปิด มีคอมเม้นข้อความว่า My order มีค่า Magic number คือ 16384 แล้วจะแสดงลูกศรสีเขียวบนกราฟเวลาที่ Order นี้เปิด
// buystop
OrderSend(Symbol(),OP_BUYSTOP,1,Ask+15*Point,3,Ask-30*Point,Ask+30*Point,"My order",16384,0,Green);
// buylimit
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-15*Point,3,Ask-30*Point,Ask+30*Point,"My order",16384,0,Green);
// sellstop
OrderSend(Symbol(),OP_SELLSTOP,1,Bid-15*Point,3,Bid+30*Point,Bid-30*Point,"My order",16384,0,RED);
// selllimit
OrderSend(Symbol(),OP_SELLLIMIT,1,Bid+15*Point,3,Bid+30*Point,Bid-30*Point,"My order",16384,0,RED);
-
แล้วทำอย่างไร ให้มันเปิดแค่ orderเดียวครับ
ผมลองกำหนดเงื่อนไขแล้วมันเปิดตลอดเลยครับ
-
เปิดแค่ order เดียวใช่ไหมครับ ก็กำหนดเงื่อนไขแบบนี้เข้าไปครับ
if(OrdersTotal()< 1)
{
คำสั่งเปิด order ครับ
}
-
ขอบคุณครับ
-
ขอบคุณมากครับ ขอรบกวนถามต่อนะครับ...
แล้วถ้าต้องการให้เปิดทีละorder ล่ะครับ เมื่อเข้าเงื่อนไข
ยกตัวอย่างเช่น ma เวลาตัดกัน ขึ้น ก็เปิด บาย ตัดลง เปิด เซล ทำอย่างนี้ไปเรื่อยๆ
ผมลองตามที่ท่านadmin บอกแล้วครับ มันเปิดแค่orderเดียวจริงๆเปิด บาย พอเข้าเงื่อนไข เซลก็ไม่ยอมเปิดครับ
แก้ยังไงดีครับ
รบกวนด้วยครับ
ปล. mt4 Code Libary มีประโยชน์มากครับ... อยากให้มีไปเรื่อยๆๆ.... ขอบคุณที่แบ่งปัน....
-
คำส่ง if (OrdersTotal()<1){...} หมายความว่า ถ้าออร์เดอร์รวมทั้งหมด น้อยกว่า 1 ถึงจะเปิด / ถ้าคุณรันโปรแกรมแล้วเปิดออร์เดอร์ขึ้นมา1ออร์เดอร์ OrdersTotalจะเท่ากับ 1 ออร์เดอร์ที่ดำเนินการอยู่ /
คุณจะเปิดอีกออร์เดอร์ได้ก็ต่อเมื่อคุณปิดออร์เดอร์นี้แล้ว OrdersTotalถึงจะเท่ากับ 0 คือน้อยกว่า1 ..
แนะนำให้เขียน void CountOrder() นับจำนวนออร์เดอร์ขึ้นมา ให้CountOrder()แยกประเภทด้วยว่าเป็น Buy หรือ Sell
แล้วเราก็นำมาใช้เช่น if(CountOrder(OP_BUY)==0){...} สำหรับBuy
และสำหรับSell if(CountOrder(OP_SELL)==0){...}
เมื่อแยกแล้ว อยากให้เปิด Buy และ Sell อย่างละกี่ Order ให้สร้างตัวแปร double MAXBuy=จำนวนที่อยากให้เปิด Buy; double MAXSell=จำนวนที่อยากให้เปิดSell; แล้วนำไปแทนเช่น
if(CountOrder(OP_BUY)<MAXBuy){OpenBuy();} เปิด Buy = 10 Order. เมื่อกำหนด double MAXBuy=10;
if(CountOrder(OP_SELL)<MAXSell){OpenSell();} เปิด Sell = 10 Order.เมื่อกำหนด double MAXSell=10;
ถูกไม่ถูกยังไง รบกวน Admin ชี้แนะอีกทีนะครับ