สอนเขียน EA บทที่ 1 tracking ค่าต่างๆ

EA หรือ Expert Advisor คือระบบการเทรดที่เราเขียนขึ้นมาเอง ซึ่งการเขียนก็จะเป็นการเขียนโปรแกรมซึ่งใครที่ไม่มีพื้นฐานมาก่อนต้องศึกษาการเขียนโปรแกรมเชิงวัตถุ OOP เสียก่อนถึงจะมาเขียน EA นี้ได้ ลักษณะของภาษาโปรแกรมมิ่งที่ใช้เขียนจะคล้ายกับการเขียน Javascript ก่อนอื่นจะเริ่มต้นเขียนให้เราไปที่หน้าโปรแกรม MT4 ก่อน


คลิกขาวตรง Expert Advisors แล้วเลือก Create MetaEditor จากนั้นก็คลิก Next> อย่างเดียวเราจะได้หน้าตา Template ของโปรแกรมดังนี้


จากโปรแกรมเบื้องต้นของ EA ที่ระบบมันสร้างไฟล์ให้เราจะมี 2 ส่วนหลักที่ใช้งานคือ
- OnInit ส่วนนี้จะรันครั้งเดียวเอาไว้ Set ค่าตัวแปร
- OnTick ส่วนนี้จะเอาไว้รันโปรแกรมที่เราต้องการให้มันเทรดเมื่อราคาหรือเข้าเงื่อนไขที่เราตั้งไว้

ในตัวอย่างนี้เราจะเขียน EA ให้มันแสดงค่า Indicator ออกมา

จากตัวอย่างด้านบนเป็น EA ที่ Get ค่า Stoch, Adx, Ask และ Bid ออกมา ซึ่งเมื่อเก็บค่าไว้ในตัวแปรแล้วเราก็สามารถนำค่าเหล่านี้ไปเข้าเงื่อนไขได้ เช่น เราจะเปิดคำสั่งซื้อเมื่อค่า Stoch น้อยกว่า 25 และค่า Adx มากกว่า 30 ก็สามารถทำได้ เป็นพื้นฐานก่อนไปสู่การเขียนโปรแกรมให้มันเทรด โค้ดด้านบนมีดังนี้

//+------------------------------------------------------------------+
//|                                                     chapter1.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
 int a1 = 1;
 int a2 = 2;
 int a3 = 3;
int OnInit()
  {
//---
   int b1 = 1;
   Print("b1=",b1);
   b1++;
   a1++;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---a
 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   Print("a3=",a3," a1=",a1);
   a3++;
 
      // Bid label
      // create the Object
      ObjectCreate ("Bid", OBJ_LABEL,0,0,0);
      // set the Text for the label
      ObjectSetText ("Bid","Bid Price: "+DoubleToStr(Bid,Digits),20,"Arial",Red);
      // Set the corner
      ObjectSet ("Bid",OBJPROP_CORNER,1);
      // Set the corner x distance
      ObjectSet ("Bid", OBJPROP_XDISTANCE,30);
      // Set the corner y distance
      ObjectSet ("Bid", OBJPROP_YDISTANCE,200);
     
     
     
      // ASK label
      ObjectCreate ("Ask", OBJ_LABEL,0,0,0);
      // set the Text for the label
      ObjectSetText ("Ask","Ask Price: "+DoubleToStr(Ask,Digits),20,"Arial",Blue);
      // Set the corner
      ObjectSet ("Ask",OBJPROP_CORNER,4);
      // Set the corner x distance
      ObjectSet ("Ask", OBJPROP_XDISTANCE,30);
      // Set the corner y distance
      ObjectSet ("Ask", OBJPROP_YDISTANCE,200);
     
       // ADX
       double ADX;
     
               ADX = iADX(NULL, 5, 14, PRICE_CLOSE, 0, 0);
             
             
       double  stoch;
     
               stoch = iStochastic(NULL,0,5,3,3,3,0,MODE_MAIN,0);
     
      ObjectCreate ("ADX", OBJ_LABEL,0,0,0);
      // set the Text for the label
      ObjectSetText ("ADX","ADX: "+DoubleToStr(ADX,Digits),20,"Arial",Blue);
      // Set the corner
      ObjectSet ("ADX",OBJPROP_CORNER,4);
      // Set the corner x distance
      ObjectSet ("ADX", OBJPROP_XDISTANCE,30);
      // Set the corner y distance
      ObjectSet ("ADX", OBJPROP_YDISTANCE,150);
     
     
      ObjectCreate ("Stoch", OBJ_LABEL,0,0,0);
      // set the Text for the label
      ObjectSetText ("Stoch","Stoch: "+DoubleToStr(stoch,Digits),20,"Arial",Blue);
      // Set the corner
      ObjectSet ("Stoch",OBJPROP_CORNER,4);
      // Set the corner x distance
      ObjectSet ("Stoch", OBJPROP_XDISTANCE,30);
      // Set the corner y distance
      ObjectSet ("Stoch", OBJPROP_YDISTANCE,80);
     
  }
//+------------------------------------------------------------------+

อธิบายโค้ด
ให้เราเขียนคำสั่งใน Function Ontrick ซึ่งโปรแกรมจะรันคำสั่งในฟังก์ชั่นนี้ไปเรื่อยๆ ขออธิบายโค้ดที่น่าสนใจคือ

โค้ดสร้างตัวหนังสือในกราฟ
      // create the Object
      ObjectCreate ("Bid", OBJ_LABEL,0,0,0); สร้างลาเบล ต้องเปลี่ยนชื่อ "Bid" ไปเรื่อยๆไม่งั้นมันจะชนกัน
      // set the Text for the label
      ObjectSetText ("Bid","Bid Price: "+DoubleToStr(Bid,Digits),20,"Arial",Red); ตั่งค่าตัวหนังสือ ขนาด สี
      // Set the corner
      ObjectSet ("Bid",OBJPROP_CORNER,1); ตำแหน่งมุม 1 - 4 ลองปรับดู
      // Set the corner x distance
      ObjectSet ("Bid", OBJPROP_XDISTANCE,30); ตำแหน่งแกน X ปรับไปซ้ายหรือขวา
      // Set the corner y distance
      ObjectSet ("Bid", OBJPROP_YDISTANCE,200); ตำแหน่งแกน Y ปรับขึ้นสูงหรือต่ำ

โค้ดสร้าง Indicator EA
       double ADX; ประกาศตัวแปรเป็น double ตัวเลขทศนิยม
     
               ADX = iADX(NULL, 5, 14, PRICE_CLOSE, 0, 0); 5 คือ Timeframe 14 คือ Period
             
             
       double  stoch; ประกาศตัวแปรเป็น double ตัวเลขทศนิยม
     
               stoch = iStochastic(NULL,0,5,3,3,3,0,MODE_MAIN,0); 5 คือ k% period 3 คือ D% period 3 ตัวสุดท้ายคือ Slowing

เมื่อได้ค่าต่างๆ แปรแล้วก็สามารถนำไปใช้งานในการเข้าเงื่อนไขเพื่อการเทรดได้ ในบทนี้เอาง่ายๆ แค่นี้ไปก่อนบทต่อไปจะลองให้มันแจ้งเตือนถ้าเข้าเงื่อนไขในการเทรด

โพสต์ความคิดเห็น

0 ความคิดเห็น