แนบเป็นส่วนหนึ่งของที่ปรึกษาผู้เชี่ยวชาญฉันได้รับการทำงานในการทดสอบกลยุทธ์การซื้อขาย แต่ฉันมีปัญหากับข้อ จำกัด ของ MQL4 บางอย่างเมื่อจัดการกับอาร์เรย์ สิ่งที่ฉันต้องการให้ใช้อาร์เรย์เพื่อเก็บข้อมูลเกี่ยวกับตำแหน่งที่ฉันเปิดไว้และกำหนดค่าขององค์ประกอบบางอย่างใหม่อีกครั้ง สิ่งที่ฉันต้องการจะใช้คือชุดของฟังก์ชันสามอย่างแรก reconstructs อาร์เรย์ของคำสั่งที่เปิด นี้จะทำหลังจากทุกตำแหน่งการเปิดหรือปิด ฟังก์ชันลำดับถัดไปควรเรียงลำดับคำสั่งซื้อตามราคาเปิดของตน ฟังก์ชันลำดับล่าสุดคือการกำหนดใหม่การหยุดการขาดทุนและการรับกำไรสำหรับธุรกิจการค้าแบบเปิด ค่าที่กำหนดไว้ล่วงหน้าสำหรับการหยุดขาดทุนและรับรู้กำไรจะขึ้นอยู่กับราคาเปิดของคำสั่งแรก ฉันต้องการให้อีเอดำเนินการหยุดขาดทุนและทำกำไรตามลำพัง ฉันตระหนักดีว่ามีความเสี่ยงในการตั้งค่าอีเอด้วยวิธีนี้และฉันต้องการดำเนินการต่อไป
คู่ OrderStack [7] [9];/Order array ข้อมูล
ถ้า ((OrderStack [TotalOrders 1] [1] lt; Bid) (TotalOrders lt; 2))/เปิดตำแหน่งขายใหม่ในราคาที่ดีขึ้น
{//3
TicketNum = OrderSend (สัญลักษณ์ (), OP_SELL, LotSize2, การเสนอราคา, 3,0,0, ความคิดเห็น, 0.0, สีแดง);/เปิดคำสั่งซื้อ
ถ้า (TicketNumlt; 0)
{/4
พิมพ์ (ข้อผิดพลาดในการเปิดการค้า: Error Code =, GetLastError () ,, Lotsize:, Lots);
}/3
อื่น
{/4
ถ้า (OrderSelect (TicketNum, SELECT_BY_TICKET))
{/5
พิมพ์ (ใบสั่งซื้อที่เปิดในราคา:, OrderOpenPrice ());
OrderFlagS = 1;/ใช้โดยฟังก์ชัน EA หลักสำหรับแสดงความคิดเห็น
เทอร์มิ ();/เรียกใช้ฟังก์ชันที่สร้างอาร์เรย์ข้อมูลคำสั่งเปิด
}/4
}/3
}/2
}/1
}/0
//------------------------------------------------ --------------------
//Terminal.mqh
//------------------------------------------------ ------------------------------ 1 -
//ฟังก์ชันการทำบัญชีการสั่งซื้อ
//ตัวแปรสากล:
//OrderStack [7] [9]
//อาร์เรย์คำสั่งที่รู้จักกันดีล่าสุด
//1 ดัชนี = เลขที่ใบสั่ง
//[] [0] ไม่ได้นิยาม
//[] [1] ราคาเปิดเพื่อเสนอราคา (abs. value value)
//[] [2] StopLoss ของคำสั่งซื้อ (abs ราคาราคา)
//[] [3] TakeProfit ในใบสั่ง (abs ราคาราคา)
//[] [4] เลขที่ใบสั่ง
//[] [5] ปริมาณการสั่งซื้อจำนวนมาก (abs. price value)
//[] [6] ประเภทการสั่งซื้อ 0 = B, 1 = S, 2 = BL, 3 = SL, 4 = BS, 5 = SS
//[] [7] เลขเวทมนต์
//[] [8] ความพร้อมใช้งาน 0/1 ความคิดเห็น
//Mas_Tip [6]
//อาร์เรย์ของจำนวนคำสั่งซื้อทุกประเภท
//[] ประเภทใบสั่ง: 0 = B, 1 = S, 2 = BL, 3 = SL, 4 = BS, 5 = SS
//------------------------------------------------ ------------------------------ 2 -
ขั้วคู่ ()
{//1
int Mas_Tip [6];
int Qnt = 0;
int i;
//เคาน์เตอร์ใบสั่งซื้อ
//------------------------------------------------ ------------------------------ 3 -
ArrayInitialize (OrderStack, 0.0);/ลดขนาดอาร์เรย์
ArrayInitialize (Mas_Tip, 0);/ลดขนาดอาร์เรย์
//------------------------------------------------ ------------------------------ 4 -
สำหรับ (i = 0; i lt; OrdersTotal (); i )/สำหรับคำสั่งซื้อในตลาดและคำสั่งที่รอดำเนินการ
{/2
if ((OrderSelect (i, SELECT_BY_POS) == true) (OrderSymbol () == สัญลักษณ์ ()))
//ถ้ามีอีก .. และคู่สกุลเงินของเรา
{//3
//------------------------------------------------ --------------------- 5 -
Qnt;/จำนวนคำสั่งซื้อ
OrderStack [Qnt] [1] = OrderOpenPrice ();/สั่งซื้อราคาเปิด
OrderStack [Qnt] [2] = OrderStopLoss ();/SL ราคา
OrderStack [Qnt] [3] = OrderTakeProfit ();/ราคา TP
OrderStack [Qnt] [4] = OrderTicket ();/เลขที่ใบสั่ง
OrderStack [Qnt] [5] = OrderLots ();/จำนวนล็อต
Mas_Tip [OrderType ()] ;/จำนวนคำสั่งซื้อของประเภท
OrderStack [Qnt] [6] = OrderType ();/ประเภทการสั่งซื้อ
OrderStack [Qnt] [7] = OrderMagicNumber ();/หมายเลขเมจิก
ถ้า (OrderComment () ==)
{/4
OrderStack [Qnt] [8] = 0;/ถ้าไม่มีข้อคิดเห็น
}/3
อื่น
{/4
OrderStack [Qnt] [8] = 1;/ถ้ามีข้อคิดเห็น
}/3
}/2
//------------------------------------------------ --------------------- 6 -
OrderStack [0] [0] = Qnt;/จำนวนคำสั่งซื้อ
//------------------------------------------------ ------------------------------ 7 -
FillStack (OrderStack, Trend_Up);/เรียกใช้ฟังก์ชันที่จัดเรียงข้อมูลทางการค้าแบบเปิดตามทิศทางแนวโน้มและราคาเริ่มต้นของการซื้อขาย
ผลตอบแทน (0);
}/1
}/0
//------------------------------------------------ ------------------------------ 8 -
//
ฟังก์ชั่นการเรียงลำดับที่มีอยู่
//
double SortStack (Double OrderStack [7] [9], bool Trend_Up)/ฟังก์ชันเพื่อเรียงลำดับอาร์เรย์การสั่งซื้อใหม่ใน
//คำสั่งซื้อตามราคาเปิดเริ่มต้น
{//1
int i, TotalOrders;
TotalOrders = OrderStack [0] [0];
if (Trend_Up == true)
{/2
ArraySort (OrderStack [TotalOrders] [1], TotalOrders, 1, MODE_DECEND);
}/1
if (Trend_Up == false)
{/2
ArraySort (OrderStack [TotalOrders] [1], TotalOrders, 1, MODE_ASCEND);
}/1
FillStack (OrderStack, Trend_Up);/โทรไปยังฟังก์ชันที่กำหนดพารามิเตอร์ทางการค้าสำหรับอาการไม่พึงประสงค์
//เข้าสู่ตลาดเพื่อเรียงลำดับ
ผลตอบแทน (0);
}/0
//
//บันทึกพารามิเตอร์การค้าตลาดที่ไม่พึงประสงค์ฟังก์ชัน
//
Double FillStack (Double OrderStack [7] [9], bool Trend_Up)กำหนดพารามิเตอร์การตลาดที่ไม่พึงประสงค์
//ตามลำดับเริ่มต้นจากการเจาะแถบ Bollinger
{//1
ราคาคู่;
PriceIn = OrderStack [1] [1];
{/2
if (Trend_Up == true)
{//3
OrderStack [1] [2] = ราคาใน - StopLossVal;/คอลัมน์ 2 คอลัมน์การหยุดการสูญเสีย
OrderStack [1] [3] = ราคา 0.0030;/คอลัมน์ 3, เอาคอลัมน์รายการกำไร
OrderStack [2] [1] = ราคา - 0.0010;/คอลัมน์ 1 ราคาเฉลี่ยลง Market Order ซื้อราคา
OrderStack [2] [3] = ราคาใน - 0.0005;/คอลัมน์ 3 ทำกำไรสำหรับการเข้าสู่ตลาดโดยเฉลี่ย
}/2
if (Trend_Up == false)
{//3
OrderStack [1] [2] = ราคา In StopLossVal;/คอลัมน์ 2 คอลัมน์การหยุดการสูญเสีย
OrderStack [1] [3] = ราคาใน - 0.0030;/คอลัมน์ 3, เอาคอลัมน์รายการกำไร
OrderStack [2] [1] = ราคา 0.0010;/คอลัมน์ 1 ราคาเฉลี่ยลง Market Order ซื้อราคา
OrderStack [2] [3] = ราคา In 0.0005;/คอลัมน์ 3 ทำกำไรสำหรับการเข้าสู่ตลาดโดยเฉลี่ย
}/2
}/1
ผลตอบแทน (0);
}/0
ปัญหาฉันมีกับการใช้อีเอนี้เป็นที่เรียบเรียงให้ฉันข้อความผิดพลาดเกี่ยวกับ ”รายการอาร์เรย์ไม่สามารถกำหนด” สำหรับรหัสใน FillStack ของฉัน () ฟังก์ชัน. สิ่งที่ทำให้งงคือดูเหมือนว่าจะเป็นเหมือนสิ่งที่กำลังทำอยู่ในฟังก์ชัน Terminal () ข้างบนฟังก์ชัน FillStack () ของฉัน อย่างไรก็ตามฉันหวังว่าหนึ่งในโปรแกรมเมอร์ที่มีประสบการณ์สามารถให้ฉันแก้ไขข้อผิดพลาดนี้โดยเฉพาะ
ยากที่จะเชื่อว่ามีความคล้ายคลึงกันทั้งหมดที่ MQL4 มีกับ C ว่าความสามารถในการกำหนดค่าให้กับอาร์เรย์องค์ประกอบเช่น C จะไม่อยู่ใน MQL4 ด้วย ขอขอบคุณสำหรับความช่วยเหลือ.