Sunday 18 March 2018

Forex 공장 ffcal


FFC - Forex Factory 캘린더 - MetaTrader 4 용 지표.
이것은 처음에 DerkWehler가 ForexFactory 포럼에 게시 한 인기있는 뉴스 표시기 FFCal의 수정 된 버전입니다. 사실, 필자의 요구에 맞게 코드를 수정했지만, 다른 사람들에게도 유용 할 수 있다는 것을 알았 기 때문에이 코드를 공유하기로 결정했습니다. 나는 지표를 다시 작성하여 원본의 "처음부터 빌드"를 거의 고려할 수 있습니다. 그러나, 그것은 같은 기술과 주 스타일을 공유합니다.
이 표시기는 차트에 Forex Factory Calendar에 나열된 5 가지 경제 이벤트를 보여주는 패널을 배치합니다. 높음, 보통 또는 낮음 영향, 연설, 휴일 또는 특정 키워드 필터로 이벤트를 필터링하거나 필터링 할 수 있습니다. 아래에 나열된 모든 수정 사항을 참조하십시오.
또한 iCustom () 함수를 사용하여 2 개의 버퍼에 액세스하여 EA 내에서 표시기를 호출 할 수 있습니다.
버퍼 (0)에는 가장 최근 이벤트까지의 분이 포함됩니다. 버퍼 (1)에는 가장 최근 이벤트 (낮음 = 1, 중간 = 2, 높음 = 3)에 대한 영향 값이 포함됩니다.
다음 두 가지 방법으로 버퍼를 호출 할 수 있습니다.
간단한 호출 : (기본값이 적용됩니다)
* 표시기에는 (이 단계에서) 백 테스트 기능이 없습니다.
영향도가 높음 = C'217,83,79 'Med Impact color = C'255,185,83'낮음 Impact color = C'91,192,222 'Holidays color = clrOrchid.
수정 :
Added : #property strict with MetaTrader 4 Build 600+ 이상 및 더 나은 코드 품질. 추가됨 : 이벤트 표시 이전 / 예상 영향 (색상 충돌). 추가됨 : 활성 차트와 관련된 이벤트 만 표시하는 옵션 (다른 매개 변수 무시) 추가됨 : 키워드 필터. 특정 한 단어 (예 : 'NFP')를 찾거나 무시하면 해당 단어가 포함되거나 포함되지 않은 모든 이벤트가 필터링됩니다. (대소 문자 구분) 올린 날짜 : 통화 강도 / 바 시간 왼쪽 / 스프레드 값을 표시하는 옵션. Added : 과거 이벤트 표시 시간을 분 단위로 제어하는 ​​옵션. Added : 4 개의 차트 코너에 패널 위치를 설정하는 옵션. 올린 날짜 : 이벤트 제목, 영향 및 이벤트 시간이 표시된 마우스를 가리 키는 도구 팁. Added : 패널 제목. 미리 알림으로 사용할 수 있습니다 :) 수정 됨 : 분 표시 대신 "날짜 / 시간 형식"으로 이벤트 표시 (도구 팁을 통해 남은 시간을 표시 할 수 있음) 수정 됨 : 예정된 이벤트의 세로선. 브로커 시간에 따라 "시간 오프셋"입력을 수정해야 할 수도 있습니다. 수정 됨 : 예정된 이벤트 분 및 영향을 유지하는 버퍼 (위의 예 참조) 수정 됨 : 수정 된 외부 입력 순서. 향상된 기능 : 기본 Windows URLDownloadToFileW () 함수로 DownLoadWebPageToFile () 함수를 대체했습니다. 향상된 기능 : XML 파일 다운로드 및 읽기와 관련된 코드를 함수에 배치하여 필요한 경우 호출 할 수 있도록했습니다. 향상된 기능 : "AllowUpdates", "UpdateHour"입력에 의해 설정된 FILE_MODIFY_DATE - OnTimer ()로 XML 파일을 업데이트하는 데 사용 된 "GlobalVariables"를 대체했습니다. 향상된 기능 : GMT 오프셋 시간. 이제 이벤트가 현지 시간으로 자동 표시됩니다. 향상된 기능 : 오른쪽 / 왼쪽으로 설정하면 패널 / 텍스트를 양쪽 정렬합니다. 향상된 기능 : 알림 기능, 이제는 팝업 알림 옆에 보낼 것입니다 : 소리 알림, 휴대 전화 및 알림에 대한 푸시 알림. (두 가지 별도의 경고) 향상된 기능 : 코드 품질. 이제 지표가 이전보다 훨씬 가볍고 빠릅니다. 고정 : 다양한 버그 수정, 일부 불필요한 / 사용되지 않는 코드 또는 변수 제거, 관련 함수 안에 일부 변수 배치.
*이 표시기를 사용하려면 MetaTrader 4 플랫폼 옵션에서 DLL 가져 오기를 켜야합니다.
* 코드에 버그 또는 기타 결함이있을 수 있으므로 버그 또는 제안 사항이나 더 나은 코드 사례가 있으면 알려 주시기 바랍니다.
* Forex Factory 웹 사이트에 따르면 모든 이벤트 시간은 대략적인 것이며 변경 될 수 있습니다.

뉴스 Forex Factory Indicator FFCal to EA.
나는 뉴스를 코드화하고 싶다. 그것은 내 뉴스 표시기를 따라 거래 할 것이다. 지시자는 나중에 개발자에게 보낼 것입니다.
전에 열기 : x 분.
나중에 열기 : y 분.
두 번째 이후 닫기 : z 초.
Ea는 Open Before & gt; 0으로 설정 한 경우 뉴스 릴리스 전에 2 분 (영업 중지 및 구매 중지) 주문을 x 분 전에 열 수 있습니다.
Ea는 Open After & gt; 0을 설정 한 경우 뉴스 릴리스 이후 x 분 대기중인 주문 2 개를 엽니 다.
에아는 다른 사람이 부딪 칠 때 oposire 주문을 닫을 것입니다.
내가 After Second> & gt; 0 인 경우, 대기중인 주문 2 개가 부딪치지 않으면 z 초가 닫힙니다.

여행 데이 트레이더.
2015 년 5 월 12 일 화요일
MT4 뉴스 캘린더 표시기.
8 개의 댓글 :
안녕하세요, 저는이 위대한 지표를 위해 당신에게 탱크를 말하고 싶습니다. 최고의 뉴스 / 캘린더, IMHO.
나는이 지표가 Forex Factory 포럼에서 자체 스레드를 가질 가치가 있다고 생각합니다. 다른 모든 지표와 완전히 다르므로 이제 완전히 다른 지표에 대한 스레드 내에서 찾아야합니다.
mt4에 대한 간단한 정보를 주셔서 감사합니다. 이 좋은 게시를 유지하십시오.
당신의 포스트는 항상 도움이됩니다. Forex 캘린더와 같은 이런 유형의 정보를 항상 찾고 있습니다. 우리와 공유해 주셔서 감사합니다.
위대한 게시자 주셔서 감사합니다. 정말 유익하고 도움이됩니다. 게시 해 주시기 바랍니다. 다시 한번 감사드립니다.
mq4를 컴파일 할 때 오류가 발생합니다.
그것은 나를 위해 잘 정리했다. 위의 컴파일 된 버전도 사용할 수 있으므로 대신 사용하십시오.
나는 이것을 MT4에 추가했으나 그것을 차트 위에 끌면 아무 일도 일어나지 않습니다. 나머지 표시기와 마찬가지로 황금색 대신 회색 구슬이 있습니다. 이 문제를 해결하는 방법에 대한 조언을받을 수 있습니까?
나를 위해 잘 작동합니다..ex4를 표시기 디렉터리 (.mql 아님)로 복사 한 다음 Navigator를 새로 고쳐야합니다.

외환 표시기.
2016 년 10 월 18 일 화요일.
FFC - Forex Factory 캘린더 - MetaTrader 4 용 지표.
// | 저작권 & # 169; 2016, DerkWehler, |
// | 마지막 수정, 2016 |
FFCal_v20 일자 : 07/07/2009, Copyright 2006 derkwehler.
MT4 빌드 600+의 새로운 릴리스와의 호환성을 확립하기위한 코딩 처리,
코드 실행이 빨라졌습니다.
(deVries 작업은 mql5 / en / job / new? prefered = deVries)
qFish - 이 지표를 향상시키기위한 노력의 일환으로 아낌없는 시간과 도움을 주셨습니다.
atstrader - 어떤 쌍 / 쌍의 뉴스가 표시되는지 제어하는 ​​깔끔한 새로운 옵션.
추가됨 : 이벤트 표시 이전 / 예측. (착색 된 충격)
추가됨 : 활성 차트와 관련된 이벤트 만 표시하는 옵션 (다른 매개 변수 무시)
추가됨 : 키워드 필터. 특정 한 단어 (예 : 'NFP')를 찾거나 무시하면 해당 단어가 포함되거나 포함되지 않은 모든 이벤트가 필터링됩니다. (대소 문자 구분)
추가됨 : 통화 강도 / 막대 시간 남음 / 스프레드 값을 표시하는 옵션.
Added : 과거 이벤트 표시 시간을 분 단위로 제어하는 ​​옵션.
Added : 4 개의 차트 코너에 패널 위치를 설정하는 옵션.
올린 날짜 : 이벤트 제목, 영향 및 이벤트 시간이 표시된 마우스를 가리 키는 도구 팁.
Added : 패널 제목. 당신은 알림 메모로 사용할 수 있습니다 :)
수정 됨 : 분 표시 대신 "날짜 / 시간 형식"으로 이벤트 표시 (툴팁에서 몇 분 남았음 표시 가능)
수정 됨 : 예정된 이벤트의 수직선. 브로커 시간에 따라 "시간 오프셋"입력을 수정해야 할 수도 있습니다.
수정 됨 : 예정된 이벤트 분과 영향을 보유하는 버퍼 (아래 예제 참조)
수정 됨 : 외부 입력 순서가 수정되었습니다.
향상된 기능 : 기본 Windows URLDownloadToFileW () 함수로 DownLoadWebPageToFile () 함수를 대체했습니다.
향상된 기능 : XML 파일 다운로드 및 읽기와 관련된 코드를 함수에 배치하여 필요한 경우 호출 할 수 있도록했습니다.
향상된 기능 : "AllowUpdates", "UpdateHour"입력에 의해 설정된 FILE_MODIFY_DATE - OnTimer ()로 XML 파일을 업데이트하는 데 사용 된 "GlobalVariables"를 대체했습니다.
향상된 기능 : GMT 오프셋 시간. 이제 이벤트가 현지 시간으로 자동 표시됩니다.
향상된 기능 : 오른쪽 / 왼쪽으로 설정하면 패널 / 텍스트를 양쪽 정렬합니다.
향상된 기능 : 알림 기능, 이제는 팝업 알림 옆에 보낼 것입니다 : 소리 알림, 푸시 알림 및 s. (2 개의 별도 경고)
향상된 기능 : 코드 품질, 이제 표시기가 이전보다 가볍고 빠릅니다.
고정 : 다양한 버그 수정, 일부 불필요한 / 사용되지 않는 코드 또는 변수 제거, 관련 함수 안에 일부 변수 배치.
- v 퍼 (0) 가장 최근 이벤트까지의 분을 포함합니다.
- 버퍼 (1) 가장 최근 이벤트의 영향 값을 포함합니다 (낮음 = 1, 중간 = 2, 높음 = 3).
참고 : 간단한 호출 방법을 사용하는 경우 기본값이 적용됩니다.
if (EventMinute == 30) 이벤트 30 분전.
if (EventImpact == 3) 영향 이벤트가 높습니다.
문자열 NULL, // 기호.
int 0, // 시간 프레임.
string "FFC", // 사용자 정의 표시기 컴파일 된 프로그램의 경로 / 이름.
bool true, // true / false : 활성 차트에만 적용됩니다.
bool true, // true / false : 큰 영향을줍니다.
bool true, // true / false : 중간 영향을 포함합니다.
bool true, // true / false : 영향을 적게 포함합니다.
bool true, // true / false : 말하기를 포함합니다.
bool false, // true / false : 공휴일을 포함합니다.
string "", // 키워드 찾기.
string "", // 키워드를 무시하십시오.
bool true, // true / false : 업데이트 허용.
int 4, // 매 시간마다 업데이트
int 0, // 버퍼 : (0) 분, (1) 영향.
#property copyright "Copyright # 2009-2016, traderathome, deVries, qFish, atstrader, awran5."
#property link "awran5yahoo"
#property description "새로운 기능을 갖춘 수정 된 FF 캘린더 표시기 버전"
#property version "1.00"
#property indicator_buffers 2.
// --- xml을 다운로드합니다.
int URLDownloadToFileW (int pCaller, string szURL, string szFileName, int dwReserved, int 콜백);
#define INAME "FFC"
#define COUNTRY 1.
#define IMPACT 4.
#define 예측 5.
#define PREVIOUS 6.
extern bool ReportActive = false; // 활성 차트 만보고합니다 (다른 입력 무시).
extern bool IncludeHigh = true; // 높은 것을 포함하십시오.
extern bool IncludeMedium = true; // 매체 포함.
extern bool IncludeLow = true; // 낮은 것을 포함하십시오.
extern bool IncludeSpeaks = true; // 포함 시키십시오.
extern bool IncludeHolidays = false; // 공휴일을 포함합니다.
extern string FindKeyword = ""; // 키워드 찾기.
extern string IgnoreKeyword = ""; // 키워드를 무시하십시오.
extern bool AllowUpdates = true; // 업데이트 허용.
extern int UpdateHour = 4; // 모든 시간 (단위 : 시간) 업데이트
입력 문자열 lb_1 = ""; // ------ & gt; 패널 설정.
extern bool ShowPanel = true; // 패널을 표시합니다.
extern bool AllowSubwindow = false; // 서브 윈도우에 패널을 표시합니다.
extern ENUM_BASE_CORNER Corner = 2; // 패널 쪽.
extern string PanelTitle = "Forex Calendar Forex Factory"; // Panel title.
extern color TitleColor = C'46,188,46 '; // 제목 색상.
extern bool ShowPanelBG = true; // 패널 배경을 표시합니다.
extern color Pbgc = C'25,25,25 '; // 패널 배경색.
extern color LowImpactColor = C'91,192,222 '; // 영향이 적은 색상.
extern color MediumImpactColor = C'255,185,83 '; // 보통 영향을주는 색상입니다.
extern color HighImpactColor = C'217,83,79 '; // 영향력이 큰 색상.
extern color HolidayColor = clrOrchid; // Holidays color.
extern color RemarksColor = clrGray; // 비고 color.
extern color PreviousColor = C'170,170,170 '; // 색상을 예측합니다.
extern color PositiveColor = C'46,188,46 '; // 긍정적 인 예측 색상.
extern color NegativeColor = clrTomato; // 네거티브 예측 색상.
extern bool ShowVerticalNews = true; // 수직선을 표시합니다.
extern int ChartTimeOffset = 0; // 차트 시간 오프셋 (시간)
extern int EventDisplay = 10; // 이벤트 숨기기 (분)
입력 문자열 lb_3 = ""; // ------ & gt; 기호 설정.
extern bool ReportForUSD = true; // USD로 신고합니다.
extern bool ReportForEUR = true; // EUR로 신고하십시오.
extern bool ReportForGBP = true; // GBP에 대해보고하십시오.
extern bool ReportForNZD = true; // NZD에 대해보고하십시오.
extern bool ReportForJPY = true; // JPY에 대해보고하십시오.
extern bool ReportForAUD = true; // AUD에 대해보고합니다.
extern bool ReportForCHF = true; // CHF에 대해보고하십시오.
extern bool ReportForCAD = true; // CAD에 대해보고합니다.
extern bool ReportForCNY = false; // CNY에 대해보고합니다.
입력 문자열 lb_5 = ""; // ------ & gt; 정보 설정.
extern bool ShowInfo = true; // 기호 정보 표시 (강도 / 막대 시간 / 스프레드)
extern color InfoColor = C'255,185,83 '; // 정보 색상.
extern int InfoFontSize = 8; // 정보 글꼴 크기.
입력 문자열 lb_7 = ""; // ------ & gt; 공고.
입력 문자열 lb_8 = ""; // * 참고 : 경고를 사용하지 않으려면 (-1)을 설정하십시오.
extern int Alert1Minutes = 30; // 첫 번째 경고 전의 분.
extern int Alert2Minutes = - 1; // 두 번째 경고 앞에 분.
extern bool PopupAlerts = false; // 팝업 알림.
extern bool SoundAlerts = true; // 소리 경고.
extern string AlertSoundFile = "news. wav"; // 사운드 파일 이름.
extern bool 경고 = 거짓; // 보내기.
extern bool NotificationAlerts = false; // 푸시 알림을 보냅니다.
// --- 변수 및 배열.
문자열 이벤트 [200] [7];
문자열 eTitle [10], eCountry [10], eImpact [10], eForecast [10], ePrevious [10];
int eMinutes [10];
datetime eTime [10];
// | 사용자 정의 인디케이터 초기화 기능 |
if (! TerminalInfoInteger (TERMINAL_DLLS_ALLOWED))
경고 (INAME + ": DLL 가져 오기를 허용하십시오!");
// --- 표시기 버퍼 매핑.
SetIndexBuffer (0, MinuteBuffer);
SetIndexBuffer (1, ImpactBuffer);
SetIndexStyle (0, DRAW_NONE);
SetIndexStyle (1, DRAW_NONE);
// --- 0 값이 표시되지 않습니다.
SetIndexEmptyValue (0, 0.0);
SetIndexEmptyValue (1, 0.0);
// --- 4/5 자릿수 중개인.
if (Digits % 2 == 1) Factor = 10;
TimeOfDay = (int) TimeLocal () % 86400;
자정 = TimeLocal () - TimeOfDay;
// --- xml 파일 이름을 설정합니다. ffcal_week_this (고정 된 이름)
// --- 파일의 존재를 확인합니다.
if (! FileIsExist (xmlFileName))
// --- 그냥 읽으면됩니다.
// --- 최종 수정 시간을 얻습니다.
xmlModifed = (datetime) FileGetInteger (xmlFileName, FILE_MODIFY_DATE, false);
//--- 업데이트 확인.
if (xmlModifed & lt; TimeLocal () - (UpdateHour * 3600))
인쇄 (INAME + ": XML 파일의 유효 기간이 만료되었습니다");
// --- 매 x 시간마다 오래된 xml 파일을 업데이트하는 타이머를 설정합니다.
그렇지 않으면 EventSetTimer (UpdateHour * 3600);
// --- 패널 모서리를 설정합니다.
case CORNER_LEFT_UPPER : x0 = 5; x1 = 165; x2 = 15; xf = 340; xp = 390; 앵커 = 0; 휴식;
케이스 CORNER_RIGHT_UPPER : x0 = 455; x1 = 265; x2 = 440; xf = 110; xp = 60; 앵커 = 0; 휴식;
케이스 CORNER_RIGHT_LOWER : x0 = 455; x1 = 265; x2 = 440; xf = 110; xp = 60; 앵커 = 2; 휴식;
케이스 CORNER_LEFT_LOWER : x0 = 5; x1 = 165; x2 = 15; xf = 340; xp = 390; 앵커 = 2; 휴식;
// | 사용자 정의 표시기 반복 기능 |
int OnCalculate (const int rates_total,
const int prev_calculated,
const datetime & amp; time [],
const double & amp; open [],
const double & high [],
const double & low [],
const double & close [],
const long & amp; tick_volume [],
const long & amp; volume [],
const int 및 spread [])
// --- 일부 수정자를 작성합니다.
// --- XML ​​태그 인 Vars를 정의합니다.
int BoEvent = 0, begin = 0, end = 0;
datetime EventTime = 0;
int EventMinute = 0;
// --- 통화를 두 부분으로 나눕니다.
string MainSymbol = StringSubstr (Symbol (), 0, 3);
문자열 SecondSymbol = StringSubstr (기호 (), 3, 3);
// --- XML ​​태그에서 데이터를 가져 오는 루프입니다.
BoEvent = StringFind (sData, "& lt; event & gt;", BoEvent);
if (BoEvent == - 1) break;
next = StringFind (sData, "& lt; / event & gt;", BoEvent);
if (next == - 1) break;
myEvent = StringSubstr (sData, BoEvent, next-BoEvent);
for (int i = 0; i <7; i ++)
다음 = StringFind (myEvent, sTags [i], 시작);
// ---이 이벤트 내에서 태그를 찾을 수없는 경우 태그가 누락되어 있어야합니다. 그냥 넘어가.
if (next == - 1) 계속;
// --- 우리는 sTag를 알았을 것입니다.
// --- 시작 태그를지나갑니다.
begin = 다음 + StringLen (sTags [i]);
끝 = StringFind (myEvent, eTags [i], 시작);
// --- 끝 태그의 시작을 찾고 시작과 끝 태그 사이에서 데이터를 가져옵니다.
이벤트 [인덱스] [i] = StringSubstr (myEvent, 시작, 끝 - 시작);
// --- 특정 통화 나 이벤트를 건너 뛸 지 여부를 정의하는 필터.
if (ReportActive & amp; MainSymbol! = 이벤트 [인덱스] [COUNTRY] & amp; SecondSymbol! = 이벤트 [인덱스] [COUNTRY])
if (! IncludeHigh & amp; Event [index] [IMPACT] == "High")
if (! IncludeMedium & amp; Event [index] [IMPACT] == "Medium")
if (! IncludeLow & amp; Event [index] [IMPACT] == "Low")
if (! IncludeSpeaks & amp; StringFind (Event [index] [TITLE], "Speaks")! = - 1)
if (! IncludeHolidays & amp; Event [index] [IMPACT] == "Holiday")
if (이벤트 [인덱스] [TIME] == "종일"||
if (StringFind (Event [index] [TITLE], FindKeyword) == - 1)
if (StringFind (Event [index] [TITLE], IgnoreKeyword)! = - 1)
// --- 때때로 태그를 삭제하는 것을 잊어 버렸습니다. :)
if (StringFind (Event [index] [TITLE], "& lt;! [CDATA [")! = - 1)
StringReplace (이벤트 [인덱스] [제목], "& lt;! [CDATA [", "");
if (StringFind (Event [index] [TITLE], "]] & gt;")! = - 1)
if (StringFind (Event [index] [TITLE], "]] & gt;")! = - 1)
if (StringFind (Event [index] [FORECAST], "& amp; lt")! = - 1)
StringReplace (이벤트 [인덱스] [예측], "& amp; lt;", "");
if (StringFind (Event [index] [PREVIOUS], "& amp; lt")! = - 1)
StringReplace (이벤트 [인덱스] [PREVIOUS], "& amp; lt;", "");
if (이벤트 [인덱스] [예측] == "") 이벤트 [인덱스] [예측] = "---";
if (이벤트 [인덱스] [PREVIOUS] == "") 이벤트 [인덱스] [PREVIOUS] = "---";
// --- 이벤트 시간을 MT4 시간으로 변환합니다.
EventTime = datetime (MakeDateTime (이벤트 [인덱스] [날짜], 이벤트 [인덱스] [시간]));
// --- 이벤트 전 몇 분을 계산합니다 (음수 일 수 있음).
EventMinute = int (EventTime - TimeGMT ()) / 60;
// --- 한 번만 경고하십시오.
if (EventMinute == 0 & amp; AlertTime! = EventTime)
// --- x 분 후에 이벤트를 제거합니다.
if (EventMinute + EventDisplay & lt; 0) 계속;
// 객체 및 경고를 그리는 데 사용하는 배열 / 버퍼를 설정하는 루프입니다.
for (int i = 0; i for (int n = i; n & lt; 10; n ++)
시간 [n] = datetime (MakeDateTime (이벤트 [i] [날짜], 이벤트 [i] [시간])) - TimeGMTOffset ();
eMinutes [n] = (int) MinuteBuffer [i];
// --- 이벤트가 있는지 확인하십시오.
if (ObjectFind (eTitle [n])! = 0) IsEvent = true;
// --- 그리기 / 경고 함수를 호출합니다.
if (IsEvent) DrawEvents ();
else 그리기 ( "더 이상의 이벤트 없음", "더 이상 이벤트 없음", 14, "Arial Black", 비고 색상, 2, 10, 30, "좀 쉬어 라!");
// --- 호출 정보 함수.
if (ShowInfo) SymbolInfo ();
// 다음 호출을 위해 prev_calculated의 반환 값.
인쇄 (INAME + ": XML 파일의 유효 기간이 만료되었습니다");
void OnDeinit (const int reason)
for (int i = ObjectsTotal (); i> = 0; i--)
문자열 이름 = ObjectName (i);
if (StringFind (name, INAME) == 0) ObjectDelete (name);
// --- 제거 된 경우에만 업데이트 타이머를 종료합니다.
if (이유 == 1) EventKillTimer ();
// | forexfactory에서 XML 파일 다운로드 |
// | Windows 7 이상에서 파일 경로는 다음과 같습니다.
string sUrl = "forexfactory / ff_calendar_thisweek. xml";
문자열 FilePath = StringConcatenate (TerminalInfoString (TERMINAL_DATA_PATH), "\\ MQL4 \\ 파일 \\", xml 파일 이름);
int FileGet = URLDownloadToFileW (NULL, sUrl, FilePath, 0, NULL);
if (FileGet == 0) PrintFormat (INAME + ": % s 파일을 성공적으로 다운로드했습니다!", xmlFileName);
// --- 오류를 확인하십시오.
그렇지 않으면 PrintFormat (INAME + ": % s 파일을 다운로드하지 못했습니다. 오류 코드 = % d", xmlFileName, GetLastError ());
// | XML 파일 읽기 |
int FileHandle = FileOpen (xmlFileName, FILE_BIN | FILE_READ);
if (FileHandle! = INVALID_HANDLE)
// --- 파일 크기를받습니다.
ulong size = FileSize (FileHandle);
// --- 파일에서 데이터를 읽습니다.
while (! FileIsEnding (FileHandle))
sData = FileReadString (FileHandle, (int) size);
// --- 오류를 확인하십시오.
그렇지 않으면 PrintFormat (INAME + ": % s 파일을 열지 못했습니다. 오류 코드 = % d", xmlFileName, GetLastError ());
// | 업데이트 XML 확인 |
// --- 토요일에 다운로드하지 마십시오.
if (TimeDayOfWeek (Midnight) == 6) return;
인쇄 (INAME + ": 업데이트 확인.");
인쇄 (INAME + ": 오래된 파일 삭제");
xmlModifed = (datetime) FileGetInteger (xmlFileName, FILE_MODIFY_DATE, false);
PrintFormat (INAME + ": 성공적으로 업데이트되었습니다. 마지막으로 수정되었습니다 : % s", (문자열) xmlModifed);
// | 차트에서 패널 및 이벤트 그리기 |
string FontName = "Arial";
int FontSize = 8;
// backbround / date / special 노트를 그립니다.
if (ShowPanel & amp; & amp; ShowPanelBG)
eToolTip = "이벤트에 마우스를 올려주세요!" ;
그리기 ( "BG", "gggg", 85, "Webdings", Pbgc, Corner, x0, 3, eToolTip);
TimeDay (자정), FontSize + 1, "Arial Black", TitleColor, Corner, x2, 95, "Today") Draw ( "날짜", DayToStr (자정) + " ;
그리기 ( "제목", PanelTitle, FontSize, FontName, TitleColor, 코너, x1, 95, "패널 제목");
Draw ( "Spreator", "------", 10, "Arial", RemarksColor, Corner, x2, 83, eToolTip);
// --- 객체 / 경고 함수를 그립니다.
for (int i = 0; i <5; i ++)
"+ (문자열) eMinutes [i] +"분 "+"\ nImpact : "+ eImpact [i]; eToolTip = eTitle [i] +"\ n 통화 : "+ eCountry [i]
if (ePrevious [i] & gt; eForecast [i]) ForecastColor = NegativeColor;
else if (ePrevious [i] // --- 과거 이벤트 색상.
// 날짜 / 시간 / 제목 / 통화.
그리기 ( "이벤트"+ (문자열) i,
TimeToStr (eTime [i], TIME_MINUTES) + "|"+
eTitle [i], FontSize, FontName, EventColor, Corner, x2, 70 - i * 15, eToolTip);
그리기 ( "이벤트 예보"+ (문자열) i, "["+ eForecast [i] + "]", FontSize, FontName, ForecastColor, Corner, xf, 70 - i * 15,
Drawing ( "Event Previous"+ (string) i, "["+ ePrevious [i] + "]", FontSize, FontName, PreviousColor, Corner, xp, 70 - i * 15,
DrawLine ( "이벤트 라인"+ (문자열) i, eTime [i] + (ChartTimeOffset * 3600), EventColor, eToolTip);
// --- 경고 메시지를 설정합니다.
문자열 AlertMessage = (문자열) eMinutes [i] + "[+ eTitle [i] +"] 분 "+ eCountry [i] +
if (Alert1Minutes! = - 1 & amp; eMinutes [i] == Alert1Minutes & amp;! FirstAlert)
setAlerts ( "First Alert!"+ AlertMessage);
if (Alert2Minutes! = - 1 & amp; eMinutes [i] == Alert2Minutes & amp;! SecondAlert)
setAlerts ( "두 번째 경고!"+ AlertMessage);
// --- 더 이상 데이터가 없으면 중단됩니다.
if (eTitle [i] == eTitle [i + 1])
그리기 (INAME + "더 이상 이벤트 없음", "더 이상 이벤트 없음", 8, "Arial", RemarksColor, Corner, x2, 50 - i * 15, "좀 쉬자!");
// | 서브 루틴 : 브로커가 심볼에 접두사를 추가 한 경우에도 ID 통화로 변환되며, |
// | 사용자가 외부 입력을 기반으로 표시 할 뉴스 결정 - 작성자 (수정 됨) |
bool IsCurrency (문자열 기호)
if (ReportForUSD & amp; symbol == "USD") return (true);
else if (ReportForGBP & amp; symbol == "GBP") return (true);
else if (ReportForEUR & amp; symbol == "EUR") return (true);
else if (ReportForCAD & amp; symbol == "CAD") return (true);
else if (ReportForAUD & amp; symbol == "AUD") return (true);
else if (ReportForCHF & amp; symbol == "CHF") return (true);
else if (ReportForJPY & amp; symbol == "JPY") return (true);
else if (ReportForNZD & amp; symbol == "NZD") return (true);
else if (ReportForCNY & amp; & amp; symbol == "CNY") return (true);
// | ff 시간 변환 & amp; date in yyyy. mm. dd hh : mm - deVries |
string MakeDateTime (문자열 strDate, 문자열 strTime)
int n1stDash = StringFind (strDate, "-");
int n2ndDash = StringFind (strDate, "-", n1stDash + 1);
string strDay = StringSubstr (strDate, 3, 2);
string strYear = StringSubstr (strDate, 6, 4);
string strHour = StringSubstr (strTime, 0, nTimeColonPos);
string strMinute = StringSubstr (strTime, nTimeColonPos + 1, 2);
string strAM_PM = StringSubstr (strTime, StringLen (strTime) - 2);
if ((strAM_PM == "pm"|| strAM_PM == "PM") & amp; nHour24! = 12) nHour24 + = 12;
if ((strAM_PM == "am"|| strAM_PM == "AM") & amp; nHour24 == 12) nHour24 = 0;
if (nHour24 & lt; 10) strHourPad = "0";
return (StringConcatenate (strYear, ".", strMonth, ".", strDay, "", strHourPad, nHour24, ":", strMinute));
// | 영향 설정 색상 - 작성자 |
color ImpactToColor (문자열 임팩트)
if (impact == "High") return (HighImpactColor);
else if (impact == "Medium") return (MediumImpactColor);
else if (impact == "Low") return (LowImpactColor);
else if (impact == "Holiday") return (HolidayColor);
그렇지 않으면 return (RemarksColor);
// | 번호에 미치는 영향 - 작성자 별 |
int ImpactToNumber (문자열 영향)
if (impact == "High") return (3);
else if (impact == "Medium") return (2);
else if (impact == "Low") return (1);
// | 요일을 텍스트로 변환 |
문자열 DayToStr (datetime 시간)
int ThisDay = TimeDayOfWeek (time);
case 0 : day = "Sun"; 휴식;
사례 1 : 일 = "월"; 휴식;
사례 2 : 일 = "화"; 휴식;
사례 3 : day = "Wed"; 휴식;
사례 4 : day = "Thu"; 휴식;
case 5 : day = "Fri"; 휴식;
case 6 : day = "Sat"; 휴식;
// | 달을 텍스트로 변환 |
int ThisMonth = Month ();
사례 1 : 월 = "월"; 휴식;
사례 2 : 월 = "2 월"; 휴식;
사례 3 : 월 = "Mar"; 휴식;
사례 4 : 달 = "4 월"; 휴식;
case 5 : month = "May"; 휴식;
case 6 : month = "Jun"; 휴식;
사례 7 : 월 = "7 월"; 휴식;
사례 8 : 월 = "8 월"; 휴식;
사례 9 : 월 = "9 월"; 휴식;
사례 10 : 월 = "10 월"; 휴식;
케이스 11 : 월 = "11 월"; 휴식;
케이스 12 : 월 = "12 월"; 휴식;
// | 양초 시간 왼쪽 / 퍼짐 |
문자열 TimeLeft = TimeToStr (Time [0] + Period () * 60 - TimeCurrent (), TIME_MINUTES | TIME_SECONDS);
string Spread = DoubleToStr (MarketInfo (Symbol (), MODE_SPREAD) / Factor, 1);
double DayClose = iClose (NULL, PERIOD_D1, 1);
두 배 강도 = ((입찰가 - 하루 종가) / 하루 종일) * 100;
문자열 Label = DoubleToStr (Strength, 2) + "%"+ "/"+ Spread + "/"+ TimeLeft;
ENUM_BASE_CORNER 코너 = 1;
if (Corner == 1) corner = 3;
if (Strength & gt; 0) arrow = "p";
문자열 tooltip = "힘 / 스프레드 / 양초 시간";
그리기 (INAME + ": info", 레이블, InfoFontSize, "Calibri", InfoColor, corner, 120, 20, tooltip);
그리기 (INAME + ": 정보 화살표", 화살표, InfoFontSize-2, "Wingdings 3", InfoColor, corner, 130, 18, tooltip);
// | 이벤트 텍스트 그리기 |
void 그리기 (문자열 이름, 문자열 레이블, int 크기, 문자열 글꼴, 색상 clr, ENUM_BASE_CORNER c, int x, int y, 문자열 툴팁)
if (AllowSubwindow & amp; WindowsTotal () & gt; 1) windows = 1;
ObjectCreate (name, OBJ_LABEL, windows, 0, 0);
ObjectSet (이름, OBJPROP_CORNER, c);
ObjectSet (이름, OBJPROP_XDISTANCE, x);
ObjectSet (이름, OBJPROP_YDISTANCE, y);
ObjectSet (이름, OBJPROP_ANCHOR, 앵커);
ObjectSetString (0, 이름, OBJPROP_TOOLTIP, 툴팁);
ObjectSet (이름, OBJPROP_SELECTABLE, 0);
// | 수직선 그리기 |
void DrawLine (문자열 이름, datetime 시간, 색상 clr, 문자열 툴팁)
ObjectCreate (이름, OBJ_VLINE, 0, 시간, 0);
ObjectSet (이름, OBJPROP_COLOR, clr);
ObjectSet (이름, OBJPROP_STYLE, 2);
ObjectSet (이름, OBJPROP_WIDTH, 0);
ObjectSetString (0, 이름, OBJPROP_TOOLTIP, 툴팁);
void setAlerts (캐릭터 라인 메세지)
if (PopupAlerts) 경고 (메시지);
if (SoundAlerts) PlaySound (AlertSoundFile);
if (NotificationAlerts) SendNotification (message);

No comments:

Post a Comment