동지 여러분! 기사를 읽었습니다! 나는 그 안에 쓰여진대로 모든 것을했고, 이제 천국에 갈 것이라고 생각합니다. 하지만 아니요-Master MKL 5는 신호가있는 내 파일을 보지 못했습니다. 모든 것을 다시 확인하고 다시 확인하고 다시 확인했지만 전문가 고문 생성 마법사에는 신호가 표시되지 않습니다. 기사의 권장 사항에 따라 만든 파일을 첨부합니다. 내가 무엇을 잘못했는지 이해하도록 도와 주거나 반대로 기사 작성자가 중요한 것을 추가하지 않았기 때문에 어떤 식 으로든 합쳐지지 않습니다. 요컨대, 가능한 모든 방법으로 저를 도와주세요.
클래스 설명자는 소스 텍스트의 중요한 부분입니다.
설명자에 두 가지 명백한 오류가 있습니다. 그 중 하나는 존재하지 않는 열거형이 지정되어 신호를 감지하지 못하도록 합니다. 두 번째는 컴파일 중에 문제를 일으킵니다(잘못된 매개변수 이름).
미묘한 차이가 하나 더 있습니다. 각 설명자 줄에서 키워드 앞에는 공백이 하나만 있어야 합니다. (이 제한은 향후 제거될 것으로 생각되지만 현재는 이와 같습니다).
// wizard description start
//+---------------------------------------------------------------------------+
//| Description of the class |
//| Title=Сигнал пересечению ценой скользящей средней |
//| Type=Signal |
//| Name=Sample |
//| Class=CSampleSignal |
//| Page= |
//| Parameter=PeriodMA,int,12 |
//| Parameter=ShiftMA,int,0 | было SniftMA
//| Parameter=MethodMA,ENUM_MA_METHOD,MODE_EMA |
//| Parameter=AppliedMA,ENUM_APPLIED_PRICE,PRICE_CLOSE | было ENUM_MA_APLLIED_PRICE
//| Parameter=Limit,double,0.0 |
//| Parameter=StopLoss,double,50.0 |
//| Parameter=TakeProfit,double,50.0 |
//| Parameter=Expiration,int,10 |
//+---------------------------------------------------------------------------+
// wizard description end
텍스트에 대해 더 자세히 설명합니다.
생성자가 없는 것은 좋지 않습니다. 멤버 데이터를 기본값으로 초기화해야 합니다. 결국 일반적인 경우에는 매개변수를 설정하는 메서드가 호출되지 않을 수 있습니다.
마지막으로 메서드가 잘못 설명되어 있습니다.
void LimitMA (int value) {m_limit=value;}
void StopLoss (int value) {m_stop_loss=value;}
void TakeProfit (int value) {m_take_profit=value;}
must
void LimitMA (double value) {m_limit=value;}
void StopLoss (double value) {m_stop_loss=value;}
void TakeProfit (double value) {m_take_profit=value;}
물론 답장해 주셔서 대단히 감사합니다. 모든 것을 고쳤고 작동했습니다.
그러나 Expert Advisor 자체를 컴파일 할 때 컴파일러가 발견했다면 저 혼자서는 발견하지 못했을 오류가 발생했습니다. 그건 그렇고, 당신이 나에게 대답 할 때 당신은 눈에 띄지 않게 그것을 고쳤을 것이지만 기사의 원본 텍스트에 있습니다.
기사에서.
void Limit(double value) { m_limit=value; }
내 도움 요청에 대한 응답으로
void LimitМА(double value) { m_limit=value;}
신호 파일에 MA가 없으면 성공적으로 생성 된 후 Expert Advisor 자체를 컴파일 할 때 다음 오류가 발생합니다.
1 오류(들), 0 경고(들) 2 1
제 경우에는 적어도 77 줄에서 다음과 같이 표시됩니다.
signal.Limit(Inp_Signal_Sample_Limit);
Limit이라는 단어 뒤에 MA를 삽입합니다.
전문가 조언 텍스트의 오류가 사라집니다.
제가 틀렸다면 사과드립니다. 저는 전문가가 아닙니다.
그리고 한 가지 더: 이 오류는 어떤 경우에도 발생합니다:
'--' - l-값 필요 1234.mq5 31 57
'--' - l-값 필요 1234.mq5 31 59'--' - l-값 필요 1234.MQ5 31 61
'--' - L-값 필요 1234.MQ5 31 63
'--' - L-값 필요 1234.MQ5 31 65
'--' - L-값 필요 1234.MQ5 31 67
'--' - L-값 필요 1234.MQ5 31 69
'--' - L-값 필요 1234.MQ5 31 71
'--' - L-값 필요 1234.MQ5 31 73
'--' - L-값 필요 1234.MQ5 31 75
'--' - L-값 필요 1234.MQ5 31 77
'--' - L-값 필요 1234.MQ5 31 79
'--' - L-값 필요 1234.MQ5 31 81
'--' - L-값 필요 1234.MQ5 31 83
'--' - L-값 필요 1234.MQ5 31 85
'--' - L-값 필요 1234.MQ5 31 87
'--' - L-값 필요 1234.MQ5 31 89
'--' - L-값 필요 1234.MQ5 31 91
'--' - L-값 필요 1234.MQ5 31 93
'--' - L-값 필요 1234.MQ5 31 95
'--' - L-값 필요 1234.MQ5 31 97
'--' - L-값 필요 1234.MQ5 31 99
'--' - L-값 필요 1234.MQ5 31 101
'--' - L-값 필요 1234.MQ5 31 103
'--' - L-값 필요 1234.MQ5 31 105
'--' - L-값 필요 1234.MQ5 31 107
'--' - L-값 필요 1234.MQ5 31 109
'--' - L-값 필요 1234.MQ5 31 111
'--' - L-값 필요 1234.MQ5 31 113
'--' - L-값 필요 1234.mq5 31 115
'-' - 피연산자 예상 1234.mq5 31 117
'Inp_Signal_Sample_Expiration' - 선언되지 않은 식별자 1234.mq5 77 22
32 오류(들), 0 경고(들) 33 1
EA의 31번째 줄로 이동하여 다음을 확인합니다.
입력 double Inp_Signal_Sample_StopLoss =50.0;
입력 double Inp_Signal_Sample_TakeProfit=50.0;
input int Inp_Signal_Sample_Expiration=10-------------------------------------------------------------;
//--- 돈에 대한 입력
입력 double Inp_Money_FixLot_Percent =10.0;
입력 더블 Inp_Money_FixLot_Lots =0.1;
10에서 나오는 점선 형태의 꼬리를 제거하면 모든 오류가 사라집니다.
전문가 어드바이저가 작동하고 최적화할 준비가 되었습니다.

- www.mql5.com
예, 따라서 설명은 Limit이 아니라 LimitMA가 되어야 합니다.
네, LimitMA, 제가 찾아봤습니다.
일반적으로 앞으로는... 클래스 설명자를 만들 때 컴파일러가 주석(설명자를 구성하는)을 확인하지 않고 설명자의 메서드 이름과 매개 변수 이름의 일치가 중요하므로 복사 붙여넣기를 더 적극적으로 사용하세요. 이것은 전문가 어드바이저를 컴파일할 때만 나타나며 부정적인 감정을 유발합니다. 보시다시피 치명적인 것은 아닙니다.
그리고 한 가지 더: 이 오류는 어떤 경우에도 발생합니다:
'--' - l-값 필요 1234.mq5 31 57

- www.mql5.com
안녕하세요!
- 첨부 파일에 잘못 인쇄된 부분이 있습니다. sl 및 tp 변수를 계산하는 줄의 CheckOpenLong 함수에 대한 설명에서 부호가 반전되어 있어야 합니다.
- CheckOpenLong 함수를 다음과 같이 변경했습니다:
bool CSampleSignal::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { Print("Close(0)=",DoubleToString(Close(0),5)," Close(1)=",DoubleToString(Close(1),5)); Print("Open(0)=",DoubleToString(Open(0),5)," Open(1)=",DoubleToString(Open(1),5)); Print("MA(0)=",DoubleToString(MA(0),5)," MA(1)=",DoubleToString(MA(1),5)); return(false); }
즉, 단순히 마지막 및 이전 막대에 대한 Close, Open 및 MA 값을 출력해야 합니다. 따라서 EveryTick의 값이 거짓이면 모든 것이 정상적으로 작동하지만 참이면 값 대신 0을 출력합니다! 무엇이 문제인지 알려주실 수 있나요? 제가 뭘 잘못하고 있나요?
감사합니다!
안녕하세요!
- 첨부 파일에 잘못 인쇄된 부분이 있습니다. sl 및 tp 변수를 계산하는 줄의 CheckOpenLong 함수에 대한 설명에서 부호가 반전되어 있어야 합니다.
- 즉, 마지막 막대와 이전 막대에 대한 Close, Open 및 MA 값만 출력해야 합니다. 따라서 EveryTick의 값이 거짓이면 모든 것이 정상적으로 작동하지만 참이면 값 대신 0을 출력합니다! 무엇이 문제인지 알려주실 수 있나요? 제가 뭘 잘못하고 있나요?
감사합니다!
포인트 1에서 오류를 찾아주셔서 감사합니다. 수정하겠습니다.
2번 항목에서 MQL5와 작은 불일치가 있었는데 수정되었습니다. 다음 빌드에 반영될 예정입니다.
새로운 기고글 MQL5 마법사: 신호 거래 모듈을 만드는 방법 가 게재되었습니다:
이 글에서는 MQL5 마법사에 대해 생성된 클래스의 설명 형식 뿐 아니라, 가격과 이동 평균의 교차에 대한 신호 구현으로 자신만의 거래 신호 클래스를 작성하는 방법과 MQL5 마법사의 거래 전략 생성기에 포함하는 방법과 구조 뿐에 대해 설명합니다.
이 문서에서는 MQL5 마법사로 Expert Advisors를 생성할 때 이를 사용하기 위해 거래 신호 모듈을 작성하는 원칙을 설명합니다.
MQL5 Wizard로 생성된 Expert Advisor는 4개의 기본 요소(4개의 기본 클래스)를 기반으로 합니다.
작성자: MetaQuotes