การทำงานกับ Telegram ใน MetaTrader ช่องทาง Telegram และบอท
ความลับ Autolot ของฉัน ล็อตไดนามิกหรือ Autolot ความเสี่ยงจากความสมดุล
Description
Alert: คำค้นหาบ่อยที่สุดในเครื่องมือค้นหาและหัวข้อยอดนิยมในฟอรั่มมักมีวลีต่อไปนี้
การแจ้งเตือนในหัวข้อเหล่านี้ช่วยให้คุณติดตามแนวโน้มล่าสุดได้
- “ตัวบ่งชี้การแจ้งเตือน”
- “คุณจะเพิ่มสัญญาณเสียงลงในตัวบ่งชี้ได้อย่างไร”
- “ช่วยฉันใส่สัญญาณเสียงเข้าไปในตัวบ่งชี้หน่อย”
- “วิธีใส่การแจ้งเตือนและลูกศร”
- “จะส่งข้อความไปยังอีเมลหรือโทรศัพท์เมื่อสัญญาณมาจากตัวบ่งชี้ได้อย่างไร”
ในบทความนี้ ฉันจะอธิบายอย่างละเอียดเกี่ยวกับวิธีง่ายๆ ในการเพิ่ม Alert, Mail, Push, และ Arrow ลงในตัวบ่งชี้ (Indicator) ใดก็ได้ โดยใช้โค้ดเพิ่มเติมที่มีให้ที่ Expforex.
Foreword
ในการติดตั้ง Alert ลงในตัวบ่งชี้ของคุณอย่างถูกต้อง คุณจำเป็นต้องมีซอร์สโค้ดแบบเปิดของตัวบ่งชี้นั้น
โค้ดที่ถูกดึงกลับมา (decompiled code) ไม่แนะนำให้ใช้ เพราะสำหรับมือใหม่ โค้ดที่ถูกดึงกลับมา จะให้ข้อมูลน้อยมากและเข้าใจยาก
นอกจากนี้ คุณอาจพบปัญหาการคอมไพล์หลังการแก้ไขได้
xCustomEA
หากคุณกำลังมองหาวิธีที่ง่ายกว่าในการ ทำให้กลยุทธ์การเทรดเป็นอัตโนมัติ โดยไม่ต้องเขียนโค้ดเฉพาะทางที่ซับซ้อน ขอแนะนำ xCustomEA.
Expert Advisor ตัวนี้จาก Expforex ถูกออกแบบมาให้ทำงานร่วมกับตัวบ่งชี้ที่สร้างสัญญาณลูกศรได้อย่างราบรื่น ด้วย xCustomEA คุณสามารถทำให้ตัวบ่งชี้ที่แสดงลูกศรซื้อหรือขายเป็นอัตโนมัติ ช่วยให้คุณสร้างกลยุทธ์แบบอัตโนมัติได้อย่างง่ายดาย โดยไม่ต้องพัฒนาโค้ดที่ยุ่งยาก
xCustomEA ทำให้การใช้สัญญาณจากตัวบ่งชี้เพื่อเทรดโดยอัตโนมัตินั้นเป็นเรื่องง่าย ผู้เทรดสามารถโฟกัสไปที่การปรับปรุงประสิทธิภาพการเทรด แทนที่จะเสียเวลาไปกับการพัฒนาโปรแกรมที่ซับซ้อน Expert Advisor นี้เป็นทางเลือกที่ดี แทนการจ้างโปรแกรมเมอร์ให้มาเขียนโค้ดเฉพาะทาง ด้วยโซลูชันที่ใช้งานได้อย่างตรงไปตรงมา
หากต้องการข้อมูลเพิ่มเติม โปรดเยี่ยมชม หน้าของ xCustomEA หรือสำรวจ Expert Advisor อื่นๆ จาก Expforex
Beginning of Work to insert Alert
ขั้นแรก คุณต้องกำหนดว่าบัฟเฟอร์ (buffer) ใดในตัวบ่งชี้ที่ให้สัญญาณ จุดประสงค์ในการสร้างการแจ้งเตือน และเงื่อนไขในการกำหนดสัญญาณตามตัวบ่งชี้นั้น
Important: ตัวบ่งชี้บางตัวอาจแสดงเฉพาะบัฟเฟอร์ภายนอกที่กำหนดไว้ในโค้ดส่วนต้นเท่านั้น
#property indicator_buffers 1
อย่างไรก็ตาม ตัวบ่งชี้อาจมีบัฟเฟอร์ที่ซ่อนอยู่ ซึ่งถูกกำหนดในฟังก์ชัน init() และประกาศเป็นตัวแปรไว้
IndicatorBuffers(7): เราอาจต้องการเฉพาะบัฟเฟอร์แรก
ตัวอย่างเช่น หากคุณมี 1 บัฟเฟอร์ภายนอก ให้ดูตัวแปร:
SetIndexBuffer(0, SarBuffer);
- 0 คือบัฟเฟอร์ตัวแรก
- 1 คือบัฟเฟอร์ตัวที่สอง
บัฟเฟอร์เหล่านี้หรือชื่อบัฟเฟอร์อาจระบุได้ โดยนำเมาส์ไปชี้ที่เส้นใดเส้นหนึ่งของตัวบ่งชี้บนกราฟ
Value1 – หมายถึงบัฟเฟอร์ตัวแรกหรือ 0 ในระบบอินเด็กซ์ของโค้ด
SetIndexBuffer(0, SarBuffer); // ชื่อบัฟเฟอร์ที่เราต้องการ
หากใช้ SarBuffer ก็จะเป็นตัวที่ใช้
จากนั้นจึงเป็นเรื่องทางเทคนิคในการกำหนดว่า สัญญาณจะเกิดขึ้นในรูปแบบใด
ตัวอย่างเช่น ถ้าเป็นการตัดผ่านเส้น 0 จากด้านบน (ล่าง) ลงมา (ขึ้น) ก็จะมีรูปแบบเงื่อนไขดังนี้:
SarBuffer[shift+1] >= 0 && SarBuffer[shift] < 0
การตัดผ่านราคาปัจจุบันหรือแท่งเทียน (การทะลุแท่งเทียนโดยตัวบ่งชี้) เป็นต้น:
SarBuffer[shift+1] >= Close[shift] && SarBuffer[shift] < Close[shift]
ถ้าเป็นการตัดผ่านระดับ (level) ที่กำหนด เช่น stochastics:
SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75; SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25;
ถ้าในตัวบ่งชี้ของคุณมีลูกศรอยู่แล้ว ก็อาจมีเงื่อนไขสัญญาณในรูปแบบต่อไปนี้:
DnTrend[1] != EMPTY_VALUE && DnTrend[1] != 0 && UpTrend[2] != EMPTY_VALUE
อย่างไรก็ตาม คุณต้องใช้ตรรกะและความเข้าใจ เพื่อบันทึกสัญญาณให้ถูกต้อง หากคุณติดขัด โปรดเขียนคำถามในกระทู้ แนบตัวบ่งชี้ แสดงเส้นบนกราฟ และอธิบายรายละเอียดว่าคุณทำไม่ได้ตรงไหน การส่งข้อความเช่น “ต้องการใส่ alert ในตัวบ่งชี้” โดยไม่อธิบายว่าใส่ตรงไหน หรือไม่มีตัวบ่งชี้แนบมาด้วย จะไม่ช่วยให้แก้ไขได้
Code “Alerts and arrows from www.expforex.com“
ขั้นตอนต่อไปในการเพิ่ม alert ให้กับตัวบ่งชี้ของเรา มีรายละเอียดดังนี้
STEP 1
วางโค้ดต่อไปนี้ไว้ที่ส่วนต้นของ EA (ก่อนฟังก์ชัน OnCalculate() หรือ start)
//+==+//+ www.expforex.com edit AlertArrow +//+==+ extern string Alerts="Alerts and arrows from www.expforex.com"; extern bool AlerT=true; // Issue an alert to the screen extern bool Mail=true; // Send message extern bool Push=true; // Send PUSH to phone extern bool Arrow=true; // Put arrows on signals extern int shift=1; // On which bar to count the signal 0 - on the current one, 1 - on the closed int timeee; // Internal variable string nameInd; void SetArrow(int cd, color cl, string nm="", datetime t1=0, double p1=0, int sz=3) { if(nm=="") nm=DoubleToStr(Time[0], 0); if(t1 <= 0) t1=Time[0]; if(p1 <= 0) p1=Bid; nameInd=WindowExpertName(); int wind=WindowFind(nameInd); wind=0; if(ObjectFind(nm) < 0) ObjectCreate(nm, OBJ_ARROW, wind, 0, 0); ObjectSet(nm, OBJPROP_TIME1, t1); ObjectSet(nm, OBJPROP_PRICE1, p1); ObjectSet(nm, OBJPROP_ARROWCODE, cd); ObjectSet(nm, OBJPROP_COLOR, cl); ObjectSet(nm, OBJPROP_WIDTH, sz); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Expforex_AlertArrow(string text="", int arrowdir=0, bool history=false, int i=0) { nameInd=WindowExpertName(); int wind=WindowFind(nameInd); if(wind==-1) wind=0; ObjectCreate("Originalalert", OBJ_LABEL, wind, 0, 0); ObjectSetText("Originalalert", "Modification AlertArrow www.expforex.com", 10, "Arial Bold", Red); ObjectSet("Originalalert", OBJPROP_CORNER, 2); ObjectSet("Originalalert", OBJPROP_XDISTANCE, 200); ObjectSet("Originalalert", OBJPROP_YDISTANCE, 10); if(!history) { if(AlerT) Alert(text); if(Arrow) if(arrowdir==1) SetArrow(241, Blue, nameInd + DoubleToStr(Time[shift], 0), Time[shift], Low[shift]); if(Arrow) if(arrowdir==2) SetArrow(242, Red, nameInd + DoubleToStr(Time[shift], 0), Time[shift], High[shift]); if(!IsTesting()) if(Mail) SendMail(text, text); if(!IsTesting()) if(Push) SendNotification(text); } if(history) { if(Arrow) if(arrowdir==1) SetArrow(241, Blue, nameInd + DoubleToStr(Time[shift + i2], 0), Time[shift + i2], Low[shift + i2]); if(Arrow) if(arrowdir==2) SetArrow(242, Red, nameInd + DoubleToStr(Time[shift + i2], 0), Time[shift + i2], High[shift + i2]); } }//+==+//+ www.expforex.com edit AlertArrow +//+==+ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { for(int i=ObjectsTotal(); i>=0; i--) { if(StringFind(ObjectName(i), nameInd)!=-1) ObjectDelete(ObjectName(i)); } } //+------------------------------------------------------------------+
STEP 2
ก่อนจบฟังก์ชัน OnCalculate() ให้ใส่โค้ดต่อไปนี้ไว้ก่อน
return(rates_total); }
โค้ดที่จะวาง:
//+==+//+ www.expforex.com edit AlertArrow +//+==+ nameInd=WindowExpertName(); if(timeee != Time[0] && SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75) { Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " UP", 1); timeee=Time[0]; } if(timeee != Time[0] && SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25) { Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " DN", 2); timeee=Time[0]; }//+==+//+ www.expforex.com edit AlertArrow +//+==+
STEP 3
โค้ดนี้จะทำงานเป็นสัญญาณของเรา
แน่นอนว่าต้องเปลี่ยนบางส่วนให้เข้ากับโค้ดของคุณเอง
ตัวอย่างด้านล่างเป็นรูปแบบเงื่อนไขสำหรับการแจ้งเตือน:
1. การตัดผ่านเส้น 0 จากด้านบน (ล่าง) ลงมา (ขึ้น):
SarBuffer[shift+1] >= 0 && SarBuffer[shift] < 0
2. การตัดผ่านราคาปัจจุบันหรือแท่งเทียน:
SarBuffer[shift+1] >= Close[shift] && SarBuffer[shift] < Close[shift]
3. การตัดผ่านระดับ (level) เฉพาะ เช่น stochastics:
SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75; SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25;
After Use
ในการเพิ่มสัญญาณเสียงลงในตัวบ่งชี้ ให้ทำตามขั้นตอน:
- 1. เปิดการตั้งค่าของตัวบ่งชี้
- 2. มองหาหัวข้อ “Alert” หรือ “Arrows“
- 3. เลือกตัวเลือกในการเพิ่มการแจ้งเตือนด้วยเสียง
- 4. เลือกไฟล์เสียงที่ต้องการใช้ในการแจ้งเตือน
- 5. บันทึกการเปลี่ยนแปลง
เมื่อใส่สัญญาณเสียงลงในตัวบ่งชี้ คุณจะได้รับแจ้งเตือนเสียง เมื่อเงื่อนไขที่กำหนดตรงตามที่ต้องการ ซึ่งช่วยให้คุณตัดสินใจเทรดได้ดียิ่งขึ้น
If You Need Arrows on History, Then You Need to Do This:
หลังจากโค้ดข้างต้น ให้เพิ่มโค้ดต่อไปนี้:
//+==+//+ www.expforex.com edit AlertArrow +//+==+ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if(counted_bars > 0) counted_bars--; int limit2 = Bars - counted_bars; for(int i2 = 0; i2 < limit2; i2++) { nameInd = WindowExpertName(); if(SarBuffer[shift+1+i2] <= 75 && SarBuffer[shift+i2] > 75) { Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " UP" + i2, 1, true, i2); } if(SarBuffer[shift+1+i2] >= 25 && SarBuffer[shift+i2] < 25) { Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " DN" + i2, 2, true, i2); } } //+==+//+ www.expforex.com edit AlertArrow +//+==+
Examples
ตัวอย่างเหล่านี้นำมาจากส่วนที่เกี่ยวข้องในฟอรั่มของเรา ฉันได้ปรับตัวบ่งชี้ตามหลักการที่กล่าวมาข้างต้นแล้ว
Conclusions
ในบทความนี้ ฉันได้อธิบายขั้นตอนการสร้างสัญญาณสำหรับตัวบ่งชี้ อย่างละเอียดและเข้าใจง่ายที่สุด
โค้ดข้างต้นสามารถใช้งานได้โดยไม่มีข้อจำกัดกับตัวบ่งชี้ใดก็ได้ สิ่งสำคัญคือไม่เปลี่ยนชื่อผู้เขียน (author) เมื่อเพิ่มโค้ดลงในตัวบ่งชี้
หากคุณชอบบทความนี้ และรู้สึกว่าวิธีใส่สัญญาณนี้เป็นประโยชน์ กรุณาแสดงความคิดเห็นและให้คะแนนในหัวข้อ
- Freelance: การเขียนโปรแกรมตามสั่งบน MetaTrader และ MQL!
- Signal bar indicator. ใช้บาร์ไหนเป็นสัญญาณ? การวาดตัวบ่งชี้
- CrossObjectALert แจ้งเตือนเมื่อมีการตัดกับวัตถุสำหรับเทอร์มินัล mt4 และ mt5
- การทำงานกับอีเมลและ Push ใน MetaTrader
Signal Bar: This Is Important to Know
Questions?
หากคุณมีคำถามใดๆ โปรดสอบถามได้ เราไม่ได้ขายสินค้าที่ไม่ชัดเจน
นอกจากนี้ ผลิตภัณฑ์แต่ละตัวของเรายังสามารถทดสอบได้ก่อนทำการซื้อ
เราขอขอบคุณความสนใจและการสนับสนุนผลิตภัณฑ์ของเรา และจะพยายามรักษามาตรฐานคุณภาพไว้เสมอ
ขอบคุณที่อยู่กับเรา!
คุณมีคำถามหรือไม่?
โพสต์นี้มีให้บริการใน: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어 العربية Indonesian ไทย Tiếng Việt
ใส่ความเห็น