MQL4에서 MQL5로 이전하기
들어가며
많은 개발자들이 MQL4 시절 많은 인디케이터와 거래 전략을 쌓아왔습니다. Metatrader 5에서 그것들을 쓰기 위해선 우선 MQL5로 이전되어야합니다. 모든걸 MQL5로 리팩토링하는 것엔 한계가 있습니다. 만약 번역 레퍼런스와 예시가 있다면 전환하는 것이 좀 더 쉬워지겠죠.
이 문서에서 MQL4에서 MQL5로 이전하는 제 가이드 및 제안들을 소개해드릴 것입니다.
1. 차트 기간
MQL5에서는 차트 기간 상수 또한 변경되었고, 몇몇 신규 기간 (M2, M3, M4, M6, M10, M12, H2, H3, H6, H8, H12) 도 추가되었습니다. MQL4 기간을 변경하려면 다음의 함수를 써야합니다:
ENUM_TIMEFRAMES TFMigrate(int tf) { switch(tf) { case 0: return(PERIOD_CURRENT); case 1: return(PERIOD_M1); case 5: return(PERIOD_M5); case 15: return(PERIOD_M15); case 30: return(PERIOD_M30); case 60: return(PERIOD_H1); case 240: return(PERIOD_H4); case 1440: return(PERIOD_D1); case 10080: return(PERIOD_W1); case 43200: return(PERIOD_MN1); case 2: return(PERIOD_M2); case 3: return(PERIOD_M3); case 4: return(PERIOD_M4); case 6: return(PERIOD_M6); case 10: return(PERIOD_M10); case 12: return(PERIOD_M12); case 16385: return(PERIOD_H1); case 16386: return(PERIOD_H2); case 16387: return(PERIOD_H3); case 16388: return(PERIOD_H4); case 16390: return(PERIOD_H6); case 16392: return(PERIOD_H8); case 16396: return(PERIOD_H12); case 16408: return(PERIOD_D1); case 32769: return(PERIOD_W1); case 49153: return(PERIOD_MN1); default: return(PERIOD_CURRENT); } }
미리 알아두셔야할 것이, MQL5에서는 차트 타임프레임 상수 (H1로부터)의 수치가 바의 분과 같지 않습니다.(예를 들어 MQL5에서는 PERIOD_H1=16385이지만, MQL4에서는 PERIOD_H1=60입니다). 만약 전환하려는 MQL4 프로그램에서 MQL4의 숫자 값 상수들을 사용하고 있었다면 이를 MQL5로 이전할 때 반드시 고려해야합니다.
차트에서 지정된 기간의 분량을 결정하려면 PeriodSeconds 함수에서 반환되는 값을 60으로 나눕니다.
2. 상수 선언하기
표준 MQL4 상수 중 몇개는 MQL5에는 존재하지 않기때문에 사전에 선언해야합니다:
//+------------------------------------------------------------------+ //| InitMQL4.mqh | //| Copyright DC2008 | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "keiji" #property copyright "DC2008" #property link "https://www.mql5.com" //--- Declaration of constants #define OP_BUY 0 //Buy #define OP_SELL 1 //Sell #define OP_BUYLIMIT 2 //Pending order of BUY LIMIT type #define OP_SELLLIMIT 3 //Pending order of SELL LIMIT type #define OP_BUYSTOP 4 //Pending order of BUY STOP type #define OP_SELLSTOP 5 //Pending order of SELL STOP type //--- #define MODE_OPEN 0 #define MODE_CLOSE 3 #define MODE_VOLUME 4 #define MODE_REAL_VOLUME 5 #define MODE_TRADES 0 #define MODE_HISTORY 1 #define SELECT_BY_POS 0 #define SELECT_BY_TICKET 1 //--- #define DOUBLE_VALUE 0 #define FLOAT_VALUE 1 #define LONG_VALUE INT_VALUE //--- #define CHART_BAR 0 #define CHART_CANDLE 1 //--- #define MODE_ASCEND 0 #define MODE_DESCEND 1 //--- #define MODE_LOW 1 #define MODE_HIGH 2 #define MODE_TIME 5 #define MODE_BID 9 #define MODE_ASK 10 #define MODE_POINT 11 #define MODE_DIGITS 12 #define MODE_SPREAD 13 #define MODE_STOPLEVEL 14 #define MODE_LOTSIZE 15 #define MODE_TICKVALUE 16 #define MODE_TICKSIZE 17 #define MODE_SWAPLONG 18 #define MODE_SWAPSHORT 19 #define MODE_STARTING 20 #define MODE_EXPIRATION 21 #define MODE_TRADEALLOWED 22 #define MODE_MINLOT 23 #define MODE_LOTSTEP 24 #define MODE_MAXLOT 25 #define MODE_SWAPTYPE 26 #define MODE_PROFITCALCMODE 27 #define MODE_MARGINCALCMODE 28 #define MODE_MARGININIT 29 #define MODE_MARGINMAINTENANCE 30 #define MODE_MARGINHEDGED 31 #define MODE_MARGINREQUIRED 32 #define MODE_FREEZELEVEL 33 //--- #define EMPTY -1기타: MQL4과 MQL5의 상수는 달라서 나중에 사용할 예정이라면 initMQ4.mqh 라는 다른 파일에 미리 선언해두는 것이 낫습니다.
3. 사전 정의 변수
MQL4 | MQL5 | 설명 |
---|---|---|
double Ask | MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); double Ask=last_tick.ask; | Ask 현재 심볼의 최신 매도호가 SymbolInfoTick |
int Bars | int Bars=Bars(_Symbol,_Period); | Bars 현재 차트의 바 갯수 Bars |
double Bid | MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); double Bid=last_tick.bid; | Bid 현재 심볼의 최신 매수호가. SymbolInfoTick |
double Close[] | double Close[]; int count; // number of elements to copy ArraySetAsSeries(Close,true); CopyClose(_Symbol,_Period,0,count,Close); | Close 현 차트의 각 바 내 종가를 저장하는 Series 어레이. CopyClose, ArraySetAsSeries |
int Digits | int Digits=_Digits; | Digits 현 심볼 가격의 숫자 자릿수 _Digits |
double High[] | double High[]; int count; // number of elements to copy ArraySetAsSeries(High,true); CopyHigh(_Symbol,_Period,0,count,High); | High 현 차트 내 각 바의 최고가를 담은 Series 어레이. CopyHigh, ArraySetAsSeries |
double Low[] | double Low[]; int count; // number of elements to copy ArraySetAsSeries(Low,true); CopyLow(_Symbol,_Period,0,count,Low); | Low 현 차트 내 각 바의 최저가를 담은 Series 어레이. CopyLow, ArraySetAsSeries |
double Open[] | double Open[]; int count; // number of elements to copy ArraySetAsSeries(Open,true); CopyOpen(_Symbol,_Period,0,count,Open); | Open 현 차트 내 각 바의 개방 가격을 담은 Series 어레이 CopyOpen, ArraySetAsSeries |
double Point | double Point=_Point; | Point 견적 통화의 현재 심볼 포인트 값. _Point |
datetime Time[] | datetime Time[]; int count; // number of elements to copy ArraySetAsSeries(Time,true); CopyTime(_Symbol,_Period,0,count,Time); | Time 현 차트 내 각 바의 개방 시각을 담은 Series 어레이 00:00 a.m. of 1 January, 1970를 기점으로 지난 시간이 초 단위의 datetime 값으로 저장됨. CopyTime, ArraySetAsSeries |
double Volume[] | long Volume[]; int count; // number of elements to copy ArraySetAsSeries(Volume,true); CopyTickVolume(_Symbol,_Period,0,count,Volume); | Volume 현 차트 내 각 바의 틱 볼륨을 담은 Series 어레이 CopyTickVolume, ArraySetAsSeries |
4. 계좌 정보
MQL4 | MQL5 | 설명 |
---|---|---|
double AccountBalance() | double AccountInfoDouble(ACCOUNT_BALANCE) | AccountBalance 현 계좌의 잔고량을 반환 (계좌 상에 있는 돈의 양). AccountInfoDouble |
double AccountCredit() | double AccountInfoDouble(ACCOUNT_CREDIT) | AccountCredit 현 계좌의 신용 값을 반환 AccountInfoDouble |
string AccountCompany() | string AccountInfoString(ACCOUNT_COMPANY) | AccountCompany 현 계좌가 등록된 브로커 회사명을 반환. AccountInfoString |
string AccountCurrency() | string AccountInfoString(ACCOUNT_CURRENCY) | AccountCurrency 현 계좌의 화폐명을 반환. AccountInfoString |
double AccountEquity() | double AccountInfoDouble(ACCOUNT_EQUITY) | AccountEquity 현 계좌의 자기 자본 값을 반환. 자기 자본 계산은 매매 서버 설정에 달려있습니다. AccountInfoDouble |
double AccountFreeMargin() | double AccountInfoDouble(ACCOUNT_FREEMARGIN) | AccountFreeMargin 현 계좌의 자유 마진 값을 반환. AccountInfoDouble |
double AccountFreeMarginCheck(string symbol, int cmd, double volume) | - | AccountFreeMarginCheck 현재 계좌에서 현재 가격으로 지정된 포지션이 열린 후에도 남아 있는 자유 마진을 반환. |
double AccountFreeMarginMode() | - | AccountFreeMarginMode 현재 계정에서 포지션을 열 수 있는 자유 마진의 계산 모드 |
int AccountLeverage() | int AccountInfoInteger(ACCOUNT_LEVERAGE) | AccountLeverage 현 계좌의 레버리지를 반환. AccountInfoInteger |
double AccountMargin() | double AccountInfoDouble(ACCOUNT_MARGIN) | AccountMargin 현 계좌의 마진 값을 반환. AccountInfoDouble |
string AccountName() | string AccountInfoString(ACCOUNT_NAME) | AccountName 현 계좌명을 반환. AccountInfoString |
int AccountNumber() | int AccountInfoInteger(ACCOUNT_LOGIN) | AccountNumber 현 계좌의 번호를 반환. AccountInfoInteger |
double AccountProfit() | double AccountInfoDouble(ACCOUNT_PROFIT) | AccountProfit 현 계좌의 수익을 반환. AccountInfoDouble |
string AccountServer() | string AccountInfoString(ACCOUNT_SERVER) | AccountServer 현재 연결된 서버명을 반환. AccountInfoString |
int AccountStopoutLevel() | double AccountInfoDouble(ACCOUNT_MARGIN_SO_SO) | AccountStopoutLevel Stop Out 레벨 값을 반환. AccountInfoDouble |
int AccountStopoutMode() | int AccountInfoInteger(ACCOUNT_MARGIN_SO_MODE) | AccountStopoutMode Stop Out 레벨의 계산 모드를 반환. AccountInfoInteger |
5. 어레이 함수
MQL4 | MQL5 | 설명 |
---|---|---|
int ArrayBsearch(double array[], double value, int count=WHOLE_ARRAY, int start=0, int direction=MODE_ASCEND) | int ArrayBsearch(double array[], double searched_value ) | ArrayBsearch 1차원 어레이 내에서 특정 값을 찾는 함수.. ArrayBsearch |
int ArrayCopy(object&dest[], object source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY) | int ArrayCopy(void dst_array[], void src_array[], int dst_start=0, int src_start=0, int cnt=WHOLE_ARRAY ) | ArrayCopy 어레이를 다른 어레이로 복사. 어레이들은 같은 타입이어야하며 double[], int[], datetime[], color[], 그리고 bool[]은 같은 타입 어레이로 복사가능. 복제된 요소의 수를 반환. ArrayCopy |
int ArrayCopyRates(double&dest_array[], string symbol=NULL, int timeframe=0) | - | ArrayCopyRates 현 차트 바들의 데이터를 RateInfo[][6] 타입 2차원 어레이로 복사하고 복사한 바의 수를 반환. 만약 실패시 -1 반환. |
int ArrayCopySeries(double&array[], int series_index, string symbol=NULL, int timeframe=0) | int ArrayCopySeriesMQL4(double &array[], int series_index, string symbol=NULL, int tf=0) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int count=Bars(symbol,timeframe); switch(series_index) { case MODE_OPEN: return(CopyOpen(symbol,timeframe,0,count,array)); case MODE_LOW: return(CopyLow(symbol,timeframe,0,count,array)); case MODE_HIGH: return(CopyHigh(symbol,timeframe,0,count,array)); case MODE_CLOSE: return(CopyClose(symbol,timeframe,0,count,array)); default: return(0); } return(0); } | ArrayCopySeries timeseries 어레이를 커스텀 어레이로 복사하고 복사된 요소의 수를 반환. CopyOpen, CopyLow, CopyHigh, CopyClose, Bars |
int ArrayDimension( object array[]) | - | ArrayDimension 다차원 어레이 랭크를 반환. |
bool ArrayGetAsSeries( object array[]) | bool ArrayGetAsSeries(void array) | ArrayGetAsSeries 만약 어레이가 타임시리즈 어레이로서 정리되었다면 (어레이 요소들이 끝에서 처음 순으로 인덱싱 되었다면) TRUE를 반환 아니라면 FALSE를 반환. ArrayGetAsSeries |
int ArrayInitialize(double &array[], double value) | int ArrayInitializeMQL4(double &array[], double value) { ArrayInitialize(array,value); return(ArraySize(array)); } | ArrayInitialize 숫자 어레이의 모든 요소를 같은 값으로 설정. 설정한 요소의 수를 반환. ArrayInitialize, ArraySize |
bool ArrayIsSeries( object array[]) | bool ArrayIsSeries(void array[]) | ArrayIsSeries 만약 체크한 어레이가 타임시리즈 어레이 (Time[],Open[],Close[],High[],Low[], Volume[])면 TRUE를, 아니면 FALSE를 반환. ArrayIsSeries |
int ArrayMaximum(double array[], int count=WHOLE_ARRAY, int start=0) | int ArrayMaximumMQL4(double &array[], int count=WHOLE_ARRAY, int start=0) { return(ArrayMaximum(array,start,count)); } | ArrayMaximum 최대값을 가진 요소를 탐색. 이 함수는 어레이 내 최고값 요소의 위치를 반환. ArrayMaximum |
int ArrayMinimum(double array[], int count=WHOLE_ARRAY, int start=0) | int ArrayMinimumMQL4(double &array[], int count=WHOLE_ARRAY, int start=0) { return(ArrayMinimum(array,start,count)); } | ArrayMinimum 최소값을 지닌 요소를 탐색. 어레이 내에서 최소값을 지닌 요소의 위치를 반환. ArrayMinimum |
int ArrayRange(object array[], int range_index) | int ArrayRange(void array[], int rank_index ) | ArrayRange 어레이의 지정된 차원의 요소 수를 반환. ArrayRange |
int ArrayResize(object &array[], int new_size) | int ArrayResize(void array[], int new_size, int allocated_size=0 ) | ArrayResize 첫 차원의 새 크기를 설정. ArrayResize |
bool ArraySetAsSeries(double &array[], bool set) | bool ArraySetAsSeries(void array[], bool set ) | ArraySetAsSeries 어레이 내 명시된 차원의 요소 수를 반환. 인덱스는 0기준이기에 차원의 규모는 최대 인덱스 +1. ArraySetAsSeries |
int ArraySize( object array[]) | int ArraySize(void array[]) | ArraySize 어레이 내에 저장된 요소의 수를 반환. ArraySize |
int ArraySort(double &array[], int count=WHOLE_ARRAY, int start=0, int sort_dir=MODE_ASCEND) | int ArraySortMQL4(double &array[], int count=WHOLE_ARRAY, int start=0, int sort_dir=MODE_ASCEND) { switch(sort_dir) { case MODE_ASCEND: ArraySetAsSeries(array,true); case MODE_DESCEND: ArraySetAsSeries(array,false); default: ArraySetAsSeries(array,true); } ArraySort(array); return(0); } | ArraySort 첫 차원을 기준으로 숫자 어레이를 정렬 Series 어레이는 ArraySort()로 정렬할 수 없음. ArraySort, ArraySetAsSeries |
6. 검사
MQL4 | MQL5 | 설명 |
---|---|---|
int GetLastError() | int GetLastError() | GetLastError 마지막으로 발생한 에러를 반환한 다음 마지막 에러 코드가 저장된 특수 last_error 변수의 값이 0으로 설정됨. GetLastError |
bool IsConnected() | bool TerminalInfoInteger(TERMINAL_CONNECTED) | IsConnected 클라이언트 터미널과 데이터 펌핑을 수행하는 서버 사이의 메인 연결 상태를 반환. 만약 서버 연결이 이루어졌다면 TRUE를, 아니라면 FALSE를 반환. TerminalInfoInteger |
bool IsDemo() | bool IsDemoMQL4() { if(AccountInfoInteger(ACCOUNT_TRADE_MODE)==ACCOUNT_TRADE_MODE_DEMO) return(true); else return(false); } | IsDemo 만약 expert가 데모 계정으로 실행되고 있다면 TRUE, 아닐시엔 FALSE 반환. AccountInfoInteger |
bool IsDllsAllowed() | bool TerminalInfoInteger(TERMINAL_DLLS_ALLOWED) | IsDllsAllowed Expert Advisor에서 DLL 호출이 허가되어있다면 TRUE, 아닐시엔 FALSE 반환. TerminalInfoInteger |
bool IsExpertEnabled() | bool AccountInfoInteger(ACCOUNT_TRADE_EXPERT) | IsExpertEnabled 만약 클라이언트 터미널에서 Expert Advisor 사용이 허가되어있다면 TRUE, 아닐 경우 FALSE 반환. AccountInfoInteger |
bool IsLibrariesAllowed() | bool MQLInfoInteger(MQL5_DLLS_ALLOWED) | IsLibrariesAllowed 만약 Expert Advisor가 라이브러리 함수를 호출할 수 있으면 TRUE, 아니라면 FALSE 반환. MQLInfoInteger |
bool IsOptimization() | bool MQLInfoInteger(MQL5_OPTIMIZATION) | IsOptimization 만약 Expert Advisor가 전략 테스터 최적화 모드로 실행되고 있으면 TRUE, 아닐시 FALSE 반환. MQLInfoInteger |
bool IsStopped() | bool IsStopped() | IsStopped 만약 프로그램 (Expert Advisor 혹은 script)이 작동을 중지하도록 명령받았으면 TRUE, 아니라면 FALSE 반환. IsStopped |
bool IsTesting() | bool MQLInfoInteger(MQL5_TESTING) | IsTesting Expert Advisor가 테스트 모드로 실행중이면 TRUE, 아니라면 FALSE 반환. MQLInfoInteger |
bool IsTradeAllowed() | bool MQLInfoInteger(MQL5_TRADE_ALLOWED) | IsTradeAllowed 만약 Expert Advisor 거래가 허락되었고 매매용 스레드가 아직 비어있다면 TRUE, 아니라면 FALSE 반환. MQLInfoInteger |
bool IsTradeContextBusy() | - | IsTradeContextBusy 매매용 스레드를 다른 Expert Advisor가 사용중이라면 TRUE 아니라면 FALSE 반환. |
bool IsVisualMode() | bool MQLInfoInteger(MQL5_VISUAL_MODE) | IsVisualMode 만약 Expert Advisor가 "Visual Mode" 버튼으로 체크되었다면 TRUE 아니라면 FALSE 반환. MQLInfoInteger |
int UninitializeReason() | int UninitializeReason() | UninitializeReason Expert Advisor, 커스텀 인디케이터, 스크립트 초기화 해제 사유 코드를 반환. UninitializeReason |
7. 클라이언트 터미널
MQL4 | MQL5 | 설명 |
---|---|---|
string TerminalCompany() | string TerminalInfoString(TERMINAL_COMPANY) | TerminalCompany 클라이언트 터미널을 소유한 회사명을 반환. TerminalInfoString |
string TerminalName() | string TerminalInfoString(TERMINAL_NAME) | TerminalName 클라이언트 터미널명을 반환. TerminalInfoString |
string TerminalPath() | string TerminalInfoString(TERMINAL_PATH) | TerminalPath 클라이언트 터미널이 실행된 폴더를 반환. TerminalInfoString |
8. 공용 함수
MQL4 | MQL5 | 설명 |
---|---|---|
void Alert(...) | void Alert(argument,...) | Alert 유저 설정 데이터를 담은 다이얼로그 박스 표시. Parameters can be of any type. Alert |
void Comment(...) | void Comment(argument,...) | Comment 유저가 설정한 코멘트를 파트 좌상단 구석에 출력하는 함수. Comment |
int GetTickCount() | uint GetTickCount() | GetTickCount GetTickCount() 함수는 시스템이 시작한 이후 흐른 시간을 밀리세컨드 단위로 획득함. GetTickCount |
double MarketInfo(string symbol, int type) | double MarketInfoMQL4(string symbol, int type) { switch(type) { case MODE_LOW: return(SymbolInfoDouble(symbol,SYMBOL_LASTLOW)); case MODE_HIGH: return(SymbolInfoDouble(symbol,SYMBOL_LASTHIGH)); case MODE_TIME: return(SymbolInfoInteger(symbol,SYMBOL_TIME)); case MODE_BID: return(Bid); case MODE_ASK: return(Ask); case MODE_POINT: return(SymbolInfoDouble(symbol,SYMBOL_POINT)); case MODE_DIGITS: return(SymbolInfoInteger(symbol,SYMBOL_DIGITS)); case MODE_SPREAD: return(SymbolInfoInteger(symbol,SYMBOL_SPREAD)); case MODE_STOPLEVEL: return(SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL)); case MODE_LOTSIZE: return(SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE)); case MODE_TICKVALUE: return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE)); case MODE_TICKSIZE: return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE)); case MODE_SWAPLONG: return(SymbolInfoDouble(symbol,SYMBOL_SWAP_LONG)); case MODE_SWAPSHORT: return(SymbolInfoDouble(symbol,SYMBOL_SWAP_SHORT)); case MODE_STARTING: return(0); case MODE_EXPIRATION: return(0); case MODE_TRADEALLOWED: return(0); case MODE_MINLOT: return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN)); case MODE_LOTSTEP: return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); case MODE_MAXLOT: return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX)); case MODE_SWAPTYPE: return(SymbolInfoInteger(symbol,SYMBOL_SWAP_MODE)); case MODE_PROFITCALCMODE: return(SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE)); case MODE_MARGINCALCMODE: return(0); case MODE_MARGININIT: return(0); case MODE_MARGINMAINTENANCE: return(0); case MODE_MARGINHEDGED: return(0); case MODE_MARGINREQUIRED: return(0); case MODE_FREEZELEVEL: return(SymbolInfoInteger(symbol,SYMBOL_TRADE_FREEZE_LEVEL)); default: return(0); } return(0); } | MarketInfo Market Watch 창에 실린 유가증권들에 대한 다양한 정보를 반환. SymbolInfoInteger, SymbolInfoDouble, Bid, Ask |
int MessageBox(string text=NULL, string caption=NULL, int flags=EMPTY) | int MessageBox(string text, string caption=NULL, int flags=0) | MessageBox MessageBox 함수는 메세지 상자를 생성하고, 표시하며, 관리함. MessageBox |
void PlaySound(string filename) | bool PlaySound(string filename) | PlaySound 소리 파일을 재생함. PlaySound |
void Print(...) | void Print(argument,...) | Print expert 로그에 메세지를 출력함. |
bool SendFTP(string filename, string ftp_path=NULL) | bool SendFTP(string filename, string ftp_path=NULL) | SendFTP Tools->Options->Publisher에 설정된 FTP 서버로 파일을 보냄. 만약 실패할 경우 FALSE를 반환. SendFTP |
void SendMail(string subject, string some_text) | bool SendMail(string subject, string some_text) | SendMail Tools->Options->EMail 탭에 설정된 이메일로 메세지를 보냄. SendMail |
void Sleep(int milliseconds) | void Sleep(int milliseconds) | Sleep Sleep() 함수는 지정된 구간 내 현 expert의 실행을 멈춤. Sleep |
9. 전환 함수
MQL4 | MQL5 | 설명 |
---|---|---|
string CharToStr(int char_code) | string CharToString(int char_code) | CharToStr 심볼 코드를 1글자 string으로 전환. CharToString |
string DoubleToStr(double value, int digits) | string DoubleToString(double value, int digits=8) | DoubleToStr 특정 숫자로 된 문자 string을 특정 자릿수까지 표현하여 반환. DoubleToString |
double NormalizeDouble(double value, int digits) | double NormalizeDouble(double value, int digits) | NormalizeDouble 소숫점 값을 특정 자릿수까지 반올림. 노멀라이즈된 double 타입 값을 반환. NormalizeDouble |
double StrToDouble(string value) | double StringToDouble(string value) | StrToDouble 숫자를 표현한 string을 double 타입으로 변환 (소숫점은 2배정밀도 포맷). StringToDouble |
int StrToInteger(string value) | long StringToInteger(string value) | StrToInteger 숫자를 표현한 string을 해당 값의 int(integer) 타입으로 변환. StringToInteger |
datetime StrToTime(string value) | datetime StringToTime(string value) | StrToTime "yyyy.mm.dd hh:mi" 포맷 string을 datetime 타입으로 변환 (1970년 1월 1일 이래 지난 초 수). StringToTime |
string TimeToStr(datetime value, int mode=TIME_DATE|TIME_MINUTES) | string TimeToString(datetime value, int mode=TIME_DATE|TIME_MINUTES) | TimeToStr 1970년 1월 1일 이래 지난 시간을 초로 나타낸 것을 "yyyy.mm.dd hh:mi" 포맷 string으로 변경. TimeToString |
10. 커스텀 인디케이터
MQL4 | MQL5 | 설명 |
---|---|---|
void IndicatorBuffers(int count) | - | IndicatorBuffers 커스텀 인디케이터 계산을 위해 버퍼용 메모리를 할당 |
int IndicatorCounted() | int IndicatorCountedMQL4() { if(prev_calculated>0) return(prev_calculated-1); if(prev_calculated==0) return(0); return(0); } | IndicatorCounted 인디케이터 실행 이후 변경되지 않은 바의 수를 반환하는 함수. OnCalculate |
void IndicatorDigits(int digits) | bool IndicatorSetInteger(INDICATOR_DIGITS,digits) | IndicatorDigits 인디케이터 값을 시각화하기위한 소숫점 자리 설정 (0 이하 소숫점 자릿수). IndicatorSetInteger |
void IndicatorShortName(string name) | bool IndicatorSetString(INDICATOR_SHORTNAME,name) | IndicatorShortName DataWindow와 차트 보조창에 보일 커스텀 인디케이터의 "짧은 버전" 이름을 정함. IndicatorSetString |
void SetIndexArrow(int index, int code) | bool PlotIndexSetInteger(index,PLOT_ARROW,code) | SetIndexArrow DRAW_ARROW 타입 인디케이터 라인을 위한 화살표 심볼 설정. PlotIndexSetInteger |
bool SetIndexBuffer(int index, double array[]) | bool SetIndexBuffer(index,array,INDICATOR_DATA) | SetIndexBuffer 글로벌 레벨에서 선언 된 어레이 변수를 커스텀 인디케이터에서 사전정의한 버퍼에 바인드. SetIndexBuffer |
void SetIndexDrawBegin(int index, int begin) | bool PlotIndexSetInteger(index,PLOT_DRAW_BEGIN,begin) | SetIndexDrawBegin 인디케이터 라인 그림을 시작해야하는 바 번호 (데이터 시작으로부터)를 설정. PlotIndexSetInteger |
void SetIndexEmptyValue(int index, double value) | bool PlotIndexSetDouble(index,PLOT_EMPTY_VALUE,value) | SetIndexEmptyValue 그림 선의 빈 값을 설정. PlotIndexSetDouble |
void SetIndexLabel(int index, string text) | bool PlotIndexSetString(index,PLOT_LABEL,text) | SetIndexLabel DataWindow와 툴팁에 보이는 그림 선 설명을 설정. PlotIndexSetString |
void SetIndexShift(int index, int shift) | bool PlotIndexSetInteger(index,PLOT_SHIFT,shift) | SetIndexShift 그림 선을 위한 여백 설정. PlotIndexSetInteger |
void SetIndexStyle(int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE) | void SetIndexStyleMQL4(int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE) { if(width>-1) PlotIndexSetInteger(index,PLOT_LINE_WIDTH,width); if(clr!=CLR_NONE) PlotIndexSetInteger(index,PLOT_LINE_COLOR,clr); switch(type) { case 0: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_LINE); case 1: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_SECTION); case 2: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_HISTOGRAM); case 3: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_ARROW); case 4: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_ZIGZAG); case 12: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_NONE); default: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_LINE); } switch(style) { case 0: PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_SOLID); case 1: PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASH); case 2: PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DOT); case 3: PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASHDOT); case 4: PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASHDOTDOT); default: return; } | SetIndexStyle 주어진 인디케이터라인의 새 타입, 스타일, 너비, 그리고 색상 설정. PlotIndexSetInteger |
void SetLevelStyle(int draw_style, int line_width, color clr=CLR_NONE) | void SetLevelStyleMQL4(int draw_style, int line_width, color clr=CLR_NONE) { IndicatorSetInteger(INDICATOR_LEVELWIDTH,line_width); if(clr!=CLR_NONE) IndicatorSetInteger(INDICATOR_LEVELCOLOR,clr); switch(draw_style) { case 0: IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_SOLID); case 1: IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DASH); case 2: IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DOT); case 3: IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DASHDOT); case 4: IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DASHDOTDOT); default: return; } } | SetLevelStyle 별도의 창에 표기할 인디케이터의 새 스타일, 너비, 수평 레벨의 색상 설정 IndicatorSetInteger |
void SetLevelValue(int level, double value) | bool IndicatorSetDouble(INDICATOR_LEVELVALUE,level,value) | SetLevelValue 별도의 창에 표기할 인디케이터의 수평 레벨 값을 설정. IndicatorSetDouble |
11. 시각 및 일자 함수
MQL4 | MQL5 | 설명 |
---|---|---|
int Day() | int DayMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.day); } | Day 현재 날짜(마지막으로 알려진 서버 시간의 일)를 반환. TimeCurrent, MqlDateTime |
int DayOfWeek() | int DayOfWeekMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.day_of_week); } | DayOfWeek 마지막으로 알려진 서버 타임의 이번 주 내 현재 요일을 0 기준으로 반환(0-일요일,1,2,3,4,5,6) . TimeCurrent, MqlDateTime |
int DayOfYear() | int DayOfYearMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.day_of_year); } | DayOfYear 일년 중 오늘의 날짜를 숫자로 반환 (1은 1월 1일,..,365(6) 은 12월 31일) 예시) 마지막으로 알려진 서버 타임 TimeCurrent, MqlDateTime |
int Hour() | int HourMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.hour); } | Hour 프로그램 시작 시점에 알려진 마지막 서버 시간의 시간(0,1,2,..23)을 반환(이 값은 프로그램 실행 시간 내에 변경되지 않음).. TimeCurrent, MqlDateTime |
int Minute() | int MinuteMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.min); } | Minute 프로그램 시작 시점에 알려진 마지막 서버 시간의 분(0,1,2,..59)을 반환(이 값은 프로그램 실행 시간 내에 변경되지 않음). TimeCurrent, MqlDateTime |
int Month() | int MonthMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.mon); } | Month 현재 달을 숫자로 반환 (1-1월,2,3,4,5,6,7,8,9,10,11,12), 예시) 마지막으로 알려진 서버 시간의 달. TimeCurrent, MqlDateTime |
int Seconds() | int SecondsMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.sec); } | Seconds 프로그램 시작 시점에 알려진 마지막 서버 시간부터 프로그램 시작 시간 사이의 초를 반환(이 값은 프로그램 실행 시간 내에 변경되지 않음).. TimeCurrent, MqlDateTime |
datetime TimeCurrent() | datetime TimeCurrent() | TimeCurrent 마지막으로 알려진 서버 시간(마지막 견적이 들어온 시간)을 1970년 1월 1일부터 해당 시간까지 지난 초의 수로 반환. TimeCurrent |
int TimeDay(datetime date) | int TimeDayMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.day); } | TimeDay 특정 일자의 일(1-31)을 반환. TimeToStruct, MqlDateTime |
int TimeDayOfWeek(datetime date) | int TimeDayOfWeekMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.day_of_week); } | TimeDayOfWeek 특정 일자의 요일을 0 기준으로 (0-일요일, 1,2,3,4,5,6)으로 반환. TimeToStruct, MqlDateTime |
int TimeDayOfYear(datetime date) | int TimeDayOfYearMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.day_of_year); } | TimeDayOfYear 특정 일자의 연 중 일 (1은 1월 1일,...,365(6)은 12월 31일)으로 반환. TimeToStruct, MqlDateTime |
int TimeHour(datetime time) | int TimeHourMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.hour); } | TimeHour 특정 일자의 시간 부분을 반환. TimeToStruct, MqlDateTime |
datetime TimeLocal() | datetime TimeLocal() | TimeLocal 1970년 1월 1일 00:00로부터 로컬 기기의 시간까지의 시간을 초로 반환. TimeLocal |
int TimeMinute(datetime time) | int TimeMinuteMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.min); } | TimeMinute 특정 일자의 분 부분을 반환. TimeToStruct, MqlDateTime |
int TimeMonth(datetime time) | int TimeMonthMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.mon); } | TimeMonth 특정 일자의 달 부분을 반환. TimeToStruct, MqlDateTime |
int TimeSeconds(datetime time) | int TimeSecondsMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.sec); } | TimeSeconds 특정 일자가 분의 시작으로부터 몇 초 지났는지 반환. TimeToStruct, MqlDateTime |
int TimeYear(datetime time) | int TimeYearMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.year); } | TimeYear 특정 일자의 연도 부분 반환. 반환 가능 범주는 1970 에서 2037. TimeToStruct, MqlDateTime |
int Year() | int YearMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.year); } | Year 현재 연도를 반환, 예시) 마지막으로 알려진 서버 시간의 연도 TimeCurrent, MqlDateTime |
12. 파일 함수
MQL4 | MQL5 | 설명 |
---|---|---|
void FileClose(int handle) | void FileClose(int file_handle) | FileClose FileOpen() 함수로 열린 파일을 닫기. FileClose |
void FileDelete(string filename) | bool FileDelete(string file_name int common_flag=0) | FileDelete 특정 파일 네임 삭제. FileDelete |
void FileFlush(int handle) | void FileFlush(int file_handle) | FileFlush 파일 버퍼 내에 쌓인 데이터를 제거. FileFlush |
bool FileIsEnding(int handle) | bool FileIsEnding(int file_handle) | FileIsEnding 파일 포인터가 파일 끝에 있다면 논리적 TRUE를, 아니라면 FALSE를 반환. FileIsEnding |
bool FileIsLineEnding(int handle) | bool FileIsLineEnding(int file_handle) | FileIsLineEnding CSV 파일에서 만약 파일 포인터가 파일 끝에 있다면 논리적 TRUE를, 아니라면 FALSE를 반환. FileIsLineEnding |
int FileOpen(string filename, int mode, int delimiter=';') | int FileOpen(string ile_name, int pen_flags, short delimiter='\t' uint codepage=CP_ACP) | FileOpen 파일을 입력 그리고/혹은 출력용으로 열기. 열린 파일의 핸들이나 -1(함수 실패시)을 반환. FileOpen |
int FileOpenHistory(string filename, int mode, int delimiter=';') | - | FileOpenHistory 현재 버전 디렉토리(terminal_directory\history\server_name) 혹은 그 하위폴더에서 파일을 열기. 연 파일에 대한 파일 핸들 반환. 만약 함수가 실패하면 -1을 반환. |
int FileReadArray(int handle, object &array[], int start, int count) | uint FileReadArray(int file_handle, void array[], int start_item=0, int items_count=WHOLE_ARRAY) | FileReadArray 바이너리에서 정해진 수의 요소들을 읽어서 어레이로 전달. FileReadArray |
double FileReadDouble(int handle, int size=DOUBLE_VALUE) | double FileReadDoubleMQL4(int handle, int size=DOUBLE_VALUE) { return(FileReadDouble(handle)); } | FileReadDouble 현재 바이너리 파일 위치에서 부동 소수점이 포함된 이중 정밀도 숫자를 읽습니다. FileReadDouble |
int FileReadInteger(int handle, int size=LONG_VALUE) | int FileReadInteger(int file_handle, int size=INT_VALUE) | FileReadInteger 현재 바이너리 파일 포지션에서 integer를 읽음. FileReadInteger |
double FileReadNumber(int handle) | double FileReadNumber(int file_handle) | FileReadNumber 현재 파일 포지션에서 구분자 전까지의 숫자를 읽음. Only for CSV files. FileReadNumber |
string FileReadString(int handle, int length=0) | string FileReadString(int file_handle, int size=-1) | FileReadString Функция читает строку с текущей позиции файла. FileReadString |
bool FileSeek(int handle, int offset, int origin) | bool FileSeekMQL4(long handle, int offset, ENUM_FILE_POSITION origin) { FileSeek(handle,offset,origin); return(true); } | FileSeek 파일 포인터를 시작부터 끝 또는 현재 파일 위치까지 오프셋(바이트)인 새 위치로 이동. FileSeek |
int FileSize(int handle) | ulong FileSize(int file_handle) | FileSize 파일 사이즈를 바이트 단위로 반환. FileSize |
int FileTell(int handle) | ulong FileTell(int file_handle) | FileTell 파일 포인터의 현재 위치를 반환 FileTell |
int FileWrite(int handle,...) | uint FileWrite(int file_handle,...) | FileWrite 데이터를 CSV로 쓰는 파일, 구분자는 자동으로 삽입됨. FileWrite |
int FileWriteArray(int handle, object array[], int start, int count) | int FileWriteArray(int file_handle, void array[], int start_item=0, int items_count=WHOLE_ARRAY) | FileWriteArray 어레이를 바이너리 파일로 쓰는 함수. FileWriteArray |
int FileWriteDouble(int handle, double value, int size=DOUBLE_VALUE) | uint FileWriteDouble(int file_handle, double dvalue) | FileWriteDouble 소숫점이 있는 double 값을 바이너리 파일에 쓰는 함수. FileWriteDouble |
int FileWriteInteger(int handle, int value, int size=LONG_VALUE) | uint FileWriteInteger(int file_handle, int ivalue, int size=INT_VALUE) | FileWriteInteger integer 값을 바이너리 파일에 쓰는 함수. FileWriteInteger |
int FileWriteString(int handle, string value, int size) | uint FileWriteString(int file_handle, string svalue, int size=-1) | FileWriteString string 파일을 현 파일 위치의 바이너리 파일에 쓰는 함수. FileWriteString |
13. 글로벌 변수
MQL4 | MQL5 | 설명 |
---|---|---|
bool GlobalVariableCheck(string name) | bool GlobalVariableCheck(string name) | GlobalVariableCheck 해당 글로벌 변수가 존재하면 TRUE, 아니면 FALSE 반환. GlobalVariableCheck |
bool GlobalVariableDel(string name) | bool GlobalVariableDel(string name) | GlobalVariableDel 해당 글로벌 변수를 삭제. GlobalVariableDel |
double GlobalVariableGet(string name) | double GlobalVariableGet(string name) | GlobalVariableGet 해당 글로벌 변수가 존재하면 해당 변수의 값을, 에러 발생시 0을 반환. GlobalVariableGet |
string GlobalVariableName(int index) | string GlobalVariableName(int index) | GlobalVariableName 인덱스를 받아 글로벌 변수 목록에서 해당 변수의 이름을 반환하는 함수. GlobalVariableName |
datetime GlobalVariableSet(string name, double value) | datetime GlobalVariableSet(string name, double value) | GlobalVariableSet 해당 글로벌 변수의 새 값을 설정. 만약 해당 변수가 존재하지않을 경우 시스템이 새로운 글로벌 변수를 생성함. GlobalVariableSet |
bool GlobalVariableSetOnCondition(string name, double value, double check_value) | bool GlobalVariableSetOnCondition(string name, double value, double check_value) | GlobalVariableSetOnCondition 만약 해당 글로벌 변수의 현재 값이 3번째 패러미터인 check_value와 같을 경우 새 값을 설정. GlobalVariableSetOnCondition |
int GlobalVariablesDeleteAll(string prefix_name=NULL) | int GlobalVariablesDeleteAll(string prefix_name=NULL datetime limit_data=0) | GlobalVariablesDeleteAll 글로벌 변수들을 삭제. GlobalVariablesDeleteAll |
int GlobalVariablesTotal() | int GlobalVariablesTotal() | GlobalVariablesTotal 글로벌 변수들의 총 수를 반환. GlobalVariablesTotal |
14. 수학 함수
MQL4 | MQL5 | 설명 |
---|---|---|
double MathAbs(double value) | double MathAbs(double value) | MathAbs 주어진 숫자의 절대값 (modulus)를 반환. MathAbs |
double MathArccos(double x) | double MathArccos(double val) | MathArccos MathArccos 함수는 x의 0에서 파이 (라디안으로) 범위 내 아크코사인 값을 반환 . MathArccos |
double MathArcsin(double x) | double MathArcsin(double val) | MathArcsin MathArcsin 함수는 x의 -파이/2에서 파이/2 라디안 내 아크사인 값 반환. MathArcsin |
double MathArctan(double x) | double MathArctan(double value) | MathArctan MathArctan은 x의 아크탄젠트 값을 반환. MathArctan |
double MathCeil(double x) | double MathCeil(double val) | MathCeil MathCeil 함수는 x와 같거나 넘는 가장 작은 정수 값을 반환합니다. MathCeil |
double MathCos(double value) | double MathCos(double value) | MathCos 정해진 각에서의 코사인 값을 반환함. MathCos |
double MathExp(double d) | double MathExp(double value) | MathExp e의 d승 값을 반환. MathExp |
double MathFloor(double x) | double MathFloor(double val) | MathFloor MathFloor 함수는 x와 같거나 더 작은 정수중 가장 큰 수를 반환. MathFloor |
double MathLog(double x) | double MathLog(double val) | MathLog MathLog 함수는 만약 획득가능할 경우 x의 자연로그 값을 반환. MathLog |
double MathMax(double value1, double value2) | double MathMax(double value1, double value2) | MathMax 두 숫자 중 큰 값을 반환. MathMax |
double MathMin(double value1, double value2) | double MathMin(double value1, double value2) | MathMin 두 숫자 중 작은 값을 반환. MathMin |
double MathMod(double value1, double value2) | double MathMod(double value1, double value2) | MathMod 두 숫자의 나눗셈에서 나머지를 반환하는 함수. MathMod |
double MathPow(double base, double exponent) | double MathPow(double base, double exponent) | MathPow 주어진 수의 승 값을 반환. MathPow |
int MathRand() | int MathRand() | MathRand MathRand 함수는 0 에서 32767 사이의 거짓랜덤 integer를 반환. MathRand |
double MathRound(double value) | double MathRound(double value) | MathRound 정해진 숫자만큼 반올림한 값을 반환 . MathRound |
double MathSin(double value) | double MathSin(double value) | MathSin 지정된 각의 사인 값을 반환. MathSin |
double MathSqrt(double x) | double MathSqrt(double value) | MathSqrt MathSqrt 함수는 x의 루트 값을 반환. MathSqrt |
void MathSrand(int seed) | void MathSrand(int seed) | MathSrand MathSrand() 함수는 거짓랜덤 integers의 series를 생성하는 시작점을 설정함. MathSrand |
double MathTan(double x) | double MathTan(double rad) | MathTan MathTan은 x의 탄젠트 값을 반환. MathTan |
15. 객체 함수
MQL4 | MQL5 | 설명 |
---|---|---|
bool ObjectCreate(string name, int type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0) | bool ObjectCreateMQL4(string name, ENUM_OBJECT type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0) { return(ObjectCreate(0,name,type,window, time1,price1,time2,price2,time3,price3)); } | ObjectCreate 정해진 이름, 타입, 그리고 창 내의 지정된 좌표로 객체 생성. ObjectCreate |
bool ObjectDelete(string name) | bool ObjectDeleteMQL4(string name) { return(ObjectDelete(0,name)); } | ObjectDelete 특정 이름을 가진 객체 삭제. ObjectDelete |
string ObjectDescription(string name) | string ObjectDescriptionMQL4(string name) { return(ObjectGetString(0,name,OBJPROP_TEXT)); } | ObjectDescription 객체 설명 반환. ObjectGetString |
int ObjectFind(string name) | int ObjectFindMQL4(string name) { return(ObjectFind(0,name)); } | ObjectFind 특정 이름을 가진 객체 탐색. ObjectFind |
double ObjectGet(string name, int prop_id) | double ObjectGetMQL4(string name, int index) { switch(index) { case OBJPROP_TIME1: return(ObjectGetInteger(0,name,OBJPROP_TIME)); case OBJPROP_PRICE1: return(ObjectGetDouble(0,name,OBJPROP_PRICE)); case OBJPROP_TIME2: return(ObjectGetInteger(0,name,OBJPROP_TIME,1)); case OBJPROP_PRICE2: return(ObjectGetDouble(0,name,OBJPROP_PRICE,1)); case OBJPROP_TIME3: return(ObjectGetInteger(0,name,OBJPROP_TIME,2)); case OBJPROP_PRICE3: return(ObjectGetDouble(0,name,OBJPROP_PRICE,2)); case OBJPROP_COLOR: return(ObjectGetInteger(0,name,OBJPROP_COLOR)); case OBJPROP_STYLE: return(ObjectGetInteger(0,name,OBJPROP_STYLE)); case OBJPROP_WIDTH: return(ObjectGetInteger(0,name,OBJPROP_WIDTH)); case OBJPROP_BACK: return(ObjectGetInteger(0,name,OBJPROP_WIDTH)); case OBJPROP_RAY: return(ObjectGetInteger(0,name,OBJPROP_RAY_RIGHT)); case OBJPROP_ELLIPSE: return(ObjectGetInteger(0,name,OBJPROP_ELLIPSE)); case OBJPROP_SCALE: return(ObjectGetDouble(0,name,OBJPROP_SCALE)); case OBJPROP_ANGLE: return(ObjectGetDouble(0,name,OBJPROP_ANGLE)); case OBJPROP_ARROWCODE: return(ObjectGetInteger(0,name,OBJPROP_ARROWCODE)); case OBJPROP_TIMEFRAMES: return(ObjectGetInteger(0,name,OBJPROP_TIMEFRAMES)); case OBJPROP_DEVIATION: return(ObjectGetDouble(0,name,OBJPROP_DEVIATION)); case OBJPROP_FONTSIZE: return(ObjectGetInteger(0,name,OBJPROP_FONTSIZE)); case OBJPROP_CORNER: return(ObjectGetInteger(0,name,OBJPROP_CORNER)); case OBJPROP_XDISTANCE: return(ObjectGetInteger(0,name,OBJPROP_XDISTANCE)); case OBJPROP_YDISTANCE: return(ObjectGetInteger(0,name,OBJPROP_YDISTANCE)); case OBJPROP_FIBOLEVELS: return(ObjectGetInteger(0,name,OBJPROP_LEVELS)); case OBJPROP_LEVELCOLOR: return(ObjectGetInteger(0,name,OBJPROP_LEVELCOLOR)); case OBJPROP_LEVELSTYLE: return(ObjectGetInteger(0,name,OBJPROP_LEVELSTYLE)); case OBJPROP_LEVELWIDTH: return(ObjectGetInteger(0,name,OBJPROP_LEVELWIDTH)); } } | ObjectGet 지정된 객체 속성 값을 반환. ObjectGetInteger, ObjectGetDouble |
string ObjectGetFiboDescription(string name, int index) | string ObjectGetFiboDescriptionMQL4(string name, int index) { return(ObjectGetString(0,name,OBJPROP_LEVELTEXT,index)); } | ObjectGetFiboDescription 피보나치 객체의 레벨 설명을 반환하는 함수. ObjectGetString |
int ObjectGetShiftByValue(string name, double value) | int ObjectGetShiftByValueMQL4(string name, double value) { ENUM_TIMEFRAMES timeframe=TFMigrate(PERIOD_CURRENT); datetime Arr[]; int shift; MqlRates mql4[]; if(ObjectGetTimeByValue(0,name,value)<0) return(-1); CopyRates(NULL,timeframe,0,1,mql4); if(CopyTime(NULL,timeframe,mql4[0].time, ObjectGetTimeByValue(0,name,value),Arr)>0) return(ArraySize(Arr)-1); else return(-1); } | ObjectGetShiftByValue 주어진 값에 대해 계산하고 바 인덱스 (현재 바에 관련된 시프트)를 반환하는 함수. MqlRates, ObjectGetTimeByValue, CopyRates, CopyTime, ArraySize |
double ObjectGetValueByShift(string name, int shift) | double ObjectGetValueByShiftMQL4(string name, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(PERIOD_CURRENT); MqlRates mql4[]; CopyRates(NULL,timeframe,shift,1,mql4); return(ObjectGetValueByTime(0,name,mql4[0].time,0)); } | ObjectGetValueByShift 지정된 바 (현재 바에 관련된 시프트)의 가격 값을 계산하고 반환하는 함수. MqlRates, CopyRates, ObjectGetValueByTime |
bool ObjectMove(string name, int point, datetime time1, double price1) | bool ObjectMoveMQL4(string name, int point, datetime time1, double price1) { return(ObjectMove(0,name,point,time1,price1)); } | ObjectMove 차트 내의 객체 좌표를 이동시키는 함수. 객체들은 타입에 따라 1개에서 3개의 좌표를 지닐 수 있음. ObjectMove |
string ObjectName(int index) | string ObjectNameMQL4(int index) { return(ObjectName(0,index)); } | ObjectName 객체 리스트에서 인덱스로 찾아서 이름을 반환하는 함수. ObjectName |
int ObjectsDeleteAll(int window=EMPTY, int type=EMPTY) | int ObjectsDeleteAllMQL4(int window=EMPTY, int type=EMPTY) { return(ObjectsDeleteAll(0,window,type)); } | ObjectsDeleteAll 차트의 지정된 보조창에서 특정 타입의 모든 객체를 제거. ObjectsDeleteAll |
bool ObjectSet(string name, int prop_id, double value) | bool ObjectSetMQL4(string name, int index, double value) { switch(index) { case OBJPROP_TIME1: ObjectSetInteger(0,name,OBJPROP_TIME,(int)value);return(true); case OBJPROP_PRICE1: ObjectSetDouble(0,name,OBJPROP_PRICE,value);return(true); case OBJPROP_TIME2: ObjectSetInteger(0,name,OBJPROP_TIME,1,(int)value);return(true); case OBJPROP_PRICE2: ObjectSetDouble(0,name,OBJPROP_PRICE,1,value);return(true); case OBJPROP_TIME3: ObjectSetInteger(0,name,OBJPROP_TIME,2,(int)value);return(true); case OBJPROP_PRICE3: ObjectSetDouble(0,name,OBJPROP_PRICE,2,value);return(true); case OBJPROP_COLOR: ObjectSetInteger(0,name,OBJPROP_COLOR,(int)value);return(true); case OBJPROP_STYLE: ObjectSetInteger(0,name,OBJPROP_STYLE,(int)value);return(true); case OBJPROP_WIDTH: ObjectSetInteger(0,name,OBJPROP_WIDTH,(int)value);return(true); case OBJPROP_BACK: ObjectSetInteger(0,name,OBJPROP_BACK,(int)value);return(true); case OBJPROP_RAY: ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,(int)value);return(true); case OBJPROP_ELLIPSE: ObjectSetInteger(0,name,OBJPROP_ELLIPSE,(int)value);return(true); case OBJPROP_SCALE: ObjectSetDouble(0,name,OBJPROP_SCALE,value);return(true); case OBJPROP_ANGLE: ObjectSetDouble(0,name,OBJPROP_ANGLE,value);return(true); case OBJPROP_ARROWCODE: ObjectSetInteger(0,name,OBJPROP_ARROWCODE,(int)value);return(true); case OBJPROP_TIMEFRAMES: ObjectSetInteger(0,name,OBJPROP_TIMEFRAMES,(int)value);return(true); case OBJPROP_DEVIATION: ObjectSetDouble(0,name,OBJPROP_DEVIATION,value);return(true); case OBJPROP_FONTSIZE: ObjectSetInteger(0,name,OBJPROP_FONTSIZE,(int)value);return(true); case OBJPROP_CORNER: ObjectSetInteger(0,name,OBJPROP_CORNER,(int)value);return(true); case OBJPROP_XDISTANCE: ObjectSetInteger(0,name,OBJPROP_XDISTANCE,(int)value);return(true); case OBJPROP_YDISTANCE: ObjectSetInteger(0,name,OBJPROP_YDISTANCE,(int)value);return(true); case OBJPROP_FIBOLEVELS: ObjectSetInteger(0,name,OBJPROP_LEVELS,(int)value);return(true); case OBJPROP_LEVELCOLOR: ObjectSetInteger(0,name,OBJPROP_LEVELCOLOR,(int)value);return(true); case OBJPROP_LEVELSTYLE: ObjectSetInteger(0,name,OBJPROP_LEVELSTYLE,(int)value);return(true); case OBJPROP_LEVELWIDTH: ObjectSetInteger(0,name,OBJPROP_LEVELWIDTH,(int)value);return(true); default: return(false); } return(false); } | ObjectSet 지정된 객체 속성의 값을 변경. ObjectSetInteger, ObjectSetDouble |
bool ObjectSetFiboDescription(string name, int index, string text) | bool ObjectSetFiboDescriptionMQL4(string name, int index, string text) { return(ObjectSetString(0,name,OBJPROP_LEVELTEXT,index,text)); } | ObjectSetFiboDescription 피보나치 객체의 레벨에 새 설명을 설정하는 함수. ObjectSetString |
bool ObjectSetText(string name, string text, int font_size, string font_name=NULL, color text_color=CLR_NONE) | bool ObjectSetTextMQL4(string name, string text, int font_size, string font="", color text_color=CLR_NONE) { int tmpObjType=(int)ObjectGetInteger(0,name,OBJPROP_TYPE); if(tmpObjType!=OBJ_LABEL && tmpObjType!=OBJ_TEXT) return(false); if(StringLen(text)>0 && font_size>0) { if(ObjectSetString(0,name,OBJPROP_TEXT,text)==true && ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size)==true) { if((StringLen(font)>0) && ObjectSetString(0,name,OBJPROP_FONT,font)==false) return(false); if(text_color>-1 && ObjectSetInteger(0,name,OBJPROP_COLOR,text_color)==false) return(false); return(true); } return(false); } return(false); } | ObjectSetText 객체 설명을 바꿈. ObjectGetInteger, ObjectSetString, ObjectSetInteger StringLen |
int ObjectsTotal(int type=EMPTY) | int ObjectsTotalMQL4(int type=EMPTY, int window=-1) { return(ObjectsTotal(0,window,type)); } | ObjectsTotal 차트 내 지정된 타입의 객체의 총 수를 반환. ObjectsTotal |
int ObjectType(string name) | int ObjectTypeMQL4(string name) { return((int)ObjectGetInteger(0,name,OBJPROP_TYPE)); } | ObjectType 객체타입 값을 반환. ObjectGetInteger |
16. 스트링 함수
MQL4 | MQL5 | 설명 |
---|---|---|
string StringConcatenate(...) | int StringConcatenate(string &string_var, void argument1 void argument2 ...) | StringConcatenate 전달된 데이터들로 스트링을 만들고 반환. StringConcatenate |
int StringFind(string text, string matched_text, int start=0) | int StringFind(string string_value, string match_substring, int start_pos=0) | StringFind 서브스트링을 탐색. 찾은 서브스트링이 어디에서부터 시작하는지 위치를 반환하거나, 만약 발견되지 않은 경우 -1을 반환 StringFind |
int StringGetChar(string text, int pos) | ushort StringGetCharacter(string string_value, int pos) | StringGetChar 스트링 내의 특정 위치에서 캐릭터 (코드)를 반환. StringGetCharacter |
int StringLen(string text) | int StringLen(string string_value) | StringLen 스트링 내의 문자 숫자를 반환. StringLen |
string StringSetChar(string text, int pos, int value) | bool StringSetCharacter(string &string_var, int pos, ushort character) | StringSetChar 지정된 위치의 문자를 교체하고 복사된 스트링을 반환. StringSetCharacter |
string StringSubstr(string text, int start, int length=0) | string StringSubstr(string string_value, int start_pos, int length=-1) | StringSubstr 텍스트 스트링의 주어진 위치에서부터 서브스트링을 추출. StringSubstr |
string StringTrimLeft(string text) | int StringTrimLeft(string& string_var) | StringTrimLeft 스트링 왼쪽켠의 줄바꿈 문자, 공백, 및 탭을 제거하는 함수. StringTrimLeft |
string StringTrimRight(string text) | int StringTrimRight(string& string_var) | StringTrimRight 스트링 오른쪽켠의 줄바꿈 문자, 공백, 탭을 제거하는 함수. StringTrimRight |
17. 기술 인디케이터
Expert Advisor에서 기술 인디케이터를 쓰는 것은 초심자를 위한 MQL5: Expert Advisors에서 기술 인디케이터 활용하기문서에서 고려되어 있습니다. 해당 문서에서 사용된 메소드를통해 지정된 가격에서의 인디케이터 계산을 얻어내기에 충분합니다. 해당 메소드를 사용하기 위해선 보조 함수가 필요합니다:
double CopyBufferMQL4(int handle,int index,int shift) { double buf[]; switch(index) { case 0: if(CopyBuffer(handle,0,shift,1,buf)>0) return(buf[0]); break; case 1: if(CopyBuffer(handle,1,shift,1,buf)>0) return(buf[0]); break; case 2: if(CopyBuffer(handle,2,shift,1,buf)>0) return(buf[0]); break; case 3: if(CopyBuffer(handle,3,shift,1,buf)>0) return(buf[0]); break; case 4: if(CopyBuffer(handle,4,shift,1,buf)>0) return(buf[0]); break; default: break; } return(EMPTY_VALUE); }이하의 상수를 선언합시다:
ENUM_MA_METHOD MethodMigrate(int method) { switch(method) { case 0: return(MODE_SMA); case 1: return(MODE_EMA); case 2: return(MODE_SMMA); case 3: return(MODE_LWMA); default: return(MODE_SMA); } } ENUM_APPLIED_PRICE PriceMigrate(int price) { switch(price) { case 1: return(PRICE_CLOSE); case 2: return(PRICE_OPEN); case 3: return(PRICE_HIGH); case 4: return(PRICE_LOW); case 5: return(PRICE_MEDIAN); case 6: return(PRICE_TYPICAL); case 7: return(PRICE_WEIGHTED); default: return(PRICE_CLOSE); } } ENUM_STO_PRICE StoFieldMigrate(int field) { switch(field) { case 0: return(STO_LOWHIGH); case 1: return(STO_CLOSECLOSE); default: return(STO_LOWHIGH); } } //+------------------------------------------------------------------+ enum ALLIGATOR_MODE { MODE_GATORJAW=1, MODE_GATORTEETH, MODE_GATORLIPS }; enum ADX_MODE { MODE_MAIN, MODE_PLUSDI, MODE_MINUSDI }; enum UP_LOW_MODE { MODE_BASE, MODE_UPPER, MODE_LOWER }; enum ICHIMOKU_MODE { MODE_TENKANSEN=1, MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN }; enum MAIN_SIGNAL_MODE{ MODE_MAIN, MODE_SIGNAL };
MQL4 | MQL5 | 설명 |
---|---|---|
double iAC(string symbol, int timeframe, int shift) | double iACMQL4(string symbol, int tf, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iAC(symbol,timeframe); if(handle<0) { Print("The iAC object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iAC 빌 윌리엄스의 Accelerator/Decelerator 오실레이터 계산. iAC |
double iAD(string symbol, int timeframe, int shift) | double iADMQL4(string symbol, int tf, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=(int)iAD(symbol,timeframe,VOLUME_TICK); if(handle<0) { Print("The iAD object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iAD Accumulation/Distribution 인디케이터를 계산하고 해당 값을 반환. iAD |
double iAlligator(string symbol, int timeframe, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int ma_method, int applied_price, int mode, int shift) | double iAlligatorMQL4(string symbol, int tf, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int method, int price, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iAlligator(symbol,timeframe,jaw_period,jaw_shift, teeth_period,teeth_shift, lips_period,lips_shift, ma_method,applied_price); if(handle<0) { Print("The iAlligator object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode-1,shift)); } | iAlligator 빌 윌리엄스의 Alligator를 계산하고 해당 값을 반환. iAlligator |
double iADX(string symbol, int timeframe, int period, int applied_price, int mode, int shift) | double iADXMQL4(string symbol, int tf, int period, int price, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iADX(symbol,timeframe,period); if(handle<0) { Print("The iADX object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode,shift)); } | iADX 이동방향지수(Movement directional index)를 계산하고 해당 값을 반환. iADX |
double iATR(string symbol, int timeframe, int period, int shift) | double iATRMQL4(string symbol, int tf, int period, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iATR(symbol,timeframe,period); if(handle<0) { Print("The iATR object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iATR 평균참범위의 인디케이터를 계산하고 해당 값을 반환. iATR |
double iAO(string symbol, int timeframe, int shift) | double iAOMQL4(string symbol, int tf, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iAO(symbol,timeframe); if(handle<0) { Print("The iAO object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iAO 빌 윌리엄스의 Awesome oscillator를 계산하고 해당 값을 반환. iAO |
double iBearsPower(string symbol, int timeframe, int period, int applied_price, int shift) | double iBearsPowerMQL4(string symbol, int tf, int period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iBearsPower(symbol,timeframe,period); if(handle<0) { Print("The iBearsPower object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iBearsPower Bears Power 인디케이터를 계산하고 해당 값을 반환. iBearsPower |
double iBands(string symbol, int timeframe, int period, int deviation, int bands_shift, int applied_price, int mode, int shift) | double iBandsMQL4(string symbol, int tf, int period, double deviation, int bands_shift, int method, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); int handle=iBands(symbol,timeframe,period, bands_shift,deviation,ma_method); if(handle<0) { Print("The iBands object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode,shift)); } | iBands Bollinger bands 인디케이터를 계산하고 해당 값을 반환. iBands |
double iBandsOnArray(double array[], int total, int period, int deviation, int bands_shift, int mode, int shift) | - | iBandsOnArray 숫자 어레이에 저장된 데이터에 대한 Bollinger Bands 인디케이터 계산. |
double iBullsPower(string symbol, int timeframe, int period, int applied_price, int shift) | double iBullsPowerMQL4(string symbol, int tf, int period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iBullsPower(symbol,timeframe,period); if(handle<0) { Print("The iBullsPower object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iBullsPower Bulls Power 인디케이터를 계산하고 해당 값을 반환. iBullsPower |
double iCCI(string symbol, int timeframe, int period, int applied_price, int shift) | double iCCIMQL4(string symbol, int tf, int period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iCCI(symbol,timeframe,period,price); if(handle<0) { Print("The iCCI object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iCCI 상품채널지수(Commodity channel index)를 계산하고 해당 값을 반환. iCCI |
double iCCIOnArray(double array[], int total, int period, int shift) | - | iCCIOnArray 숫자 어레이에 저장된 데이터에 대한 상품채널지수(Commodity Channel Index) 의 계산. |
double iCustom(string symbol, int timeframe, string name, ..., int mode, int shift) | int iCustom(string symbol, ENUM_TIMEFRAMES period, string name ...) | iCustom 지정된 커스텀 인디케이터를 계산하고 해당 값을 반환. iCustom |
double iDeMarker(string symbol, int timeframe, int period, int shift) | double iDeMarkerMQL4(string symbol, int tf, int period, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iDeMarker(symbol,timeframe,period); if(handle<0) { Print("The iDeMarker object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iDeMarker DeMarker 인디케이터를 계산하고 해당 값을 반환. iDeMarker |
double iEnvelopes(string symbol, int timeframe, int ma_period, int ma_method, int ma_shift, int applied_price, double deviation, int mode, int shift) | double EnvelopesMQL4(string symbol, int tf, int ma_period, int method, int ma_shift, int price, double deviation, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iEnvelopes(symbol,timeframe, ma_period,ma_shift,ma_method, applied_price,deviation); if(handle<0) { Print("The iEnvelopes object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode-1,shift)); } | iEnvelopes Envelopes 인디케이터를 계산하고 해당 값을 반환. iEnvelopes |
double iEnvelopesOnArray(double array[], int total, int ma_period, int ma_method, int ma_shift, double deviation, int mode, int shift) | - | iEnvelopesOnArray 숫자 어레이 내 데이터에 대한 Envelopes 인디케이터 계산. |
double iForce(string symbol, int timeframe, int period, int ma_method, int applied_price, int shift) | double iForceMQL4(string symbol, int tf, int period, int method, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); int handle=iForce(symbol,timeframe,period,ma_method,VOLUME_TICK); if(handle<0) { Print("The iForce object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iForce 포스 지수(Force index) 계산 후 해당 값을 반환. iForce |
double iFractals(string symbol, int timeframe, int mode, int shift) | double iFractalsMQL4(string symbol, int tf, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iFractals(symbol,timeframe); if(handle<0) { Print("The iFractals object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode-1,shift)); } | iFractals 프랙탈 계산 후 해당 값을 반환. iFractals |
double iGator(string symbol, int timeframe, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int ma_method, int applied_price, int mode, int shift) | double iGatorMQL4(string symbol, int tf, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int method, int price, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iGator(symbol,timeframe,jaw_period,jaw_shift, teeth_period,teeth_shift, lips_period,lips_shift, ma_method,applied_price); if(handle<0) { Print("The iGator object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode-1,shift)); } | iGator Gator 오실레이터 계산. iGator |
double iIchimoku(string symbol, int timeframe, int tenkan_sen, int kijun_sen, int senkou_span_b, int mode, int shift) | double iIchimokuMQL4(string symbol, int tf, int tenkan_sen, int kijun_sen, int senkou_span_b, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iIchimoku(symbol,timeframe, tenkan_sen,kijun_sen,senkou_span_b); if(handle<0) { Print("The iIchimoku object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode-1,shift)); } | iIchimoku Ichimoku Kinko Hyo 계산 후 해당 값을 반환. iIchimoku |
double iBWMFI(string symbol, int timeframe, int shift) | double iBWMFIMQL4(string symbol, int tf, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=(int)iBWMFI(symbol,timeframe,VOLUME_TICK); if(handle<0) { Print("The iBWMFI object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iBWMFI 빌 윌리엄스 Market Facilitation index 계산 후 해당 값 반환. iBWMFI |
double iMomentum(string symbol, int timeframe, int period, int applied_price, int shift) | double iMomentumMQL4(string symbol, int tf, int period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iMomentum(symbol,timeframe,period,applied_price); if(handle<0) { Print("The iMomentum object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iMomentum Momentum 인디케이터를 계산하고 해당 값을 반환. iMomentum |
double iMomentumOnArray(double array[], int total, int period, int shift) | - | iMomentumOnArray 숫자 어레이 내 데이터에 대한 Momentum 인디케이터 계산. |
double iMFI(string symbol, int timeframe, int period, int shift) | double iMFIMQL4(string symbol, int tf, int period, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=(int)iMFI(symbol,timeframe,period,VOLUME_TICK); if(handle<0) { Print("The iMFI object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iMFI Money flow index 계산 후 해당 값 반환. iMFI |
double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift) | double iMAMQL4(string symbol, int tf, int period, int ma_shift, int method, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iMA(symbol,timeframe,period,ma_shift, ma_method,applied_price); if(handle<0) { Print("The iMA object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iMA 이동평균(Moving average) 인디케이터를 계산하고 해당 값을 반환. iMA |
double iMAOnArray(double array[], int total, int period, int ma_shift, int ma_method, int shift) | double iMAOnArrayMQL4(double &array[], int total, int period, int ma_shift, int ma_method, int shift) { double buf[],arr[]; if(total==0) total=ArraySize(array); if(total>0 && total<=period) return(0); if(shift>total-period-ma_shift) return(0); switch(ma_method) { case MODE_SMA : { total=ArrayCopy(arr,array,0,shift+ma_shift,period); if(ArrayResize(buf,total)<0) return(0); double sum=0; int i,pos=total-1; for(i=1;i<period;i++,pos--) sum+=arr[pos]; while(pos>=0) { sum+=arr[pos]; buf[pos]=sum/period; sum-=arr[pos+period-1]; pos--; } return(buf[0]); } case MODE_EMA : { if(ArrayResize(buf,total)<0) return(0); double pr=2.0/(period+1); int pos=total-2; while(pos>=0) { if(pos==total-2) buf[pos+1]=array[pos+1]; buf[pos]=array[pos]*pr+buf[pos+1]*(1-pr); pos--; } return(buf[shift+ma_shift]); } case MODE_SMMA : { if(ArrayResize(buf,total)<0) return(0); double sum=0; int i,k,pos; pos=total-period; while(pos>=0) { if(pos==total-period) { for(i=0,k=pos;i<period;i++,k++) { sum+=array[k]; buf[k]=0; } } else sum=buf[pos+1]*(period-1)+array[pos]; buf[pos]=sum/period; pos--; } return(buf[shift+ma_shift]); } case MODE_LWMA : { if(ArrayResize(buf,total)<0) return(0); double sum=0.0,lsum=0.0; double price; int i,weight=0,pos=total-1; for(i=1;i<=period;i++,pos--) { price=array[pos]; sum+=price*i; lsum+=price; weight+=i; } pos++; i=pos+period; while(pos>=0) { buf[pos]=sum/weight; if(pos==0) break; pos--; i--; price=array[pos]; sum=sum-lsum+price*period; lsum-=array[i]; lsum+=price; } return(buf[shift+ma_shift]); } default: return(0); } return(0); } | |
double iOsMA(string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int shift) | double iOsMAMQL4(string symbol, int tf, int fast_ema_period, int slow_ema_period, int signal_period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iOsMA(symbol,timeframe, fast_ema_period,slow_ema_period, signal_period,applied_price); if(handle<0) { Print("The iOsMA object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iOsMA Moving Average of Oscillator를 계산하고 해당 값을 반환. iOsMA |
double iMACD(string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift) | double iMACDMQL4(string symbol, int tf, int fast_ema_period, int slow_ema_period, int signal_period, int price, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iMACD(symbol,timeframe, fast_ema_period,slow_ema_period, signal_period,applied_price); if(handle<0) { Print("The iMACD object is not created: Error ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode,shift)); } | iMACD 이동평균 컨버전스/다이버전스(MACD) 계산 후 해당 값 반환. iMACD |
double iOBV(string symbol, int timeframe, int applied_price, int shift) | double iOBVMQL4(string symbol, int tf, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iOBV(symbol,timeframe,VOLUME_TICK); if(handle<0) { Print("The iOBV object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iOBV On Balance Volume 인디케이터를 계산하고 해당 값을 반환. iOBV |
double iSAR(string symbol, int timeframe, double step, double maximum, int shift) | double iSARMQL4(string symbol, int tf, double step, double maximum, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iSAR(symbol,timeframe,step,maximum); if(handle<0) { Print("The iSAR object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iSAR Parabolic Stop and Reverse 시스템 계산 후 해당 값 반환. iSAR |
double iRSI(string symbol, int timeframe, int period, int applied_price, int shift) | double iRSIMQL4(string symbol, int tf, int period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iRSI(symbol,timeframe,period,applied_price); if(handle<0) { Print("The iRSI object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iRSI Relative strength index 계산 후 해당 값 반환. iRSI |
double iRSIOnArray(double array[], int total, int period, int shift) | - | iRSIOnArray 숫자 어레이 내 데이터에 대한 Relative Strength Index 계산 후 해당 값 반환. |
double iRVI(string symbol, int timeframe, int period, int mode, int shift) | double iRVIMQL4(string symbol, int tf, int period, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iRVI(symbol,timeframe,period); if(handle<0) { Print("The iRVI object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode,shift)); } | iRVI Relative Vigor index 계산 후 해당 값 반환. iRVI |
double iStdDev(string symbol, int timeframe, int ma_period, int ma_shift, int ma_method, int applied_price, int shift) | double iStdDevMQL4(string symbol, int tf, int ma_period, int ma_shift, int method, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iStdDev(symbol,timeframe,ma_period,ma_shift, ma_method,applied_price); if(handle<0) { Print("The iStdDev object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iStdDev 표준편차 인디케이터를 계산하고 해당 값을 반환. iStdDev |
double iStdDevOnArray(double array[], int total, int ma_period, int ma_shift, int ma_method, int shift) | - | iStdDevOnArray 숫자 어레이 내 데이터에 대한 표준편차 인디케이터 계산. |
double iStochastic(string symbol, int timeframe, int%Kperiod, int%Dperiod, int slowing, int method, int price_field, int mode, int shift) | double iStochasticMQL4(string symbol, int tf, int Kperiod, int Dperiod, int slowing, int method, int field, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_STO_PRICE price_field=StoFieldMigrate(field); int handle=iStochastic(symbol,timeframe,Kperiod,Dperiod, slowing,ma_method,price_field); if(handle<0) { Print("The iStochastic object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode,shift)); } | iStochastic Stochastic oscillator 계산 후 해당 값 반환. iStochastic |
double iWPR(string symbol, int timeframe, int period, int shift) | double iWPRMQL4(string symbol, int tf, int period, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iWPR(symbol,timeframe,period); if(handle<0) { Print("The iWPR object is not created: Error",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iWPR 래리 윌리엄스의 percent range 인디케이터를 계산하고 해당 값을 반환. iWPR |
18. 타임시리즈 접속
MQL4 | MQL5 | 설명 |
---|---|---|
int iBars(string symbol, int timeframe) | int iBarsMQL4(string symbol,int tf) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); return(Bars(symbol,timeframe)); } | int iBarsMQL4(string symbol,int tf) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); return(Bars(symbol,timeframe)); }Bars 지정된 차트 위의 바 수 반환. Bars |
int iBarShift(string symbol, int timeframe, datetime time, bool exact=false | int iBarShiftMQL4(string symbol, int tf, datetime time, bool exact=false) { if(time<0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); datetime Arr[],time1; CopyTime(symbol,timeframe,0,1,Arr); time1=Arr[0]; if(CopyTime(symbol,timeframe,time,time1,Arr)>0) { if(ArraySize(Arr)>2) return(ArraySize(Arr)-1); if(time<time1) return(1); else return(0); } else return(-1); } | iBarShift 개방 시간으로 바 탐색 CopyTime, ArraySize |
double iClose(string symbol, int timeframe, int shift) | double iCloseMQL4(string symbol,int tf,int index)-->{ if(index < 0) return(-1); double Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyClose(symbol,timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | Close 해당 바 내에서 지정된 심볼, 타임프레임, 시프트에 맞는 Close 값 반환. 만약 로컬 이력이 비어 있다면 (로딩되지 않았다면), 함수는 0을 반환. CopyRates, MqlRates |
double iHigh(string symbol, int timeframe, int shift) | double iHighMQL4(string symbol,int tf,int index) { if(index < 0) return(-1); double Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyHigh(symbol,timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | High 해당 바 내에서 지정된 심볼, 타임프레임, 시프트에 맞는 High 값 반환. 만약 로컬 이력이 비어 있다면 (로딩되지 않았다면), 함수는 0을 반환. CopyRates, MqlRates |
int iHighest(string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0) | int iHighestMQL4(string symbol, int tf, int type, int count=WHOLE_ARRAY, int start=0) { if(start<0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(count<=0) count=Bars(symbol,timeframe); if(type<=MODE_OPEN) { double Open[]; ArraySetAsSeries(Open,true); CopyOpen(symbol,timeframe,start,count,Open); return(ArrayMaximum(Open,0,count)+start); } if(type==MODE_LOW) { double Low[]; ArraySetAsSeries(Low,true); CopyLow(symbol,timeframe,start,count,Low); return(ArrayMaximum(Low,0,count)+start); } if(type==MODE_HIGH) { double High[]; ArraySetAsSeries(High,true); CopyHigh(symbol,timeframe,start,count,High); return(ArrayMaximum(High,0,count)+start); } if(type==MODE_CLOSE) { double Close[]; ArraySetAsSeries(Close,true); CopyClose(symbol,timeframe,start,count,Close); return(ArrayMaximum(Close,0,count)+start); } if(type==MODE_VOLUME) { long Volume[]; ArraySetAsSeries(Volume,true); CopyTickVolume(symbol,timeframe,start,count,Volume); return(ArrayMaximum(Volume,0,count)+start); } if(type>=MODE_TIME) { datetime Time[]; ArraySetAsSeries(Time,true); CopyTime(symbol,timeframe,start,count,Time); return(ArrayMaximum(Time,0,count)+start); //--- } return(0); } | iHighest 유형에 따라 특정 기간 동안의 최대값 이동을 반환. CopyOpen, CopyLow, CopyHigh, CopyClose, CopyTickVolume, CopyTime, ArrayMaximum |
double iLow(string symbol, int timeframe, int shift) | double iLowMQL4(string symbol,int tf,int index) { if(index < 0) return(-1); double Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyLow(symbol,timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | iLow 해당 바 내에서 지정된 심볼, 타임프레임, 시프트에 맞는 Low 값 반환. 만약 로컬 이력이 비어 있다면 (로딩되지 않았다면), 함수는 0을 반환. CopyRates, MqlRates |
int iLowest(string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0) | int iLowestMQL4(string symbol, int tf, int type, int count=WHOLE_ARRAY, int start=0) { if(start<0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(count<=0) count=Bars(symbol,timeframe); if(type<=MODE_OPEN) { double Open[]; ArraySetAsSeries(Open,true); CopyOpen(symbol,timeframe,start,count,Open); return(ArrayMinimum(Open,0,count)+start); } if(type==MODE_LOW) { double Low[]; ArraySetAsSeries(Low,true); CopyLow(symbol,timeframe,start,count,Low); return(ArrayMinimum(Low,0,count)+start); } if(type==MODE_HIGH) { double High[]; ArraySetAsSeries(High,true); CopyHigh(symbol,timeframe,start,count,High); return(ArrayMinimum(High,0,count)+start); } if(type==MODE_CLOSE) { double Close[]; ArraySetAsSeries(Close,true); CopyClose(symbol,timeframe,start,count,Close); return(ArrayMinimum(Close,0,count)+start); } if(type==MODE_VOLUME) { long Volume[]; ArraySetAsSeries(Volume,true); CopyTickVolume(symbol,timeframe,start,count,Volume); return(ArrayMinimum(Volume,0,count)+start); } if(type>=MODE_TIME) { datetime Time[]; ArraySetAsSeries(Time,true); CopyTime(symbol,timeframe,start,count,Time); return(ArrayMinimum(Time,0,count)+start); } //--- return(0); } | iLowest 유형에 따라 특정 기간 동안의 최저값 이동을 반환. CopyOpen, CopyLow, CopyHigh, CopyClose, CopyTickVolume, CopyTime, ArrayMinimum |
double iOpen(string symbol, int timeframe, int shift) | double iOpenMQL4(string symbol,int tf,int index) { if(index < 0) return(-1); double Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyOpen(symbol,timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | iOpen 해당 바 내에서 지정된 심볼, 타임프레임, 시프트에 맞는 Open 값 반환. 만약 로컬 이력이 비어 있다면 (로딩되지 않았다면), 함수는 0을 반환. CopyRates, MqlRates |
datetime iTime(string symbol, int timeframe, int shift) | datetime iTimeMQL4(string symbol,int tf,int index) { if(index < 0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); datetime Arr[]; if(CopyTime(symbol, timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | iTime 해당 바 내에서 지정된 심볼, 타임프레임, 시프트에 맞는 Time 값 반환. 만약 로컬 이력이 비어 있다면 (로딩되지 않았다면), 함수는 0을 반환. CopyRates, MqlRates |
double iVolume(string symbol, int timeframe, int shift) | int iVolumeMQL4(string symbol,int tf,int index) { if(index < 0) return(-1); long Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyTickVolume(symbol, timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | iVolume 해당 바 내에서 지정된 심볼, 타임프레임, 시프트에 맞는 Tick Volume 값 반환. 만약 로컬 이력이 비어 있다면 (로딩되지 않았다면), 함수는 0을 반환. CopyRates, MqlRates |
19. 차트 작업
MQL4 | MQL5 | 설명 |
---|---|---|
void HideTestIndicators(bool hide) | - | HideTestIndicators Expert Advisor로 호출한 인디케이터를 숨기는 플래그를 설정하는 함수. |
int Period() | ENUM_TIMEFRAMES Period() | Period 사용된 기간(차트 기간)을 결정하는 분 수를 반환.. Period |
bool RefreshRates() | - | RefreshRates 사전정의 변수 및 series 어레이 내의 데이터 갱신. |
string Symbol() | string Symbol() | Symbol 현재 금융 기구의 이름을 텍스트 스트링으로 반환. Symbol |
int WindowBarsPerChart() | int ChartGetInteger(0,CHART_VISIBLE_BARS,0) | WindowBarsPerChart 현재 차트 상에 보이는 바의 수를 반환. ChartGetInteger |
string WindowExpertName() | string MQLInfoString(MQL5_PROGRAM_NAME) | WindowExpertName 이 함수가 호출된 MQL4 프로그램에 따라 실행된 expert, 스크립트, 커스텀 인디케이터, 혹은 라이브러리의 이름을 반환. MQLInfoString |
int WindowFind(string name) | int WindowFindMQL4(string name) { int window=-1; if((ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR) { window=ChartWindowFind(); } else { window=ChartWindowFind(0,name); if(window==-1) Print(__FUNCTION__+"(): Error = ",GetLastError()); } return(window); } | WindowFind 이름이 있는 인디케이터가 발견된 경우 이 인디케이터를 가지고 있는 윈도우 인덱스를 반환하고, 아닌 경우 -1 반환. ChartWindowFind, MQLInfoInteger |
int WindowFirstVisibleBar() | int ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0) | WindowFirstVisibleBar 현재 차트 창에서 제일 먼저 보이는 바 숫자를 반환하는 함수. ChartGetInteger |
int WindowHandle(string symbol, int timeframe) | int WindowHandleMQL4(string symbol, int tf) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); long currChart,prevChart=ChartFirst(); int i=0,limit=100; while(i<limit) { currChart=ChartNext(prevChart); if(currChart<0) break; if(ChartSymbol(currChart)==symbol && ChartPeriod(currChart)==timeframe) return((int)currChart); prevChart=currChart; i++; } return(0); } | WindowHandle 지정된 차트의 시스템 윈도우 핸들을 반환. ChartFirst, ChartNext, ChartSymbol, ChartPeriod |
bool WindowIsVisible(int index) | bool ChartGetInteger(0,CHART_WINDOW_IS_VISIBLE,index) | WindowIsVisible 만약 차트 보조창이 보이면 TRUE 아니면 FALSE 반환. ChartGetInteger |
int WindowOnDropped() | int ChartWindowOnDropped() | WindowOnDropped expert, 커스텀 인디케이터, 혹은 스크립트가 드랍된 윈도우 인덱스를 반환. ChartWindowOnDropped |
double WindowPriceMax(int index=0) | double ChartGetDouble(0,CHART_PRICE_MAX,index) | WindowPriceMax 현재 차트의 지정된 하위 창의 수직 스케일 최대값을 반환(0-메인 차트 창, 인디케이터의 보조창은 1부터 시작하는 번호 지정). ChartGetDouble |
double WindowPriceMin(int index=0) | double ChartGetDouble(0,CHART_PRICE_MIN,index) | WindowPriceMin 현재 차트의 지정된 하위 창의 수직 스케일 최소값을 반환(0-메인 차트 창, 인디케이터의 보조창은 1부터 시작하는 번호 지정). ChartGetDouble |
double WindowPriceOnDropped() | double ChartPriceOnDropped() | WindowPriceOnDropped Expert나 스크립트가 드랍된 차트 포인트의 가격 부분을 반환. ChartPriceOnDropped |
void WindowRedraw() | void ChartRedraw(0) | WindowRedraw 현 차트를 강제로 다시 그림. ChartRedraw |
bool WindowScreenShot(string filename, int size_x, int size_y, int start_bar=-1, int chart_scale=-1, int chart_mode=-1) | bool WindowScreenShotMQL4(string filename, int size_x, int size_y, int start_bar=-1, int chart_scale=-1, int chart_mode=-1) { if(chart_scale>0 && chart_scale<=5) ChartSetInteger(0,CHART_SCALE,chart_scale); switch(chart_mode) { case 0: ChartSetInteger(0,CHART_MODE,CHART_BARS); case 1: ChartSetInteger(0,CHART_MODE,CHART_CANDLES); case 2: ChartSetInteger(0,CHART_MODE,CHART_LINE); } if(start_bar<0) return(ChartScreenShot(0,filename,size_x,size_y,ALIGN_RIGHT)); else return(ChartScreenShot(0,filename,size_x,size_y,ALIGN_LEFT)); } | WindowScreenShot 현재 차트 화면을 GIF 파일 스크린 샷으로 저장. ChartSetInteger, ChartScreenShot |
datetime WindowTimeOnDropped() | datetime ChartTimeOnDropped() | WindowTimeOnDropped Expert나 스크립트가 드랍된 차트 포인트의 시간 부분을 반환. ChartTimeOnDropped |
int WindowsTotal() | int ChartGetInteger(0,CHART_WINDOWS_TOTAL) | WindowsTotal 차트 (메인 차트 포함) 상의 인디케이터 창의 수를 반환. ChartGetInteger |
int WindowXOnDropped() | int ChartXOnDropped() | WindowXOnDropped Expert 또는 스크립트를 드랍한 차트 창 클라이언트 영역 지점의 X축 값(픽셀)을 반환. ChartXOnDropped |
int WindowYOnDropped() | int ChartYOnDropped() | WindowYOnDropped Expert 또는 스크립트를 드랍한 차트 창 클라이언트 영역 지점의 Y축 값(픽셀)을 반환. ChartYOnDropped |
마치며
- MQL5에서는 개념이 다르고 새로 짜야하기 때문에 거래 기능은 고려하지 않았습니다! 전환하는건 가능하지만 매매로직을 바꿔야 합니다. 다시 말하자면, 전환할 가치가 없습니다.
- 한 언어에서 다른 언어로 프로그램을 전환할때엔 언제나 퍼포먼스 저하와 기능성 저하를 염두에 두어야합니다. 따라서 이 가이드를 통해 함수를 빠르게 찾아보세요.
- MQL4 프로그램을 새 MetaTrader 5 클라이언트 터미널에서 실행시키는 에뮬레이터를 개발할 생각이 있습니다.
도와주신 분: keiji, A. Williams.
MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/81