ผู้เขียน: Iin Zulkarnainn
สัญญาณ Semaphore จาก Iin_MA_Signal มีฟีเจอร์แจ้งเตือนผ่านอีเมลและการแจ้งเตือนแบบ Push เพื่อให้คุณไม่พลาดทุกสัญญาณสำคัญในการเทรด
การเปลี่ยนแปลงที่ทำในโค้ดของ Indicator เพื่อเพิ่มฟีเจอร์แจ้งเตือนมีดังนี้:
- เพิ่มพารามิเตอร์ใหม่ในโค้ด
- เพิ่มฟังก์ชันใหม่สามฟังก์ชันในโค้ดของ Indicator: BuySignal(), SellSignal() และ GetStringTimeframe()
//+------------------------------------------------------------------+
//| ฟังก์ชันสัญญาณซื้อ |
//+------------------------------------------------------------------+
void BuySignal(string SignalSirname, //ชื่อ Indicator สำหรับข้อความอีเมลและการแจ้งเตือน
double &BuyArrow[], //บัฟเฟอร์ Indicator สำหรับสัญญาณซื้อ
const int Rates_total, //จำนวนบาร์ปัจจุบัน
const int Prev_calculated, //จำนวนบาร์ใน tick ก่อนหน้า
const double &Close[], //ราคาปิด
const int &Spread[]) //สเปรด
{
//---
static uint counter=0;
if(Rates_total!=Prev_calculated) counter=0;
bool BuySignal=false;
bool SeriesTest=ArrayGetAsSeries(BuyArrow);
int index;
if(SeriesTest) index=int(NumberofBar);
else index=Rates_total-int(NumberofBar)-1;
if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) BuySignal=true;
if(BuySignal && counter<=NumberofAlerts)
{
counter++;
MqlDateTime tm;
TimeToStruct(TimeCurrent(),tm);
string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
SeriesTest=ArrayGetAsSeries(Close);
if(SeriesTest) index=int(NumberofBar);
else index=Rates_total-int(NumberofBar)-1;
double Ask=Close[index];
double Bid=Close[index];
SeriesTest=ArrayGetAsSeries(Spread);
if(SeriesTest) index=int(NumberofBar);
else index=Rates_total-int(NumberofBar)-1;
Bid+=Spread[index];
string sAsk=DoubleToString(Ask,_Digits);
string sBid=DoubleToString(Bid,_Digits);
string sPeriod=GetStringTimeframe(ChartPeriod());
if(SoundON) Alert("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
}
//---
}
//+------------------------------------------------------------------+ - เรียกใช้ฟังก์ชัน BuySignal() และ SellSignal() หลังจากรอบการคำนวณของ Indicator ในบล็อก OnCalculate()
//---
BuySignal("Iin_MA_Signal_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
SellSignal("Iin_MA_Signal_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
//---
input uint NumberofBar=1;//จำนวนบาร์สำหรับสัญญาณ
input bool SoundON=true; //เปิดใช้งานการแจ้งเตือนเสียง
input uint NumberofAlerts=2;//จำนวนการแจ้งเตือน
input bool EMailON=false; //เปิดใช้งานการส่งอีเมล
input bool PushON=false; //เปิดใช้งานการส่งการแจ้งเตือนไปยังมือถือ
โดยที่ BuyBuffer และ SellBuffer คือชื่อของบัฟเฟอร์ Indicator สำหรับเก็บสัญญาณซื้อและขาย ค่าที่ว่างในบัฟเฟอร์ Indicator จะต้องตั้งเป็นศูนย์หรือ EMPTY_VALUE
คาดว่าจะมีการเรียกใช้ฟังก์ชัน BuySignal() และ SellSignal() เพียงครั้งเดียวในบล็อก OnCalculate() ของโค้ด Indicator

Fig. 1. Iin_MA_Signal_Alert บนกราฟ

Fig. 2. Iin_MA_Signal_Alert. การสร้างแจ้งเตือน
ความคิดเห็น 0