작성자: Ramdass - 변환 전용
BykovTrend 세마포어 신호 지표는 알림 기능이 포함되어 있어, 이메일과 모바일 기기로 푸시 알림을 보낼 수 있습니다.
이 지표의 코드에 알림, 이메일 메시지 및 푸시 알림을 구현하기 위해 다음과 같은 수정이 이루어졌습니다:
- 새로운 입력 매개변수 추가
input uint Bar갯수=1;// 신호를 위한 바 갯수 input bool 소리알림=true; // 알림 활성화 input uint 알림갯수=2;// 알림 갯수 input bool 이메일알림=false; // 신호 이메일 전송 활성화 input bool 푸시알림=false; // 모바일 기기로 신호 전송 활성화
- 지표 코드 끝에 세 개의 새로운 함수 추가: BuySignal(), SellSignal() 및 GetStringTimeframe()
//+------------------------------------------------------------------+ //| 매수 신호 함수 | //+------------------------------------------------------------------+ void BuySignal(string 신호이름, // 이메일 및 푸시 메시지를 위한 지표 이름 텍스트 double &매수화살표[], // 매수 신호가 있는 지표 버퍼 const int 현재바갯수, // 현재 바 갯수 const int 이전계산갯수, // 이전 틱의 바 갯수 const double &종가[], // 종가 const int &스프레드[]) // 스프레드 { //--- static uint 카운터=0; if(현재바갯수!=이전계산갯수) 카운터=0; bool 매수신호=false; bool 시리즈테스트=ArrayGetAsSeries(매수화살표); int 인덱스; if(시리즈테스트) 인덱스=int(Bar갯수); else 인덱스=현재바갯수-int(Bar갯수)-1; if(NormalizeDouble(매수화살표[인덱스],_Digits) && 매수화살표[인덱스]!=EMPTY_VALUE) 매수신호=true; if(매수신호 && 카운터<=알림갯수) { 카운터++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string 텍스트=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); 시리즈테스트=ArrayGetAsSeries(종가); if(시리즈테스트) 인덱스=int(Bar갯수); else 인덱스=현재바갯수-int(Bar갯수)-1; double 매도호가=종가[인덱스]; double 매수호가=종가[인덱스]; 시리즈테스트=ArrayGetAsSeries(스프레드); if(시리즈테스트) 인덱스=int(Bar갯수); else 인덱스=현재바갯수-int(Bar갯수)-1; 매수호가+=스프레드[인덱스]; string s매도호가=DoubleToString(매도호가,_Digits); string s매수호가=DoubleToString(매수호가,_Digits); string s기간=GetStringTimeframe(ChartPeriod()); if(소리알림) Alert("BUY 신호 매도호가=",매도호가," 매수호가=",매수호가," 현재시간=",텍스트," 심볼=",Symbol()," 기간=",s기간); if(이메일알림) SendMail(신호이름+": BUY 신호 알림","BUY 신호 at 매도호가="+s매도호가+", 매수호가="+s매수호가+", Date="+텍스트+" 심볼="+Symbol()+" 기간="+s기간); if(푸시알림) SendNotification(신호이름+": BUY 신호 at 매도호가="+s매도호가+", 매수호가="+s매수호가+", Date="+텍스트+" 심볼="+Symbol()+" 기간="+s기간); } //--- } //+------------------------------------------------------------------+ //| 매도 신호 함수 | //+------------------------------------------------------------------+ void SellSignal(string 신호이름, // 이메일 및 푸시 메시지를 위한 지표 이름 텍스트 double &매도화살표[], // 매도 신호가 있는 지표 버퍼 const int 현재바갯수, // 현재 바 갯수 const int 이전계산갯수, // 이전 틱의 바 갯수 const double &종가[], // 종가 const int &스프레드[]) // 스프레드 { //--- static uint 카운터=0; if(현재바갯수!=이전계산갯수) 카운터=0; bool 매도신호=false; bool 시리즈테스트=ArrayGetAsSeries(매도화살표); int 인덱스; if(시리즈테스트) 인덱스=int(Bar갯수); else 인덱스=현재바갯수-int(Bar갯수)-1; if(NormalizeDouble(매도화살표[인덱스],_Digits) && 매도화살표[인덱스]!=EMPTY_VALUE) 매도신호=true; if(매도신호 && 카운터<=알림갯수) { 카운터++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string 텍스트=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); 시리즈테스트=ArrayGetAsSeries(종가); if(시리즈테스트) 인덱스=int(Bar갯수); else 인덱스=현재바갯수-int(Bar갯수)-1; double 매도호가=종가[인덱스]; double 매수호가=종가[인덱스]; 시리즈테스트=ArrayGetAsSeries(스프레드); if(시리즈테스트) 인덱스=int(Bar갯수); else 인덱스=현재바갯수-int(Bar갯수)-1; 매수호가+=스프레드[인덱스]; string s매도호가=DoubleToString(매도호가,_Digits); string s매수호가=DoubleToString(매수호가,_Digits); string s기간=GetStringTimeframe(ChartPeriod()); if(소리알림) Alert("SELL 신호 매도호가=",매도호가," 매수호가=",매수호가," 현재시간=",텍스트," 심볼=",Symbol()," 기간=",s기간); if(이메일알림) SendMail(신호이름+": SELL 신호 알림","SELL 신호 at 매도호가="+s매도호가+", 매수호가="+s매수호가+", Date="+텍스트+" 심볼="+Symbol()+" 기간="+s기간); if(푸시알림) SendNotification(신호이름+": SELL 신호 at 매도호가="+s매도호가+", 매수호가="+s매수호가+", Date="+텍스트+" 심볼="+Symbol()+" 기간="+s기간); } //--- } //+------------------------------------------------------------------+ //| 문자열로서 시간 프레임 가져오기 | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES 기간) { //---- return(StringSubstr(EnumToString(기간),7,-1)); //---- }
- 지표 계산 주기 후 BuySignal() 및 SellSignal() 함수에 호출 추가
//--- BuySignal("BykovTrendAlert",매수버퍼,현재바갯수,이전계산갯수,종가,스프레드); SellSignal("BykovTrendAlert",매도버퍼,현재바갯수,이전계산갯수,종가,스프레드); //---
여기서 매수버퍼와 매도버퍼는 매수 및 매도 신호를 저장하기 위한 지표 버퍼의 이름입니다. 지표 버퍼의 빈 값은 0 또는 EMPTY_VALUE로 설정해야 합니다.
지표 코드의 OnCalculate() 블록에서는 BuySignal() 및 SellSignal() 함수의 호출이 단 한 번만 사용될 것이라고 가정하고 있습니다.
이 지표는 최초로 MQL4에 구현되어 2007년 9월 28일에 코드 베이스에 게시되었습니다.

그림1. 차트에 표시된 BykovTrendAlert 지표
그림2. BykovTrendAlert 지표의 알림 생성

댓글 0