#04 ลองใช้งาน 「なんちゃってEA」
13 ตุลาคม 2025: บันทึก
ในที่สุดก็ถ่ายโอนข้อมูลประวัติภายนอกมายัง MT4 ได้แล้ว ผมจะทดสอบว่า EA จะทำงานได้หรือไม่
เพียงให้มันเคลื่อนไหวก็พอ ดังนั้นจะคิดตรรกะแบบสุ่มสุดๆ
EA ล้อเล่น・ตรรกะ (ฮา)
0.
เงินทุนคือ 100,000 เยน คำสั่งซื้อคือ 0.01 ล็อต ระยะเวลาคือ 2024.10.05 ~ 2025.10.04
1.
ขายตั้งคำสั่งเปิดที่ราคาเปิดของแท่งเที่ยงย้อนหลังที่ใกล้ที่สุดทางเวลา (จากนี้เรียกว่า "target")
จำราคาต่ำสุดและสูงสุดของ target ไว้
2.
จนกว่าจะปิดตำแหน่งเดี่ยวหนึ่ง ตจะไม่เปิดตำแหน่งใหม่
3.
เมื่อถือครองตำแหน่งอยู่ ให้ปิดเมื่อราคาต่ำสุดของ target ถูกแตะ หรือเมื่อราคาสูงสุดของ target ถูกแตะ
4.
หากไม่พบข้อ 3, เมื่อแท่งเทียนปัจจุบันสร้างเสร็จ ให้ปิดที่ราคาเริ่มต้นของแท่งถัดไป
“4.” จริงๆ แล้วควรเป็น
"หากไม่พบข้อ 3 ให้ปิดที่ 23:59:50"
แต่ตอนนี้มีข้อมูลรายวันเท่านั้น จึงยอมแพ้
EA จะทำงานหรือไม่เท่านั้นที่ต้องทดสอบ...
※ ทำไมถึงอยากให้ปิดที่ 23:59:50?
เพราะถ้าเปิดช่องว่างในวันจันทร์จะขาดทุนมหาศาล
เอาล่ะ คราวนี้ก็พอแล้ว (หัวเราะ)
อย่างน้อยก็ใส่โค้ดลงไว้ก่อน
#property strict
#property copyright "Ore"
#property version "1.00"
#property description "Test_EA"
//--- ตัวแปรภายนอก ---
extern double Lots = 0.01; // ขนาดโพซิชัน
//--- ตัวแปรทั่วโลก ---
double target_open;
double target_low;
double target_close;
//--- ตัวแปรตรวจสอบการยืนยันแท่งบาร์ใหม่
datetime last_bar_time;
//+------------------------------------------------------------------+
//| ฟังก์ชันเริ่ม Expert Advisor |
//+------------------------------------------------------------------+
int OnInit()
{
last_bar_time = iTime(Symbol(), PERIOD_CURRENT, 0);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| ฟังก์ชันสิ้นสุด Expert Advisor |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| เมื่อมี Tick ใหม่เข้ามา |
//+------------------------------------------------------------------+
void OnTick()
{
//--- เมื่อแท่งบาร์ใหม่เสร็จสมบูรณ์ ให้ดำเนินการปิดตำแหน่ง ---
if(last_bar_time != iTime(Symbol(), PERIOD_CURRENT, 0))
{
last_bar_time = iTime(Symbol(), PERIOD_CURRENT, 0);
//--- ปิดทุกตำแหน่ง
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS) == true)
{
if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue) == true)
{
Print("เนื่องจากแท่งบาร์ใหม่เสร็จสิ้น จึงปิดโพซิชันแล้ว");
}
}
}
}
//--- เมื่อไม่มีตำแหน่ง ป้อนตรรกะเข้าสู่ตลาด ---
if(OrdersTotal() == 0)
{
//--- ค้นหาหาแท่งบวกล่าสุด
for(int i = 1; i < 1000; i++) {
if(Open[i] < Close[i]) // พบแท่งขึ้่นแสดงเป็นบวก
target_open = Open[i];
target_low = Low[i];
target_close = Close[i];
//--- ส่งคำสั่งขาย limit ที่ราคาเริ่มต้น ---
if(Open[0] > target_open)
{
int ticket = OrderSend(Symbol(), OP_SELLLIMIT, Lots, target_open, 3, 0, 0, "MyEA", 0, 0, Red);
if(ticket > 0)
{
Print("ได้สั่งขาย limit แล้ว ราคา:", target_open);
}
} return; // เมื่อพบแท่งบวกครั้งแรก ให้ออกจากลูป
}
}
}
//--- หากมีตำแหน่งอยู่ จะมีตรรกะปิดกำไร/ขาดทุน ---
else
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS) == true)
{
if(Bid <= target_low || Bid >= target_close)
{
if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue) == true)
{
Print("ปิดโพซิชันแล้ว ราคา:", Bid);
}
}
}
}
}
==
→ ต่อไป จะแนะนำการสร้าง Expert Advisor ใหม่ใน MT4 ด้วย MetaEditor แล้ววางโค้ดด้านบน
→ คลิกปุ่ม "Compile" เพื่อให้แน่ใจว่าไม่มีข้อผิดพลาด
→ กลับ MT4 แล้วเลือก EA นี้ใน "Strategy Tester" เพื่อรัน Backtest
ทำงานแล้ว! ヽ(;▽;)ノ
× ![]()