ใช้ DeMarker Indicator ใน Expert Advisor ที่ง่ายที่สุดสำหรับ MetaTrader 4

Mike 2020.12.17 01:28 16 0 0
ไฟล์แนบ

สวัสดีครับเพื่อนๆนักเทรดทุกคน! วันนี้เราจะมาพูดถึงการใช้ 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 ของตัวเองนะครับ ลองนำไปปรับใช้กันดูนะ!

รายการ
ความคิดเห็น 0