สวัสดีครับเพื่อนๆนักเทรดทุกคน! วันนี้เราจะมาพูดถึงการใช้ Expert Advisor (EA) แบบง่ายๆ ที่ใช้ DeMarker Indicator เป็นหลัก ซึ่งถือเป็น EA ที่ง่ายที่สุดที่ผมเคยทำมา อยากให้เพื่อนๆ ลองอ่านแล้วให้คะแนนกันหน่อยนะครับ...
EA ตัวนี้จะทำงานกับคู่สกุลเงินเดียว โดยที่การตั้งค่าที่จำเป็นทั้งหมด เช่น Timeframe, Lots, Stop Loss และ Take Profit สามารถตั้งค่าได้ในเมนู properties

extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT; // เลือก Time Frame
extern int period = 8; // ช่วงเวลา DeMarker
extern double lt = 0.01; // Lots
extern int sl = 100; // Stop Loss
extern int tp = 100; // Take Profit
extern double OB = 0.7; // Over Sold
extern double OS = 0.3; // Over Bought
extern bool OPENBAR = false; // เทรดในราคาเปิดแท่ง
เราจะมาแบ่งข้อมูลออกเป็น 3 ส่วนหลักๆ นะครับ:
1. ข้อมูล | Timeframe
2. ออเดอร์
3. คู่สกุลเงิน
//+------------------------------------------------------------------+
//-- time frame|indicator
double dmrk[5];
int signal = -1; //-- 0.buy 1.sell
int hold = 0;
//-- order
int ticket = 0;
double lot = 0.0;
int typ = -1;
//-- pair
datetime t1 = 0;
bool newbar = false;
bool entry = false;
//+------------------------------------------------------------------+
ในฟังก์ชัน OnInit() เราจะทำการตั้งค่าอาเรย์ตัวแปรสำหรับ DeMarker Indicator และตรวจสอบขนาดล็อตขั้นต่ำสำหรับโบรกเกอร์ต่างๆ ที่เราต้องการเทรด
//+------------------------------------------------------------------+
//|
void OnInit() {
ArrayInitialize(dmrk, 0.0);
//---
const double test_lot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN);
if (lt < test_lot) lt = test_lot;
}
ฟังก์ชัน OnTick() จะใช้ในการคำนวณค่า Indicator และกำหนดสัญญาณซื้อขาย
//---------------------------------------------------------------------------
signal = -1;
//---------------------------------------------------------------------------
//---calc
for (int i = 0; i < ArraySize(dmrk); i++) {
dmrk[i] = iDeMarker(Symbol(), TF, period, i);
}
//---
if (dmrk[1] > OB) {
hold = 1; //set
}
else if (dmrk[1] < OS) {
hold = -1; //set
}
else {
hold = 0; //reset
}
if (hold == 1) {
if (dmrk[0] < OB && dmrk[1] > OB) {
signal = OP_SELL;
}
}
if (hold == -1) {
if (dmrk[0] > OS && dmrk[1] < OS) {
signal = OP_BUY;
}
}
เพื่อเปิดสัญญาณซื้อและขาย...
//---------------------------------------------------------------------------
if (signal != -1)
if (newbar == true)
if (entry == false) { //door open
entry = true; //set
if (signal == OP_BUY) {
ticket = OrderSend(Symbol(), OP_BUY, lt, Ask, (int)((Ask - Bid) / Point),
sl > 0 ? Bid - sl * Point : 0.0,
tp > 0 ? Bid + tp * Point : 0.0,
EAName + ":signal= " + IntegerToString(signal) + ":hold= " + IntegerToString(hold),
EANumber,
0,
clrBlue);
signal = -1;
}
else if (signal == OP_SELL) {
ticket = OrderSend(Symbol(), OP_SELL, lt, Bid, (int)((Ask - Bid) / Point),
sl > 0 ? Ask + sl * Point : 0.0,
tp > 0 ? Ask - tp * Point : 0.0,
EAName + ":signal= " + IntegerToString(signal) + ":hold= " + IntegerToString(hold),
EANumber,
0,
clrRed);
signal = -1;
}
สำหรับการปิดออเดอร์...
if (entry == true) { // closing
if (OrderSelect(ticket, SELECT_BY_TICKET)) {
if (OrderCloseTime() == 0) { //-- order active trade
}
else if (OrderCloseTime() != 0) { //
entry = false; //reset entry
}
}
} 

หวังว่าบทความนี้จะเป็นประโยชน์กับเพื่อนๆ นักเทรดทุกคนในการพัฒนา EA ของตัวเองนะครับ ลองนำไปปรับใช้กันดูนะ!
연관 포스트
- สร้างปุ่มบนกราฟด้วย ChartButton Class สำหรับ MetaTrader 4
- DPI Alert EA: เครื่องมือสำคัญสำหรับการเทรดใน MetaTrader 4
- HistoScalperEA - เครื่องมือสุดเจ๋งสำหรับ MetaTrader 4
- เครื่องมือ ECN Trade Modifier สำหรับ MetaTrader 4 ที่ทุกเทรดเดอร์ต้องมี
- อ่านข่าวจาก Forex Factory ด้วยคำขอเว็บ - เครื่องมือสำหรับ MetaTrader 4