EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: TvT on กุมภาพันธ์ 25, 2011, 06:54:09 pm
-
ถ้าเกิดส่งออเดอร์ไปเป็น limit order แล้วจะสามารถเลือก selectorder ได้หรือไม่
คือเป้าหมายเพื่อ หา lot ที่ีส่งไป และตรวจสอบว่ามีอยู่หรือไม่ แสดงผลเป็น true false หรือ 0-1 ก็ได้
-
ถ้าตั้ง
double x=0
x=ordersend (....................................)
orderselect (x,....)
lot= orderlot
ถูกมั๊ยครับ จะเลือกออดเดอร์นี้ แต่สงสัยจะรู้ได้ไงว่าเปิดไปรึยังจะได้ตั้งใหม่
-
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType( ) ==OP_BUYLIMIT)
{
lots=OrdersLots();
}
}
-
แล้วถ้าอยากรู้ว่าที่ตั้งไว้เปิดไปรึยังนี่ต้องทำไงอ่ะครับ
-
ก้ต้องสร้างฟังก์ชั่นขึ้นมาอีกตัวครับเพื่อ check ชนิดของ order ที่มัน pending อยู่ครับว่ามันมีอะไรเหลืออยู่มั้ง
-
ต้องใช้ฟังชั่นอะไรในการตรวจสอบครับ ว่า pending เหลืออยู่หรือไม่
-
ต้องใช้ฟังชั่นอะไรในการตรวจสอบครับ ว่า pending เหลืออยู่หรือไม่
ต้องสร้างขึ้นมาใช้เองครับ
int buystop=0;
int sellstop =0;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP)
buystop+=1;
if(OrderType()==OP_SELLSTOP)
sellstop+=1;
}
แล้วเอาค่า sellstop หรือ buystop ไปใช้
-
เอาไปใช้แล้วไม่ได้น่ะครับ คืออยากให้เลือกดูว่า Op_Buylimit ที่สั่งไว้เปิดไปรึยัง
เพื่อหาค่า Orderopenprice ที่เปิดไปแล้วค่าล่าสุดเอามาใช้คำนวนกำไร
-
ก็ต้องเปลี่ยนจาก OP_BUYSTOP เป็น OP_BUYLIMIT ก่อนสิครับ code บางครั้งผมยกตัวอย่างมาต้องนำไปปรับแก้ไขเองด้วยนะครับ
-
ลองแล้วครับแต่มันแยกระหว่างเปิดแล้วกับยังไม่เปิดไม่ได้
คือ อยากได้เฉพาะที่เปิดไปแล้วครับ
-
ถ้าคุณอยากได้แบบนั่นก็เขียนเงื่อนไขเพิ่มแบบนี้เลยสิครับ
if(OrderType()==OP_BUY)
buy+=1;
if(OrderType()==OP_SELL)
sell+=1;
เอาไวดูว่า order ที่เปิดไปแล้วมีอะไรมั้ง
ส่วน order ที่ยังไม่เปิดก็ใช้แบบเดิมแล้วก็ใช้ ตัวแปรนับเหมือนกัน คุณก็จะรู้ว่า order ที่เปิดไปแล้วมีอะไรมั้ง แล้วก็ order ที่ยัง pending อยู่มีอะไรมั้ง
-
อันนี้ครับคือตัวที่ผมเขียนคล้ายๆๆ FxDoublelot แต่ผมติดตรงการปิด order ผมใช้ two
ยังไงช่วยเปลี่ยนจาก two เป็น orderopenprice ของ order ที่เปิดล่าสุดทีนะครับ
พยายามแก้มาหลายทีแล้วไม่รู้จะเอาค่านั้นมาใช้ยังไง
-
เมื่อเราวางเพนดิ้งไว้ มันจะเป็น BUYLIMIT และเมื่อราคาวิ่งมาชน BUYLIMIT จะแปลงร่างเป็น BUY
หลังจากนั้นเราจะไม่มีทางรู้เลย ว่าเราเคยวาง BUYLIMIT ไว้หรือเปล่า ออเดอร์บายอันนี้มันเปิดด้วยเพนดิ้งหรือเปล่า
ดังนั้นมันจะมีอยู่่2สถานะครับ คือต้องนับว่า มี Buylimit เปิดอยู่กี่อัน มี Buy เปิดอยู่กี่อัน
ถ้า Buylimit ไม่มี Buy ก็ไม่มี แสดงว่าอีเอยังไม่ทำงาน หรือปิดกำไรได้หมดแล้ว รอเริ่มบายใหม่
ถ้า Buylimit ไม่มี Buy มี แสดงว่าเปิดออเดอร์ล่าสุดไปแล้ว ต้องวางเพนดิ้งใหม่ในสเตปต่อไป
ถ้า Buylimit มี Buy ไม่มี แสดงว่าปิดกำไรไปแล้ว ต้องลบเพนดิ้งทิ้ง ไม่งั้นมันเบิ้ลต่อ
-
หลักการคิดนี่เข้าใจอยู่ครับ แต่ไม่เข้าใจว่าจะรู้ได้ไงว่า
Buylimit ไม่มี Buy มี แสดงว่าเปิดออเดอร์ล่าสุดไปแล้ว
แล้วก็จะเอา orderopenprice ของออเดอร์ล่าสุดที่เปิดไปแล้ว
-
หลักการคิดนี่เข้าใจอยู่ครับ แต่ไม่เข้าใจว่าจะรู้ได้ไงว่า
Buylimit ไม่มี Buy มี แสดงว่าเปิดออเดอร์ล่าสุดไปแล้ว
แล้วก็จะเอา orderopenprice ของออเดอร์ล่าสุดที่เปิดไปแล้ว
ลองเอา code นี้ไปทดสอบดูครับ
static int buy;
static int sell;
static int buylimit;
static int selllimit;
int start()
{
buy =0;
sell =0;
buylimit =0;
selllimit =0;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP)
buylimit+=1;
if(OrderType()==OP_SELLSTOP)
selllimit+=1;
if(OrderType()==OP_BUY)
buy+=1;
if(OrderType()==OP_SELLSTOP)
sell+=1;
}
Print("buy :",buy);
Print("buylimit :",buylimit);
Print("sell :",sell);
Print("selllimit :",selllimit);
}
ใน code เราสั่งให้มันเก็บค่า buy buylimit sell selllimt เอาไวในตัวแปรแบบ static ถ้าอยากรู้ว่ามี order ไหนมั้งก็แค่ลองสั่ง print ค่าออกมาดูไงครับ