การอธิบายอินดิเคเตอร์ Damiani Volatmeter v3.2 Alerts อย่างละเอียด: การวิเคราะห์โค้ดและการใช้งาน
อินดิเคเตอร์ Damiani Volatmeter v3.2 Alerts เป็นตัวบ่งชี้ความผันผวนที่ได้รับการออกแบบมาเพื่อระบุว่าสภาวะตลาดเหมาะสมสำหรับการเทรดหรือไม่ โดยใช้อัตราส่วนของค่าเฉลี่ยเคลื่อนที่ของค่า ATR (Average True Range) และค่าเบี่ยงเบนมาตรฐาน (Standard Deviation) เพื่อสร้างเกณฑ์ในการกำหนดเงื่อนไข "TRADE" หรือ "DO NOT TRADE"
โครงสร้างของโค้ดและการอธิบายส่วนต่าง ๆ
- ส่วนหัวของโค้ด
//+------------------------------------------------------------------+
//| Damiani Volatmeter v3.2 Alerts.mq4 |
//| this is the alerts version of Damiani_volatmeter.mq4 v3.2 |
//| Copyright ฉ 2006,2007 Luis Guilherme Damiani |
//| http://www.damianifx.com.br |
//| |
//+------------------------------------------------------------------+
อธิบาย:
- เป็นส่วนหัวของโค้ดที่ระบุถึงเวอร์ชัน, ผู้พัฒนา และ URL ที่เกี่ยวข้อง
- มีการระบุวันที่และการแก้ไขล่าสุดที่เพิ่มฟังก์ชันแจ้งเตือน (Alerts)
- การกำหนดคุณสมบัติของอินดิเคเตอร์
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 clrLime
#property indicator_color2 clrRed
อธิบาย:
- #property indicator_separate_window → อินดิเคเตอร์จะถูกแสดงในหน้าต่างแยกต่างหากจากกราฟราคา
- #property indicator_buffers 2 → มีการใช้บัฟเฟอร์ (Buffer) จำนวน 2 ชุดเพื่อเก็บค่าอินดิเคเตอร์
- #property indicator_color1 clrLime → สีของเส้นสัญญาณสีเขียว
- #property indicator_color2 clrRed → สีของเส้นสัญญาณสีแดง
- การกำหนดค่าพารามิเตอร์เริ่มต้น
extern int Vis_atr=13;
extern int Vis_std=20;
extern int Sed_atr=40;
extern int Sed_std=100;
extern double Threshold_level=1.4;
extern bool lag_supressor=true;
extern double lag_s_K=0.5;
extern int max_bars=2000;
อธิบาย:
- Vis_atr และ Sed_atr → กำหนดค่า ATR สำหรับระยะเวลาสั้นและยาว
- Vis_std และ Sed_std → กำหนดค่า Standard Deviation
- Threshold_level → ค่าที่ใช้เป็นเกณฑ์ตัดสินว่าเป็นสภาวะเทรดได้หรือไม่
- lag_supressor → ใช้เพื่อลดความล่าช้าของสัญญาณ
- max_bars → กำหนดจำนวนแท่งเทียนสูงสุดที่อินดิเคเตอร์จะประมวลผล
- ฟังก์ชันการแจ้งเตือน
extern bool PopupAlerts = true;
extern bool EmailAlerts = false;
extern bool PushNotificationAlerts = false;
extern bool SoundAlerts = false;
extern string SoundFileTradeAllowed = "alert.wav";
extern string SoundFileDoNotTrade = "alert2.wav";
อธิบาย:
- ตัวเลือกการแจ้งเตือนเมื่อเงื่อนไขตรงตาม:
- PopupAlerts → แจ้งเตือนด้วยหน้าต่างป๊อปอัป
- EmailAlerts → แจ้งเตือนทางอีเมล
- PushNotificationAlerts → แจ้งเตือนผ่านแอป MT4/MT5
- SoundAlerts → เล่นเสียงเมื่อถึงเงื่อนไข
- การกำหนด Buffer สำหรับเก็บค่าอินดิเคเตอร์
double thresholdBuffer[], Lower[];
double vol_m[];
double vol_t[];
double SignalBuffer[];
อธิบาย:
- thresholdBuffer[] → ใช้เก็บค่าที่เกี่ยวข้องกับระดับความผันผวน
- Lower[] → ใช้เก็บค่าที่ต่ำกว่าเกณฑ์ที่กำหนด
- vol_m[] และ vol_t[] → เก็บค่าที่เกี่ยวกับ ATR
- SignalBuffer[] → ใช้บันทึกค่าผลลัพธ์ที่อินดิเคเตอร์ต้องการส่งออก
- ฟังก์ชัน init() (เริ่มต้นอินดิเคเตอร์)
int init()
{
IndicatorBuffers(2);
SetIndexBuffer(0,thresholdBuffer);
SetIndexBuffer(1,Lower);
SetIndexBuffer(2,vol_t);
SetIndexBuffer(3,SignalBuffer);
SetIndexEmptyValue(3,EMPTY_VALUE);
return(0);
}
อธิบาย:
- ตั้งค่าบัฟเฟอร์และกำหนดรูปแบบการแสดงผล เช่น DRAW_HISTOGRAM
- กำหนดค่าที่ไม่ใช้งานให้เป็น EMPTY_VALUE
- ฟังก์ชัน start() (การทำงานหลักของอินดิเคเตอร์)
int start()
{
for(int i=loop_size; i>=0; i--)
{
double sa = iATR(NULL,0,Vis_atr,i);
double atr = NormalizeDouble(sa,Digits);
double vol = sa / iATR(NULL,0,Sed_atr,i);
double anti_thres = iStdDev(NULL,0,Vis_std,0,MODE_LWMA,PRICE_TYPICAL,i);
anti_thres /= iStdDev(NULL,0,Sed_std,0,MODE_LWMA,PRICE_TYPICAL,i);
if (vol > Threshold_level) {
SignalBuffer[0] = 1.0;
} else {
SignalBuffer[0] = 2.0;
}
}
return(0);
}
อธิบาย:
- วนลูปคำนวณ ATR และ Standard Deviation
- กำหนดสถานะสัญญาณการเทรด (TRADE OK = 1.0 หรือ DO NOT TRADE = 2.0)
- ฟังก์ชัน doAlerts() สำหรับการแจ้งเตือน
void doAlerts(string msg, string SoundFile)
{
if (PopupAlerts) Alert(msg);
if (EmailAlerts) SendMail("MT4 Alert", msg);
if (SoundAlerts) PlaySound(SoundFile);
}
อธิบาย:
- แจ้งเตือนผู้ใช้ด้วยการแสดงข้อความ, อีเมล, หรือเสียง
ตัวอย่างการใช้งานอินดิเคเตอร์กับ EA
double volatmeter = iCustom(Symbol(),0,"Damiani Volatmeter v3.2 Alerts",13,20,40,100,1.4,true,0.5,2000,"",3,0);
if (volatmeter == 1.0) {
Print("TRADE OK");
} else {
Print("DO NOT TRADE");
}
อธิบาย:
- เรียกใช้อินดิเคเตอร์ผ่าน iCustom() และตรวจสอบสัญญาณการเทรด
หากต้องการใช้งานในกลยุทธ์จริง ควรนำไปปรับใช้ร่วมกับอินดิเคเตอร์แนวโน้มอื่นเพื่อเพิ่มความแม่นยำ.
Download Source Code :
https://www.forexfactory.com/attachment/file/2090111?d=1480839286
ทิ้งคำตอบไว้
- 40 ฟอรัม
- 1,180 หัวข้อ
- 3,453 กระทู้
- 23 ออนไลน์
- 1,413 สมาชิก