이 오류를 조사해 주시겠어요? 이전 달에 코드가 수정 없이 작동한다는 것을 알았기 때문에 MT5 업데이트 이후에 시작된 것 같습니다.
매개변수 변환 유형 'long[][2]'에서 'string[][] &'로의 변환은 허용되지 않습니다 SymbolFilter.mqh 199 20
아래 코드가 이 문제를 재현하는 데 도움이 될 것 같습니다:
void printSymbols() { SymbolFilter f; // 필터 개체 string symbols[]; // 이름 배열 long permissions[][2]; // 데이터(속성 값)에 대한 배열 // 요청된 심볼 속성 목록 ENUM_SYMBOL_INFO_INTEGER modes[] = { SYMBOL_TRADE_MODE, SYMBOL_ORDER_MODE }; // 필터 적용, 결과 배열 가져오기 f.let(SYMBOL_VISIBLE, true).select(true, modes, symbols, permissions); const int n = ArraySize(symbols); PrintFormat("===== Trade permissions for the symbols (%d) ===== ", n); for(int i = 0; i < n; ++i) { Print(symbols[i] + ":"); for(int j = 0; j < ArraySize(modes); ++j) { // 비트 및 숫자 설명 "있는 그대로" 표시 PrintFormat(" %s (%d)", SymbolMonitor::stringify(permissions[i][j], modes[j]), permissions[i][j]); } } }
매개변수 변환 유형 'long[][2'를 'string[][] &'로의 변환이 허용되지 않습니다 SymbolFilter.mqh 199 20
아래 코드가 이 문제를 재현하는 데 도움이 될 것 같습니다:
해당 줄을 찾아보세요:
// 내장된 ArraySort // 문자열 배열을 지원하지 않습니다. void ArraySort(string &s[][]) const { QuickSortTm<string> qt(s); }
헤더 파일 SymbolFilter.mqh 및 TradeFilter.mqh에서 다음 메서드 오버로드를 옆에 추가합니다:
// 내장된 ArraySort // 문자열 배열을 지원하지 않습니다. void ArraySort(string &s[][]) const { QuickSortTm<string> qt(s); } template<typename T> void ArraySort(T &s[][]) const { ::ArraySort(s); }PS. 이 질문은 이 글과 관련이 없는 것 같습니다.
줄을 찾아주세요:
헤더 파일 SymbolFilter.mqh 및 TradeFilter.mqh에서 다음 메서드 오버로드를 그 옆에 추가하세요:
PS. 이 질문은 이 글과 관련이 없는 것 같습니다.빠른 답변에 감사드립니다. 업데이트를 한 후 오류가 더 많이 발생했습니다:
parameter convertion type 'double[][2]' to 'string[][] &' is not allowed TradeFilter.mqh 338 20 cannot convert parameter 'double[][2]' to 'OrderMonitor&[][]' TradeFilter.mqh 338 20 parameter convertion type 'double[][2]' to 'string[][] &' is not allowed TradeFilter.mqh 338 20 cannot convert parameter 'double[][2]' to 'PositionMonitor&[][]' TradeFilter.mqh 338 20 parameter convertion type 'long[][2]' to 'string[][] &' is not allowed TradeFilter.mqh 163 17 cannot convert parameter 'long[][2]' to 'OrderMonitor&[][]' TradeFilter.mqh 163 17 parameter convertion type 'long[][2]' to 'string[][] &' is not allowed TradeFilter.mqh 163 17 cannot convert parameter 'long[][2]' to 'PositionMonitor&[][]' TradeFilter.mqh 163 17 etc..
최적의 해결책이라고 생각하지는 않지만 ArraySort 대신 일반 QuickSortTm을 직접 호출하면 일시적으로 문제가 해결되는 것을 발견했습니다.
QuickSortTm<V> qt(array);
//ArraySort(array);
이상하네요. 위에서 제안한 수정 후 빌드 5346에서 이 스크립트 /MQL5/Scripts/MQL5Book/p6/SymbolFilterTradeMode.mq5를 성공적으로 컴파일하고 실행했습니다. 소스 코드를 보여주지 않았습니다.
버전 5 빌드 5327에서 실행 중입니다
void printActiveOrders() { OrderFilter filter; ENUM_ORDER_PROPERTY_DOUBLE properties[] = {ORDER_VOLUME_INITIAL, ORDER_PRICE_OPEN, ORDER_SL, ORDER_TP}; double d[][4]; ENUM_ORDER_TYPE types[]; ulong tickets[], magics[]; string symbols[], comments[]; filter.select(properties, tickets, d); filter.select(ORDER_SYMBOL, tickets, symbols); filter.select(ORDER_COMMENT, tickets, comments); filter.select(ORDER_TYPE, tickets, types); filter.select(ORDER_MAGIC, tickets, magics); Print("Orders .................. ", ArraySize(tickets)); for (int i=0; i < ArraySize(tickets); i++) { Print(tickets[i], "\t", magics[i], "\t", symbols[i], "\t", EnumToString(types[i]), " \t", NormalizeDouble(d[i][0],3), "\t", d[i][1], " \t ", d[i][2], " \t", d[i][3], "\t", comments[i]); } } void printPositions() { PositionFilter filter; ENUM_POSITION_PROPERTY_DOUBLE properties[] = {POSITION_PRICE_OPEN, POSITION_VOLUME, POSITION_SL, POSITION_TP, POSITION_PROFIT, POSITION_SWAP}; ENUM_POSITION_TYPE types[]; double d[][6]; ulong tickets[], extIds[]; string symbols[], comments[]; filter.let(POSITION_MAGIC, sets.MagicNumber).select(properties, tickets, d); filter.select(POSITION_SYMBOL, tickets, symbols); filter.select(POSITION_COMMENT, tickets, comments); filter.select(POSITION_TYPE, tickets, types); filter.select(POSITION_IDENTIFIER, tickets, extIds); Print("Tickets\t Parent Id\tSymbols \t Trade Type \t\t\t\t\t\tEntry \t Lots \t\t SL \t\t\t TP \t\t\t\t Profit \tSwat \t\tComments"); for ( int i =0; i < ArraySize(tickets); i++) { Print(tickets[i], "\t", extIds[i] == 0 ? "\t\t\t\t\t\t\t\t\t" : (string)extIds[i], "\t", symbols[i], "\t", EnumToString(types[i]), " \t", (string)NormalizeDouble(d[i][0],3), "\t", d[i][1], " \t ", d[i][2], " \t", d[i][3], " \t", d[i][4], " \t ", d[i][5], "\t", comments[i]); //Print(tickets[i], "\t", extIds[i] == 0 ? "\t\t\t\t\t\t\t\t\t" : extIds[i], "\t", symbols[i], "\t", EnumToString(types[i]), " \t", NormalizeDouble(d[i][0],3), "\t", d[i][1], " \t ", d[i][2], " \t", d[i][3], " \t", d[i][4], " \t ", d[i][5]); } }
측면에는 다음과 같은 메시지가 자주 표시됩니다 :
This single line message always shows whenever I attach my EA to a chart: Unresolved int value as enum: 8 for MonitorInterface<ENUM_POSITION_PROPERTY_INTEGER,ENUM_POSITION_PROPERTY_DOUBLE,ENUM_POSITION_PROPERTY_STRING>::TradeState While these ones below shows when it is detached 2025.10.17 19:30:01.347 Deriv Trader (Volatility 10 (1 s) Index.0,M15) 8 leaked strings left 2025.10.17 19:30:01.347 Deriv Trader (Volatility 10 (1 s) Index.0,M15) 2 undeleted dynamic objects found: 2025.10.17 19:30:01.347 Deriv Trader (Volatility 10 (1 s) Index.0,M15) 1 object of class 'WebSocketConnectionHybi' 2025.10.17 19:30:01.347 Deriv Trader (Volatility 10 (1 s) Index.0,M15) 1 object of class 'MqlWebSocketTransport' 2025.10.17 19:30:01.347 Deriv Trader (Volatility 10 (1 s) Index.0,M15) 576 bytes of leaked memory found
소스를 생략 한 것을 용서해 주셔서 제안 된 수정으로 되돌려서 오류를 다시 얻을 수 있었고 로그에 따르면 내 코드의 이러한 부분이 오류로 이어지는 부분 인 것 같습니다
측면에는 종종 다음과 같은 메시지가 표시됩니다 :
문자 T가 이미 클래스 템플릿 유형 이름으로 사용되었다는 것을 간과 했으므로 (이 경우 컴파일러가 오류를 생성하지 않은 것이 이상합니다) T를 다른 자유 문자로 변경하면 괜찮을 것입니다 (예 : X):
template<typename X> void ArraySort(X &s[][]) const { ::ArraySort(s); }
첫 번째 경고에 대해서는 포럼의 설명이 있습니다 (이전에 제공 한 설명):
거래, 자동 거래 시스템 및 테스트 거래 전략에 관한 포럼
전문가 트레이더를 위한 MQL5 프로그래밍 - 책의 소스 코드. 파트 7
스타니슬라브 코로트키, 2025.06.14 16:26
이는 MQL5의 해당 내장 열거형에 일반적으로 연속적으로 할당되는 상수에 간격이 있기 때문에 발생하는 경고일 뿐입니다. 이 간격은 MQL5가 지속적으로 변경되기 때문에 발생하며, 일부 상수는 더 이상 사용되지 않게 되었다가 제거될 수 있습니다. 소스 코드를 편집하여 이러한 경고를 방지할 수 있습니다.
그리고 유출 된 메모리에 대해-사용자 지정 소스 코드에 누락 된 부분이있어 책에 그러한 내용이 표시되지 않았습니다. 문제를 재현하려면 완전한 테스트 코드를 제공해야 합니다.
추신. 관심 있는 모든 속성에 대해 단일 선택을 실행하는 것이 더 효율적입니다:
// 예시: 수익, 심볼, 포지션 티켓 요청하기 // 수익별로 정렬된 특정 매직넘버 기준 #include <MQL5Book/Tuples.mqh> #include <MQL5Book/PositionFilter.mqh> #property script_show_inputs input ulong Magic; void OnStart() { int props[] = {POSITION_PROFIT, POSITION_SYMBOL, POSITION_TICKET}; Tuple3<double,string,ulong> tuples[]; PositionFilter filter; filter.let(POSITION_MAGIC, Magic).select(props, tuples, true); ArrayPrint(tuples); }
참고: 운영자는 책에 대한 모든 질문과 답변(#41부터 시작)을 적절한 스레드(예: 여기 -https://www.mql5.com/en/forum/459067)로 옮겨야 한다고 생각합니다.
- 2023.12.15
- www.mql5.com
문자 T가 이미 클래스 템플릿 유형명으로 사용되었다는 사실을 간과했으므로(이 경우 컴파일러가 오류를 생성하지 않은 것이 이상합니다.) T를 다른 자유 문자(예: X)로 변경해도 괜찮습니다:
첫 번째 경고에 대해서는 포럼에서 설명한 내용을 참조하세요(앞서 설명해 드렸습니다):
그리고 유출 된 메모리에 대해-사용자 지정 소스 코드에 누락 된 것이 유감스럽게도 책에 그런 것들이 표시되지 않았습니다. 문제를 재현하려면 완전한 테스트 코드를 제공해야 합니다.
추신. 관심 있는 모든 속성에 대해 단일 선택을 실행하는 것이 더 효율적입니다:
참고: 운영자는 이 책에 대한 모든 질문과 답변(#41부터 시작)을 적절한 스레드(예: 여기 -https://www.mql5.com/en/forum/459067)로 옮겨야 한다고 생각합니다.
나는 당신이 유출에 대해 옳다고 믿습니다. 나는 그것이 어디에서 오는지 이미 알고 있다고 생각합니다
정말 감사합니다 형제.
void printActiveOrders() { int properties[] = {ORDER_VOLUME_INITIAL, ORDER_PRICE_OPEN, ORDER_SL, ORDER_TP, ORDER_TICKET, ORDER_MAGIC, ORDER_TYPE, ORDER_SYMBOL, ORDER_COMMENT}; Tuple9<double,double,double,double,long,long,long,string,string> values[]; OrderFilter filter; filter.select(properties, values); Print("\nFound: ", ArraySize(values), " Orders\n{ORDER_VOLUME_INITIAL, ORDER_PRICE_OPEN, ORDER_SL, ORDER_TP, ORDER_TICKET, ORDER_MAGIC, ORDER_TYPE, ORDER_SYMBOL, ORDER_COMMENT}"); ArrayPrint(values); } void printDeals() { DealFilter filter; int properties[] = {DEAL_TIME, DEAL_SYMBOL, DEAL_TICKET, DEAL_TYPE, DEAL_VOLUME, DEAL_PRICE, DEAL_COMMISSION, DEAL_PROFIT}; Tuple8<long,string,long,long,double,double,double,double> data[]; filter.select(properties, data, true); // 시간별로 필터링 Print("\nFound: ", ArraySize(data), " Deals\nTIME, SYMBOL, TICKET, TYPE, VOLUME, PRICE, COMMISSION, PROFIT"); ArrayPrint(data); }
스타니슬라브코로트키
이 코드를 사용하여 거래 및 주문에 액세스할 수 있지만 특정 기간 동안 액세스하는 방법을 알아낼 수 없습니다. 특정 기간 동안 동일한 작업을 수행하는 방법에 대한 문서나 샘플을 안내해 주시겠습니까?
MQL5 Programming for Traders - 책의 소스 코드. 파트 6:
"MQL5 Programming for Traders" 파트 6에서는 MQL5 언어의 핵심인 트레이딩 자동화에 대해 알아볼 것입니다. 우리는 금융상품 사양 및 트레이딩 계좌 설정과 같은 기본적인 것들부터 시작하게 될 것입니다. 이는 Expert Advisors를 제대로 운영하기 위한 전제 조건입니다.
작성자: MetaQuotes