หลังจากที่ติดตั้งโปรแกรม
MT4 (MetaTrader 4) ใหม่ๆ
ไม่ว่าท่านจะดาวน์โหลดตัวติดตั้งโปรแกรม
MT4 มาจากโปรกเกอร์ค่ายใด
เมื่อทำการเรียกโปรแกรมขึ้นมาทำงานบนเดสก์ท็อปของคอมพิวเตอร์
ถ้าเราเข้าไปดูที่หัวข้อ
Expert Adviser ในกรอบ
Navigator ของโปรแกรม
MT4 ดังกล่าว
จะพบว่ามีชื่อของโปรแกรม
Expert Adviser หรือ
EA แถมมาให้
2 โปรแกรมคือ
Moving Average และ
Macd Sample ซึ่งโปรแกรม
EA
ทั้งสองชุดจะเป็นตัวอย่างสำหรับใช้ศึกษาเรื่องของวิธีการเขียนโปรแกรม
Expert Adiviser
หรือโปรแกรมสำหรับเปิดคำสั่งซื้อ/ขายในตลาด
Forex ส่วน EA
ทั้งสองชุดนี้จะใช้งานจริงได้หรือไม่นั้น
ต้องติดตามได้จากเรื่องราวที่เรากำลังแกะรอยในครั้งนี้
Moving
Average
ขอเริ่มต้นที่
EA ชื่อ Maving
Average หรือ Moving
Average Sample Expert Adviser ในชื่อเต็ม
เป็น EA ตัวอย่าง
เนื่องจากมีต้นฉบับโปรแกรม
หรือ Source Code ของตัว
EA แถมมาด้วย
(แฟ้ม Moving
Average.mq4) EA ดังกล่าวเป็นลิขสิทธิ์ของ
MetaQuortes Software Corp.
หรือบริษัทที่พัฒนาโปรแกรม
MT4 ขึ้นมานั่นเอง
-ลักษณะทั่วไป
Moving Average ดังกล่าวเป็น EA ที่ทำการเปิดคำสั่งซื้อ/ขาย (Order) โดยใช้อินดิเคเตอร์ (Indicator) ชื่อ Moving Average (MA) โดยใช้การคำนวณแบบ Simple (Mode-SMA) โดยผู้นำไปใช้สามารถกำหนดค่า MA ได้เอง แต่ค่าปริยาย (default) จะเป็น 12 (ค่าของ Moving Periad) ใช้ได้กับทุกๆ คู่เงิน และจะทำงานบนกรอบเวลา (Time frame) ปัจจุบัน หมายถึง เราทำการวาง EA ชุดนี้บน timeframe ไหน ตัว EA จะทำงานบน timefame นั้น
เป็น
EA ที่มีการกำหนดขนาดล็อตอัตโนมัติ
โดยกำหนดจำนวนล็อตเริ่มต้นสำหรับการหาค่าล็อตเท่ากับ
0.1
วิธีการหาจะใช้วิธีการเปรียบเทียบจากคำสั่งซื้อ/ขายที่เปิดค้างอยู่ตามจำนวนรายการที่ระบุในค่าของ
DecreaseFactor
โดยค้าปริยายจะกำหนดไว้เท่ากับ
3 ซึ่งหมายถึง
EA
ชุดนี้จะนับจำนวนรายการของคำสั่งซื้อ/ขายที่ยังติดลบอยู่แล้วใช้ค่า DereaseFactor เป็นตัวหาร เพื่อหาขนาดของล็อตที่เหมาะสมสำหรับคำสั่งซื้อ/ขายคำสั่งถัดไป
ค่า DecreaseFactor สามารถกำหนดค่าเป็น 0 ได้ แต่อย่างไรก็ดี ถ้าผลการคำนวณปรากฏว่าค่าล็อตต่ำกว่า 0.1 โปรแกรม Maving Average กำหนดค่าล็อตให้เท่ากับ 0.1 ดังนั้น ถ้าจะใช้ EA ชุดนี้โดยไม่มีการปรับปรุงแก้ไขใดๆ เราจะต้องมีเงินเริ่มต้นไม่น้อยกว่า 1,000 $ หรือ 1000 cent แล้วแต่ประเภทของบัญชีที่เราเปิดใช้
ค่า DecreaseFactor สามารถกำหนดค่าเป็น 0 ได้ แต่อย่างไรก็ดี ถ้าผลการคำนวณปรากฏว่าค่าล็อตต่ำกว่า 0.1 โปรแกรม Maving Average กำหนดค่าล็อตให้เท่ากับ 0.1 ดังนั้น ถ้าจะใช้ EA ชุดนี้โดยไม่มีการปรับปรุงแก้ไขใดๆ เราจะต้องมีเงินเริ่มต้นไม่น้อยกว่า 1,000 $ หรือ 1000 cent แล้วแต่ประเภทของบัญชีที่เราเปิดใช้
ตัว
EA
จะเริ่มทำงานเมื่อมีการเปลี่ยนแปลงขึ้น/ลงของราคา (OnTick) หลังจากที่เราสั่ง
EA ให้ทำงาน
โดยจะเริ่มเปิดคำสั่งซื้อ/ขายเมื่อแท่งราคาผ่านไปแล้ว
100 แท่ง
การตรวจสอบเงื่อนไขสำหรับการเปิดคำสั่งซื้อ/ขาย
จะใช้แท่งราคาแท่งที่ผ่านมาในการตรวจสอบ
เป็น EA
ที่มีไมมีการกำหนดค่า
Stop loss และค่า
Take Profit (sl / tp)
และจะเปิดคำสั่งซื้อหรือขายอย่างละ
1 คำสั่งเท่านั้น
-เงื่อนไขในการเปิดและปิดคำสั่งซื้อ
(Long
/ Buy)
เงื่อนไขในการเปิดคำสั่งซื้อ
หรือ Buy ของ
EA ชุดนี้จะเปิดคำสั่งซื้อ
หรือ Buy
เมื่อตรวจพบว่าราคาเปิด
(Open)
ของแท่งราคาแท่งที่ผ่านมามีค่าน้อยกว่าค่าของ
MA และ ราคาปิด
(close)
ของแท่งราคาแท่งที่ผ่านมามีค่ามากกว่าค่าของ
MA
ส่วนเงื่อนไขในการปิดคำสั่งซื้อ
หรือ Buy เมื่อ
EA ตรวจพบว่า
ราคาเปิดของแท่งราคาแท่งที่ผ่านมามีค่า
มากกว่าค่า MA
และราคาปิดน้อยกว่าค่า
MA
-เงื่อนไขในการเปิดและปิดคำสั่งขาย
(Short
/ Sell)
เงื่อนไขในการเปิดคำสั่งขาย
หรือ Sell ของ
EA ชุดนี้จะทำการเปิดคำสั่งขาย
หรือ Sell
เมื่อตรวจพบว่าราคาเปิด
(Open)
ของแท่งราคาแท่งที่ผ่านมามีค่ามากกว่าค่าของ
MA และ ราคาปิด
(close)
ของแท่งราคาแท่งที่ผ่านมามีค่าน้อยกว่าค่าของ
MA
ส่วนเงื่อนไขในการปิดคำสั่งขาย
หรือ Sell เมื่อ
EA ตรวจพบว่า
ราคาเปิดของแท่งราคาแท่งที่ผ่านมามีค่า
น้อยกว่าค่า MA
และราคาปิดมากกว่าค่า
MA
สรุปก็คือ
EA
ชุดนี้จะทำการเปิด/ปิดคำสั่งซื้อขาย
เมื่อแท่งราคาแท่งที่ผ่านมาทับกับเส้น
MA
โดยดูจากเงื่อนไขการเปิด/ปิดคำสั่งตามที่กล่าวมาในข้างต้น (โดยไม่สนใจทิศทางของเทรน) ช่วงที่แท่งราคาอยู่เหนือหรือใต้เส้น
MA จะไม่เกิดการเปิดคำสั่งซื้อ/ขาย
การกำหนดค่าเริ่มต้นสำหรับการใช้
EA
- Lots หมายถึง จำนวนล็อตในการเปิดคำสั่งซื้อ/ขาย ค่าปริยายคือ 0.1
- MaximumRisk หมายถึง เปอร์เซ็นต์กำไรที่เราต้องการ ค่าปริยายคือ 0.02 หรือประมาณ 2 %
- DecreaseFactor หมายถึง จำนวนคำสั่งซื้อ/ขายที่เปิดค้างไว้สำหรับการคำนวณหาจำนวนล็อตในการเปิดคำสั่งซื้อ/ขายคำสั่งถัดไป
- MovingPeriod หมายถึง เส้น MA ที่เราต้องการให้ EA ใช้ตรวจสอบเพื่อเปิดคำสั่งซื้อ/ขาย ค่าปริยายคือ 12 หรือค่า MA ของราคา 12 วันที่ผ่านมา
- Moving Shift หมายถึง ค่าเบี่ยงเบนของ MA ที่ยอมรับได้ ค่าปริยายเท่ากับ 6
ถ้าจะนำไปใช้งานจริง
ผู้เขียนได้ทดลอง
EA ชุดนี้กับบัญชีทดลองของ
FBS
โดยยังไม่แก้ไขหรือปรังปรุงต้นฉบับโปรแกรมของ
EA ชุดนี้ใหม่
พบปัญหาร้ายแรงหลายเรื่อง
เช่น EA ตั้งล็อตสูงเกินไป
ไม่เหมาะกับคนที่มีทุนน้อยๆ
และ EA
การปิดคำสั่งซื้อ/ขายโดยไม่สนใจว่าคำสั่งซื้อ/ขายคำสั่งนั้นๆ
ขาดทุนหรือกำไร
ทำให้บัญชีทดลองดังกล่าวขาดทุนไปกว่า
$400 ในเวลาไม่กี่นาที
ปรับปรุงให้เหมาะกับคนไทย
อย่างที่ได้บอกกล่าวไว้ว่า
EA
ชุดนี้มีปัญหาบางอย่างที่ทำให้ไม่เหมาะกับการนำไปใช้งานจริง
แต่ถ้าเราไม่มี EA
ตัวอื่นๆ เลย หรือมีแต่ไม่รู้คุณสมบัติของ
EA นั้นๆ เลย
ผู้เขียนว่า EA
ตัวนี้น่าสนใจ
เพียงแต่เราต้องทำการปรับแต่งต้นฉบับโปรแกรมของ
EA ตัวนี้เล็กน้อย
โดยเปิดโปรแกรมเมต้าเอดิเตอร์ขึ้นมา
แล้วเปิดแฟ้ม Moving
Average.mq4 ซึ่งอยู่ในโฟลเดอร์
Expert Advisor ขึ้นมา
สำหรับจุดที่จะทำการแก้ไข
จะมี 3 จุด
ดังนี้
-ทำให้จำนวนล็อตต่ำสุดเริ่มต้นที่
0.01
จุดแรกที่จะทำการแก้ไขคือ
ทำการเปลี่ยนจำนวนล็อตเริ่มต้นจาก
เดิม 0.1 เป็น
0.01
โดยเริ่มต้นด้วยการเปลี่ยนค่าของตัวแปร
Lots เป็น 0.01
(บรรทัดคำสั่งที่ 15
ของต้นฉบับโปรแกรม)
จุดที่ 2
คือที่ส่วนท้ายของฟังก์ชัน
LotsOptimized โดยเปลี่ยนเงื่อนไข
และคำสั่ง if
จากเดิม if
(lot < 0.1) lot = 0.1 เปลี่ยนเป็น if
(lot < 0.01) lot = 0.01; (บรรทัดคำสั่งที่
70)
-ทำให้
EA
เลือกปิดคำสั่งซื้อ/ขายเฉพาะที่ได้กำไรเท่านั้น
วิธีการก็คือ
เราจะหาค่าผลตอบแทนของคำสั่งซื้อ/ขายที่กำลังจะถูกปิดคำสั่งในขณะนั้น
โดยนำค่า OrderProfit(),
OrderSwap() และ OrderCommission()
ของคำสั่งซื้อ/ขาย
มาตรวจสอบว่าเป็น บวก (มีกำไร)
หรือ เป็น ลบ (ขาดทุน)
ถ้ายังเป็นขาดทุนอยู่จะยังไม่ปิดคำสั่งซื้อ/ขายนั้นๆ
โดยกิจกรรมนี้ เราจะใส่เพิ่มลงในฟังก์ชัน
CheckForClose() ของ
EA
โดยรายละเอียดของฟังก์ชันดังกล่าวที่ปรับปรุงแก้ไขใหม่มีดังนี้
//+------------------------------------------------------------------+
//|
Check for close order conditions |
//+------------------------------------------------------------------+
void
CheckForClose()
{
double
ma;
double
dOrderProfit; //สำหรับเก็บค่ากำไรขาดทุนของ
Order
//---
go trading only for first tiks of new bar
if(Volume[0]>1)
return;
//---
get Moving Average
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---
for(int
i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
break;
if(OrderMagicNumber()!=MAGICMA
|| OrderSymbol()!=Symbol()) continue;
//หาค่ากำไร/ขาดทุนของ
Order
dOrderProfit
= OrderProfit() + OrderSwap() + OrderCommission();
//ถ้าค่ากำไร/ขาดทุนของ
Order ยังติดลบยังไม่ปิด
Order
if
(dOrderProfit > 0)
{
//---
check order type
if(OrderType()==OP_BUY)
{
if(Open[1]>ma
&& Close[1]<ma)
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
Print("OrderClose
error ",GetLastError());
}
break;
}
if
(OrderType()==OP_SELL)
{
if
(Open[1]<ma && Close[1]>ma)
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
Print("OrderClose
error ",GetLastError());
}
break;
}
}
//end if
}
//end for
//---
}
-ทำให้
EA
เริ่มทำงานทันทีไม่ต้องรอแท่งราคาครบ
100
แท่ง
สำหรับการทำให้
EA
ทำงานทันทีไม่ต้องรอจนเกิดแท่งราคาครบ
100 แท่ง
จะทำที่ฟังก์ชัน OnTick()
ในแฟ้มต้นฉบับบทของ EA
โดยแก้ไขคำสั่ง if
จากเดิม if(Bars<100
|| IsTradeAllowed()==false) เป็น
if(IsTradeAllowed()==false)
return;
ผลการนำไปใช้งาน
หลังจากที่เราทำการแก้ไขต้นฉบับโปรแกรม
และสั่งคอมไพล์ EA
ชุดนี้แล้ว ก็ต้องลองนำมาใช้งานจริงดู
(ขออนุญาตไม่พูดถึงการ
back test)
โดยเริ่มต้นกับบัญชีทดลองของ
FBS
ปรากฏว่าสามารถดึงเงินถูกกลืนไปกลับคืนมาได้
และได้ทดลองใช้กับบัญชีจริงทั้งของ
RoboForex บัญชี Fix-cent ทุน 1000 cent และบัญชีจริงของโปรกเกอร์
XM บัญชีไมโครทุน
$5 และบัญชี cent ของ EXNESS ทุน 236 cent โดยใช้ Timeframe M1 ซึ่งได้ทำการทดลองก่อนหน้าที่จะทำบทความชุดนี้ประมาณ
1 อาทิตย์
(ต.ค.
2558)
ผลที่ได้ก็คือ
พอมีกำไรแต่ไม่มากนัก
และยังไม่เห็นปรากฏการล้างพอร์ท
อาจจะเป็นเพราะ EA
ชุดนี้ทำการเปิดคำสั่งซื้อ/ขายทีละคำสั่ง
และรอปิดคำสั่งเมื่อมีกำไร
และซื้อในขนาดล็อตต่ำสุด
ก็ถือว่าเป็น EA
ที่ทำกำไรอย่างช้าๆ
และเชื่อถือได้พอสมควร
การขาดทุนจากการวิ่งเข้าหา
Stop loss จะไม่มี
แต่อาจจะเกิดการล้างพอร์ทได้หากวงเงินหลักประกันเหลือน้อยเกินกว่า
20 เปอร์เซนต์
อาจจะต้องคอยตรวจสอบช่วงที่ผลกำไรยังไม่เป็นบวก
อาจจะต้องฝากเงินเพิ่มเข้าไปในบัญชีเพื่อรักษาระดับหลักประกันของบัญชีไว้
แก้ไขเพิ่มเติม
เนื่องจากเดิม EA ชุดนี้จะเปิดคำสั่งซื้อ/ขายได้เพียง 1 คำสั่งต่อครั้ง ผู้เขียนจึงปรับปรุงแก้ไขเพิ่มเติมให้สามารถเปิดได้มากกว่า 1 คำสั่ง โดยใช้ค่าของ DecreaseFactor เป็นตัวกำหนดจำนวนคำสั่งสูงสุดในการเปิดคำสั่งซื้อ/ขาย หมายถึง ถ้าเรากำหนดค่า DecreaseFactor เท่ากับ 1 โปรแกรม EA ชุดนี้จะเปิดคำสั่งซื้อ/ขาย 2 คำสั่ง คือคำสั่งซื้อ (Buy/Long) 1 คำสั่ง และคำสั่งขาย (Sell/Short) 1 แต่ถ้าราคาเดินถูกทาง EA ชุดนี้จะเปิดคำสั่งซื้อหรือขายเพียงคำสั่งเดียว
ถ้าเรากำหนดค่า DecreaeseFactor เท่ากับ 5 EA จะเปิดคำสั่งซื้อ/ขายรวม 10 คำสั่ง สำหรับค่าปริยายจะกำหนดไว้เท่ากับ 3 คือจะเปิดคำสั่งซื้อ/ขายรวม 6 คำสั่งต่อรอบการเปิดคำสั่งซื้อ/ขาย ถ้าค่าของ DecreaseFactor ถูกกำหนดให้เป็น 0 โปรแกรม EA ชุดนี้จะเปิดคำสั่งซื้อ/ขายเพียง 1 คำสั่งเท่านั้น
ขอให้โชคดีในการเทรดฟอเร็กซ์กันทุกๆ ท่านนะครับ
แก้ไขเพิ่มเติม
เนื่องจากเดิม EA ชุดนี้จะเปิดคำสั่งซื้อ/ขายได้เพียง 1 คำสั่งต่อครั้ง ผู้เขียนจึงปรับปรุงแก้ไขเพิ่มเติมให้สามารถเปิดได้มากกว่า 1 คำสั่ง โดยใช้ค่าของ DecreaseFactor เป็นตัวกำหนดจำนวนคำสั่งสูงสุดในการเปิดคำสั่งซื้อ/ขาย หมายถึง ถ้าเรากำหนดค่า DecreaseFactor เท่ากับ 1 โปรแกรม EA ชุดนี้จะเปิดคำสั่งซื้อ/ขาย 2 คำสั่ง คือคำสั่งซื้อ (Buy/Long) 1 คำสั่ง และคำสั่งขาย (Sell/Short) 1 แต่ถ้าราคาเดินถูกทาง EA ชุดนี้จะเปิดคำสั่งซื้อหรือขายเพียงคำสั่งเดียว
ถ้าเรากำหนดค่า DecreaeseFactor เท่ากับ 5 EA จะเปิดคำสั่งซื้อ/ขายรวม 10 คำสั่ง สำหรับค่าปริยายจะกำหนดไว้เท่ากับ 3 คือจะเปิดคำสั่งซื้อ/ขายรวม 6 คำสั่งต่อรอบการเปิดคำสั่งซื้อ/ขาย ถ้าค่าของ DecreaseFactor ถูกกำหนดให้เป็น 0 โปรแกรม EA ชุดนี้จะเปิดคำสั่งซื้อ/ขายเพียง 1 คำสั่งเท่านั้น
ขอให้โชคดีในการเทรดฟอเร็กซ์กันทุกๆ ท่านนะครับ
บันทึกประจำวันที่
15
กรกฎาคม
พ.ศ.
2557 (2014)
เวลา
|
เหตุการณ์
|
||
06:00 น. | ตื่นนอน | ||
06:30 น. | กวาดพื้นใต้ถุนบ้าน | ||
07:00 น. |
นำน้ำหมักจุลินทรีย์ราดบ่อปลา,
ทำอีเอ็มขยายลูกถังที่
2
และเริ่มใช้อีเอ็มขยายลูกถังที่
3
|
||
08:00 น. |
|
||
08:30 น. |
งานของกิจกรรมอาชีพ
กสิกรรมธรรมชาติ แปลงสวนปาล์ม
(8/2557):ฉีดพ่นอาหารเสริมพืช
YIC nano ในแปลงสวนปาล์ม
|
||
10:00 น. |
งานของกิจกรรมอาชีพ
งานการตลาดและการลงทุน
(20/2557):ไปพิมพ์ใบโปรชัวร์ที่วัดเขาแก้ว
|
||
13:30 น. |
|
||
12:30 น. | สูบน้ำใช้ด้วยปั้มชักพลังงานโซลาร์เซลล์ | ||
13:30 น. |
งานของกิจกรรมอาชีพ
งานการตลาดและการลงทุน
(20/2557):กรองน้ำหมักใบยาสูบไปฝากลูกค้า
YIC nano ที่ปลูกแตงกวา
สำหรับไร่เพลี้ย
|
||
16:00 น. |
งานของกิจกรรมอาชีพ
งานการตลาดและการลงทุน
(20/2557):นำน้ำหมักใบยาสูบไปฝากลูกค้าย่านไร่ยา,
และมาเสนอสินค้า YIC
nano ย่านซอยท่าเดื่อ
|
||
19:00 น. |
|
||
21:00 น. | เข้านอน |