Color Day - ตัวช่วยทำให้การเทรดของคุณง่ายขึ้นด้วย MetaTrader 5

Mike 2017.01.18 18:27 13 0 0
ไฟล์แนบ

สวัสดีครับเพื่อนนักเทรดทุกคน! วันนี้เราจะมาทำความรู้จักกับ Color Day อินดิเคเตอร์ที่ช่วยให้เราสามารถเห็นแนวโน้มการเคลื่อนไหวของราคาในแต่ละวันได้อย่างชัดเจน โดยเฉพาะการบ่งบอกถึงวันที่เป็นขาขึ้นและขาลง

อินดิเคเตอร์นี้จะทำการเปลี่ยนสีของวันต่างๆ ให้เราเห็น โดยถ้าหากราคาปิดของวันนั้นสูงกว่าราคาเปิด อินดิเคเตอร์จะทำการเปลี่ยนสีเป็น สีน้ำเงิน (สามารถปรับแต่งได้ในตั้งค่า)

input color UP = Blue;  // สีของวันขาขึ้น

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

input color DN = Red;  // สีของวันขาลง

เราจะทำการคัดลอกข้อมูลราคาที่เปิด ราคาปิด และเวลาที่เปิดสำหรับจำนวนวันที่กำหนด Days:

CopyTime(NULL,PERIOD_D1,0,Days+1,tm);
      CopyOpen(NULL,PERIOD_D1,0,Days+1,op);
      CopyClose(NULL,PERIOD_D1,0,Days+1,cl);

ใส่ข้อมูลลงในอาร์เรย์ที่กำหนด:

datetime tm[];
double op[];
double cl[];

เมื่อเราเตรียมข้อมูลเสร็จแล้ว ก่อนที่จะติดตั้งอินดิเคเตอร์ลงบนกราฟ เราต้องตั้งค่าขนาดของอาร์เรย์:

int OnInit()
  {
//--- การแมพอาร์เรย์
   Comment("");
   ArrayResize(tm,Days);
   ArrayResize(op,Days);
   ArrayResize(cl,Days);
//---
   return(INIT_SUCCEEDED);
  }

จากนั้นให้กำหนดค่าของเซลล์ในอาร์เรย์เป็นตัวแปรและหาช่วงเวลาปิดของวัน time1:

datetime time0=tm[i];
      datetime time1=time0+3600*24;
      double dopen=op[i];
      double dclose=cl[i];

ใช้ฟังก์ชัน PutRect() เพื่อวาดสี่เหลี่ยม:

void PutRect(string name,datetime t1,double p1,datetime t2,double p2,color clr)
  {
   ObjectDelete(0,name);
//--- สร้างสี่เหลี่ยมตามพิกัดที่กำหนด
   ObjectCreate(0,name,OBJ_RECTANGLE,0,t1,p1,t2,p2);
//--- ตั้งค่าสีของสี่เหลี่ยม
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- เปิด (true) หรือปิด (false) โหมดการเติมสีของสี่เหลี่ยม
   ObjectSetInteger(0,name,OBJPROP_FILL,true);
  }

ทำการระบายสีของวันตามทิศทางของราคา:

if(dclose<dopen) PutRect("Rect"+(string)dopen,time0,dopen,time1,dclose,DN);
      if(dclose>dopen) PutRect("Rect"+(string)dopen,time0,dopen,time1,dclose,UP);

ทำการวนลูปผ่านวันที่กำหนดในพารามิเตอร์ Days:

for(int i=0;i<=Days;i++)
     {
      CopyTime(NULL,PERIOD_D1,0,Days+1,tm);
      CopyOpen(NULL,PERIOD_D1,0,Days+1,op);
      CopyClose(NULL,PERIOD_D1,0,Days+1,cl);

      datetime time0=tm[i];
      datetime time1=time0+3600*24;
      double dopen=op[i];
      double dclose=cl[i];

      if(dclose<dopen) PutRect("Rect"+(string)dopen,time0,dopen,time1,dclose,DN);
      if(dclose>dopen) PutRect("Rect"+(string)dopen,time0,dopen,time1,dclose,UP);

เมื่อเราเลือกที่จะลบอินดิเคเตอร์จากกราฟ ใช้ฟังก์ชัน DeleteObjects():

void DeleteObjects()
  {
   for(int i=ObjectsTotal(0,0,OBJ_RECTANGLE)-1;i>=0;i--)
     {
      string name=ObjectName(0,i,0,OBJ_RECTANGLE);
      if(StringFind(name,"Rect",0)>=0) ObjectDelete(0,name);
     }
  }

สุดท้ายเมื่อเราต้องการลบวัตถุต่างๆ ที่สร้างขึ้นจากกราฟ:

void OnDeinit(const int reason)
  {
   Comment("");
   DeleteObjects();
  }

การตั้งค่า:

input int   Days = 11;  // จำนวนวันที่ใช้ในการคำนวณ
input color UP = Blue;  // สีของวันขาขึ้น
input color DN = Red;   // สีของวันขาลง

Fig. 1. อินดิเคเตอร์บนกราฟ

เคล็ดลับ:

  • Color Day อินดิเคเตอร์ — เป็นผู้ช่วยที่ช่วยให้การเทรดของคุณง่ายขึ้น
รายการ
ความคิดเห็น 0