ดาวน์โหลดแฟ้ม EA
|
My EMA200 SmoothedHighLowMA MACD and RSI Thai EA Unstable
|
ปรับปรุงครั้งล่าสุดเมื่อ
: ๑๙ มีนาคม พ.ศ.
๒๕๕๙ เวลา ๒๓.๐๐
น.
|
|
ไม่รับประกันความเสียหายอันเนื่องมาจากการทำงานของ EA ชุดนี้
|
|
ขออภัย ต้นฉบับ EA ชุดนี้สูญหายทั้งหมด หากมีเวลาจะรื้อฟิ้นกลับมาให้ใหม่
|
โดยปรกติการใช้กลยุทธ์การตัดกันของเส้นค่าเฉลี่ย
(Moving
Average Crossover) จะใช้การตัดกลับทางของเส้นค่าเฉลี่ย
ซึ่งในกรณีดังกล่าว
ถ้าเป็นการตรวจดูด้วยสายตา
เราจะทราบว่าควรจะปิดคำสั่งซื้อ/ขายช่วงไหน
แต่กรณีของการทำเป็น EA
ถ้ารอให้ถึงจุดกลับกันของเส้นค่าเฉลี่ยค่อยปิดคำสั่งซื้อ/ขาย
จะให้เกิดการขาดทุนจำนวนมาก
จากรูปข้างต้น จุดหมายเลข 1 เป็นจุดที่เราตัดสินใจเปิดคำสั่งขาย
(SELL)
จุดหมายเลข
2
เป็นจุดที่เปิดคำสั่งซื้อ/ขายได้
ซึ่งถ้าเรารอให้ถึงจุดที่
3
แล้วค่อยปิดคำสั่งซื้อขาย
จะเห็นว่าจะมีโอกาสขาดทุน
ช่วงที่แสดงในหมายเลขที่
4 ในรูป
จะเป็นช่วงที่จะขาดทุนต่อเนื่อง
ในกรณีของ
My EMA200
SmoothedHighLowMA MACD and RSI Thai EA
จะพยายามสร้างเงื่อนไขการปิดคำสั่งซื้อ/ขายเฉพาะ
เพื่อลดปริมาณการขาดทุนลงโดยแบ่งเป็น
2 กรณี
คือ กรณีของการปิดคำสั่งซื้อ
(BUY)
และกรณีของการปิดคำสั่งขาย
(SELL)
การปิดคำสั่งซื้อ
(BUY)
การปิดคำสั่งซื้อ
(BUY) ของ
My EMA200
SmoothedHighLowMA MACD and RSI Thai
EAจะใช้เงื่อนไขในการปิดคำสั่งดังนี้
- เมื่อ High[1] น้อยกว่า เส้นค่าเฉลี่ย LowSmoothed14MA
- เมื่อ ค่าของเส้นค่าเฉลี่ย LowSmoothed14MAกอนปัจจุบัน มากกว่า ค่าของเส้นค่าเฉลี่ย LowSmoothed14MA
- เมื่อ High[0] น้อยกว่า เส้นค่าเฉลี่ย LowSmoothed14MA
โดยทุกเงื่อนไขต้องเกิดขึ้นพร้อมกัน
/*+------------------------------------------------------------------+ ฟังก์ชัน ปิดคำสั่งซื้อ_BUY() ทำหน้าที่ปิดคำสั่งซื้อ (BUY) +------------------------------------------------------------------+*/ void ปิดคำสั่งซื้อ_BUY(double LowSmoothed14MAก่อนปัจจุบัน, double LowSmoothed14MA) { //ปิดคำสั่ง BUY ด้วยเงื่อนไขคาดว่าจะกลับเทรน if (((High[1] < LowSmoothed14MA) && (LowSmoothed14MAก่อนปัจจุบัน > LowSmoothed14MA)) && (High[0] < LowSmoothed14MA)) { if(!OrderClose(OrderTicket(), OrderLots(), Bid, 0, White)) Print("OrderClose error ",GetLastError()); } } |
การปิดคำสั่งขาย
(SELL)
การปิดคำสั่งขาย
(SELL) ของ
My EMA200
SmoothedHighLowMA MACD and RSI Thai
Eaจะใช้เงื่อนไขในการปิดคำสั่งดังนี้
- เมื่อ Low[1] มากกว่า เส้นค่าเฉลี่ย HighSmoothed14MA
- เมื่อ ค่าของเส้นค่าเฉลี่ย HighSmoothed14MAก่อนปัจจุบัน น้อยกว่า เส้นค่าเฉลี่ย HighSmoothed14MA
- เมื่อ Low[0] มากกว่า เส้นค่าเฉลี่ย HighSmoothed14MA
โดยทุกเงื่อนไขต้องเกิดขึ้นพร้อมกัน
/*+------------------------------------------------------------------+ ฟังก์ชัน ปิดคำสั่งขายSELL() ทำหน้าที่ปิดคำสั่งซื้อ (SELL) +------------------------------------------------------------------+*/ void ปิดคำสั่งขาย_SELL(double HighSmoothed14MAก่อนปัจจุบัน, double HighSmoothed14MA) { //ปิดคำสั่ง SELL เมื่อคาดว่าจะกลับเทรน if (((Low[1] > HighSmoothed14MA) && (HighSmoothed14MAก่อนปัจจุบัน < HighSmoothed14MA)) && (Low[0] > HighSmoothed14MA)) { if(!OrderClose(OrderTicket(), OrderLots(), Ask, 0, White)) Print("OrderClose error ",GetLastError()); } } |
โดยปรกติฟังก์ชัน
ตรวจสอบปิดคำสั่งซื้อขาย()
จะเป็นฟังก์ชันหลักในการตรวจการปิดคำสั่งซื้อ/ขายของ
My EMA200
SmoothedHighLowMA MACD and RSI Thai EA
โดยงานในฟังก์ชันดังกล่าวจะมีการตรวจการปิดคำสั่งซื้อ/ขายเฉพาะคำสั่งที่มีกำไรในททุก
ๆ วันศุกร์ ก่อนปิดตลาด
ซึ่งการทำงานดังกล่าวจะทำเฉพาะกรณีที่ผู้ใช้กำหนดค่าของ
FridayCloseAllPositiveOrder
เป็น
true
ตอนเริ่มใช้
EA โดย
EA
จะตรวจสอบเงื่อนไขนี้ก่อน
จากนั้นทำการตรวจสอบทำ
Trailing
Stop (ทำ_TrailingStop_สำหรับคำสั่งขาย_SELL()
หรือ
ทำ_TrailingStop_สำหรับคำสั่งซื้อ_BUY())
ก่อนที่จะตรวจสอบและเลือกฟังก์ชัน
ปิดคำสั่งซื้อ_SELL()
หรือ
ฟังก์ชัน ปิดคำสั่งขาย_BUY()
ตามลำดับ
ในตอนท้ายของฟังก์ชัน
ตรวจสอบปิดคำสั่งซื้อขาย()
จะมีการเรียกฟังก์ชัน
ปิดคำสั่งซื้อขายที่เป็นบวกหลายรายการ()
โดยฟังก์ชันดังกล่าวจะทำการตรวจสอบปิดคำสั่งซื้อ/ขายที่ผลกำไรเป็นบวก
โดยฟังก์ชันนี้จะทำงานเมื่อผู้ใช้งานกำหนดค่าของ
AllProfitPositiveCloseAll
เป็น
true
เท่านั้น
รายละเอียดของทั้งสองฟังก์ชันมีดังนี้
/*+------------------------------------------------------------------+
ฟังก์ชัน
ปิดคำสั่งซื้อขายที่เป็นบวกหลายรายการ()
ทำหน้าที่ปิดคำสั่งซื้อขายที่เป็นบวกพร้อมกันหลายรายการ
+------------------------------------------------------------------+*/
void
ปิดคำสั่งซื้อขายที่เป็นบวกหลายรายการ(int
จำนวนคำสั่งซื้อขายที่มีกำไร)
{
double
ผลกำไรขาดทุนของคำสั่งซื้อขาย;
if
(AllProfitPositiveCloseAll)
{
//ถ้าจำนวนคำสั่งซื้อขายที่ได้กำไรเกิน
2
ใน
3
ปิดคำสั่งซื้อที่ได้กำไรทั้งหมด
if
(จำนวนคำสั่งซื้อขายที่เปิดค้างอยู่()
== จำนวนคำสั่งซื้อขายที่มีกำไร)
{
for(int
i=0;i<OrdersTotal();i++)
{
//กรณี่มีคำสั่งซื้อขาย
if
(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
//เลือกลบเฉพาะที่เปิดด้วย
EA
ชุดนี้เท่านั้น
if
((OrderMagicNumber() == เลขประจำEA)
&&
(OrderComment()
== ชื่อEA)
&&
(OrderSymbol()
== Symbol()))
{
//หาค่ากำไร/ขาดทุนของ
Order
ผลกำไรขาดทุนของคำสั่งซื้อขาย
=
OrderProfit() + OrderSwap() + OrderCommission();
if
(ผลกำไรขาดทุนของคำสั่งซื้อขาย
>
0.5)
{
//ตรวจสอบกรณีคำสั่งซื้อ
(BUY)
if
(OrderType()==OP_BUY)
{
//ปิดคำสั่ง
BUY
if(!OrderClose(OrderTicket(),
OrderLots(), Bid, 0, White))
Print("OrderClose
error ",GetLastError());
}
//ตรวจสอบกรณีคำสั่งขาย
(SELL)
if
(OrderType()==OP_SELL)
{
//ปิดคำสั่ง
SELL
if(!OrderClose(OrderTicket(),
OrderLots(), Ask, 0, White))
Print("OrderClose
error ",GetLastError());
}
}
}
}
}
}
}
}
/*+------------------------------------------------------------------+
ฟังก์ชัน
ตรวจสอบเปิดคำสั่งซื้อขาย();
ทำหน้าที่ตรวจสอบเงื่อนไข
เพื่อเปิดคำสั่งซื้อขาย
+------------------------------------------------------------------+*/
void
ตรวจสอบปิดคำสั่งซื้อขาย(double
LowSmoothed14MAก่อนปัจจุบัน,
double
LowSmoothed14MA,
double
HighSmoothed14MAก่อนปัจจุบัน,
double
HighSmoothed14MA)
{
double
ผลกำไรขาดทุนของคำสั่งซื้อขาย;
//สำหรับเก็บค่ากำไรขาดทุนของ
Order
int
คำสั่งซื้อขายที่ได้กำไร
=
0; //สำหรับนับจำนวนคำสั่งซื้อขายที่ได้กำไร
for(int
i=0;i<OrdersTotal();i++)
{
//กรณีไม่มีคำสั่งซื้อขาย
if
(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
//เลือกลบเฉพาะที่เปิดด้วย
EA
ชุดนี้เท่านั้น
if
((OrderMagicNumber() == เลขประจำEA)
&&
(OrderComment()
== ชื่อEA)
&&
(OrderSymbol()
== Symbol()))
{
//หาค่ากำไร/ขาดทุนของ
Order
ผลกำไรขาดทุนของคำสั่งซื้อขาย
=
OrderProfit() + OrderSwap() + OrderCommission();
if
(ผลกำไรขาดทุนของคำสั่งซื้อขาย
>
0)
{
คำสั่งซื้อขายที่ได้กำไร
+=
1;
}
//ตรวจสอบกรณีคำสั่งซื้อ
(BUY)
if
(OrderType()==OP_BUY)
{
//ปิดคำสั่ง
BUY
ที่มีกำไรในวันศุกร์
if
(((FridayCloseAllPositiveOrder && (DayOfWeek()==FRIDAY))
&&
(TimeHour(TimeCurrent())
>= TimeHour(StringToTime("21:00:00")))) &&
(ผลกำไรขาดทุนของคำสั่งซื้อขาย
>
0))
{
ข้อความแสดงบนจอ
+=
"\n\n***ทุกวันศุกร์ปิดคำสั่งซื้อที่ผลกำไรเป็น
บวก ตั้งแต่เวลา ๒๑.๐๐
น.
เป็นต้นไป
***";
Comment(ข้อความแสดงบนจอ);
//ปิดคำสั่ง
BUY
if(!OrderClose(OrderTicket(),
OrderLots(), Bid, 0, White))
Print("OrderClose
error ",GetLastError());
}
//กรณีปรกติ
//ทำ
TrailingStop
ถ้าทำได้
ทำ_TrailingStop_สำหรับคำสั่งซื้อ_BUY();
//ตรวจสอบปิดคำสั่งซื้อขายตามเงื่อนไขที่ต้องการ
ปิดคำสั่งซื้อ_BUY(LowSmoothed14MAก่อนปัจจุบัน,
LowSmoothed14MA);
}
//ตรวจสอบกรณีคำสั่งขาย
(SELL)
if
(OrderType()==OP_SELL)
{
//ปิดคำสั่ง
BUY
ที่มีกำไรในวันศุกร์
if
(((FridayCloseAllPositiveOrder && (DayOfWeek()==FRIDAY))
&&
(TimeHour(TimeCurrent())
>= TimeHour(StringToTime("21:00:00")))) &&
(ผลกำไรขาดทุนของคำสั่งซื้อขาย
>
0))
{
ข้อความแสดงบนจอ
+=
"\n\n***ทุกวันศุกร์ปิดคำสั่งซื้อที่ผลกำไรเป็น
บวก ตั้งแต่เวลา ๒๑.๐๐
น.
เป็นต้นไป
***";
Comment(ข้อความแสดงบนจอ);
//ปิดคำสั่ง
SELL
if(!OrderClose(OrderTicket(),
OrderLots(), Ask, 0, White))
Print("OrderClose
error ",GetLastError());
}
//ทำ
Trailing
Stop ถ้าทำได้
ทำ_TrailingStop_สำหรับคำสั่งขาย_SELL();
//ตรวจสอบปิดคำสั่งซื้อขายตามเงื่อนไขที่ต้องการ
ปิดคำสั่งขาย_SELL(HighSmoothed14MAก่อนปัจจุบัน,
HighSmoothed14MA);
}
}
}
}
//ปิดคำสั่งที่มีกำไรหากจำนวนเงิน
2
ใน
3
ของคำสั่งซื้อขายทั้งหมด
ปิดคำสั่งซื้อขายที่เป็นบวกหลายรายการ(คำสั่งซื้อขายที่ได้กำไร);
}
|
ฟังก์ชัน
ทำ_TrailingStop_สำหรับคำสั่งซื้อ_BUY()
/*+------------------------------------------------------------------+ ฟังก์ชัน ทำ_TrailingStop_สำหรับคำสั่งซื้อ_BUY() ทำหน้าที่ทำ Trailling stop สำหรับคำสั่ง BUY +------------------------------------------------------------------+*/ void ทำ_TrailingStop_สำหรับคำสั่งซื้อ_BUY(){ //ตรวจสอบทำ TrailingStop สำหรับการซื้อ BUY if (TrailingStop>0) { if (OrderStopLoss() < OrderOpenPrice()) { //กรณีไม่เคยทำ Trailing Stop มาก่อน //รอจนกว่าราคาจะวิ่งถึงจุดที่กำหนด 150 จุด จากราคาเปิด if(Bid - OrderOpenPrice() >= TrailingStopStart*Point) { if(Bid - OrderStopLoss()> TrailingStop*Point) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TrailingStop*Point, OrderTakeProfit(), 0, Blue)) { Print("OrderModify error ",GetLastError()); } return; } } } } } |
ฟังกชัน
ทำ_TrailingStop_สำหรับคำสั่งขาย_SELL()
/*+------------------------------------------------------------------+ ฟังก์ชัน ทำ_TrailingStop_สำหรับคำสั่งขาย_SELL() ทำหน้าที่ทำ Trailling stop สำหรับคำสั่ง SELL +------------------------------------------------------------------+*/ void ทำ_TrailingStop_สำหรับคำสั่งขาย_SELL() { if (TrailingStop > 0) { if (OrderStopLoss() > OrderOpenPrice()) { //กรณียังไม่เคยทำ Stop Loss มาก่อน //รอจนกว่าราคาจะวิ่งถึงจุดที่กำหนด 150 จุด จากราคาเปิดด if(OrderOpenPrice() - Ask > TrailingStopStart * Point) { if(OrderStopLoss()-Ask > TrailingStop*Point) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TrailingStop*Point, OrderTakeProfit(), 0, Red)) { Print("OrderModify error ",GetLastError()); } return; } } } } } |
บันทึกประจำวันที่
1
สิงหาคม
พ.ศ.
2557 (2014)
เวลา
|
เหตุการณ์
|
||
06:00 น. | ตื่นนอน | ||
06:30 น. |
งานของกิจกรรมอาชีพ
กสิกรรมธรรมชาติ บ้านแม่ทำ
สีทา (3/2557)
: ผสมดินเพาะต้นไม้
และกรอกใส่ถุง
|
||
08:00 น. |
|
||
08:30 น. | งานของกิจกรรมอาชีพ กสิกรรมธรรมชาติ บ้านแม่ทำ สีทา (3/2557) : ผสมดินเพาะต้นไม้ และกรอกใส่ถุง | ||
11:15 น. | อาบน้ำ | ||
12:30 น. |
|
||
13:00 น. |
งานของกิจกรรมอาชีพ
งานอินเตอร์เน็ต (18/2557)
: ทำแฟ้มโครงสร้างต้นฉบับบทความเรื่องใหม่
|
||
14:00 น. |
งานของกิจกรรมอาชีพ
งานการตลาดและการลงทุน
(20/2557)
: เดินทางไปพบผู้ใหญ่นุช
หมู่บ้านบุ่งยาง วังคัน
เพื่อเอาเอกสารตัวอย่างถั่วดาวอินคาฝากไว้ให้ศึกษา
และถ่ายรูปงานหัตถกรรมที่ผู้ใหญ่วางขาย
ขากลับแวะซื้อของตลาดนัดวังคัน
|
||
17:30 น. | พักผ่อน | ||
18:00 น. |
|
||
18:45 น. | พักผ่อน อาบน้ำ | ||
19:15 น. |
งานของกิจกรรมอาชีพ
งานการตลาดและการลงทุน
(20/2557)
: เชื่อมต่ออินเตอร์เน็ต
ปรับแต่งร้านค้าใน Lnw
|
||
22:00 น. | เข้านอน |