สวัสดีครับเพื่อนนักเทรดทุกคน! วันนี้เราจะมาทำความรู้จักกับ 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