기고글 토론 "초보자를 위한 MQL5 Expert Advisor 코드 작성 가이드" - 페이지 21

 

안녕하세요,

MQL5 (그리고 그 문제에 대한 FOREX)를 처음 사용하지만 오랜 프로그래머입니다. My_First_EA.mq5 파일을 열고 컴파일했지만 디버그 기능이 표시되지 않습니다. 예제 스크립트 파일을 열면 디버그 옵션이 표시됩니다. 또한 경고 반환 값인 'OrderSend'를 확인해야 합니다. 디버그 기능을 사용하려면 어떻게 해야 하나요?

Louis

 
louisd:

안녕하세요,

MQL5 (그리고 그 문제에 대한 FOREX)를 처음 사용하지만 오랜 프로그래머입니다. My_First_EA.mq5 파일을 열고 컴파일했지만 디버그 기능이 표시되지 않습니다. 예제 스크립트 파일을 열면 디버그 옵션이 표시됩니다. 또한 경고 반환 값인 'OrderSend'를 확인해야 합니다. 디버그 기능을 사용하려면 어떻게 해야 하나요?

Louis

안녕하세요,

제 문제를 해결했습니다. 전문가 어드바이저 마법사를 사용하여 새 프로젝트를 만든 다음 My_First_EA.mq5 파일을 복사하면 디버그 기능이 나타납니다.

Louis

 
louisd:

안녕하세요,

제 문제를 해결했습니다. 전문가 어드바이저 마법사를 사용하여 새 프로젝트를 만든 다음 My_First_EA.mq5 파일을 복사하면 디버그 기능이 나타납니다.

Louis

하지만 '주문 전송을 확인해야 합니다'라는 경고는 수정하셨나요?
 
Boobwood:

4756 오류가 발생했습니다. 2 페이지에서 해결책을 보았고 원본 코드를 확인했는데 218 줄 자체에 ZeroMemory (mrequest)가있었습니다. 그러나 여전히 4756 오류가 발생했습니다.


또한 제안된 두 가지 수정 사항을 모두 적용한 후에도 여전히 오류가 발생합니다:

제로메모리(mrequest);

그리고 또한

if(Buy_opened || Sell_opened)

4756 오류에 대해 도와주실 수 있나요? 매수 주문을 할 수 없는 것 같습니다.

 
Tchuso:

안녕하세요, 오류가 발생했습니다:

'OrderSend'의 반환 값은 213줄과 259줄을 확인해야 합니다.


해결하셨나요?

안녕하세요 추소님,

저도 같은 일이 발생했습니다. 두 작업의 해당 줄을 이것으로 교체하여 문제를 해결했습니다.

if(!OrderSend(mrequest,mresult))
PrintFormat("OrderSend error %d",GetLastError());

도움이 필요하시면 말씀해주세요 저도 초보자거든요.

잘 부탁드립니다!

 

예제 코드가 아주 마음에 들었고, 저도 처음 사용해서 댓글에 나온 대로 코드를 수정했는데 더 이상 오류가 발생하지 않습니다.

문제는 로봇이 거래를 시작하지 않고 거래를 시작하지도 않는다는 것입니다.

누구든지이 문제를 해결할 수 있었습니까?


전략 테스터의 "유니코" 옵션을 사용하고 있습니다: 제 실수인가요?


시간과 지원에 감사드립니다.
 


로봇이 주문을 열려고 시도하지만 항상 오류가 발생하는 것을 발견했습니다:


Exit:

2020.05.06 20:35:16.141 코어 1 2020.04.20 20:25:00 시장가 매도 0.10 EURUSD sl: 1.08965 tp: 1.07665 [잘못된 요청] 실패.


코드에서 몇 가지를 변경했지만 작동하지 않아서 제가 가진 코드를 추가합니다:


원본: mrequest.type_filling = "문서에 있는 3가지 방법으로 넣었습니다".

 mrequest.action = TRADE_ACTION_DEAL;                                  // 즉시 주문 실행
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // 최근 요청 가격
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // 손절매
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // 수익 창출
         mrequest.symbol = _Symbol;                                            // 통화 쌍
         mrequest.volume = Lot;                                                 // 거래할 랏 수
         mrequest.magic = EA_Magic;                                             // 매직넘버 주문
         mrequest.type = ORDER_TYPE_BUY;                                        // 주문 구매
         mrequest.type_filling = ORDER_FILLING_RETURN;                             // 주문 실행 유형
         mrequest.deviation=100;                      
        



Tambien he probado este codigo:

 //--- 요청 및 결과의 선언 및 초기화
               MqlTradeRequest request={0};
               MqlTradeResult  result={0};
            //--- 애플리케이션 매개변수
               request.action   =TRADE_ACTION_DEAL;                     // 비즈니스 운영 유형
               request.symbol   =Symbol();                              // 심볼
               request.volume   =0.1;                                   // 볼륨 0.1 로트
               request.type     =ORDER_TYPE_BUY;                        // 주문 유형
               request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // 시초가
               request.deviation=5;                                     // 허용 가격 편차
               request.magic    =EA_Magic;                          // 주문의 마법 번호

               //--- 애플리케이션 보내기
               if(!OrderSend(request,result))
               PrintFormat("OrderSend error %d",GetLastError());     // 요청을 보낼 수 없는 경우 오류 코드를 입력합니다.
               //--- 작업에 대한 정보
               PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
 
Libni Colina:


로봇이 주문을 열려고 시도하지만 항상 오류가 발생하는 것을 발견했습니다:


종료:

2020.05.06 20:35:16.141 코어 1 2020.04.20 20:25:00 시장가 매도 실패 0.10 EURUSD sl: 1.08965 tp: 1.07665 [유효하지 않은 요청].


코드에서 몇 가지를 변경했지만 작동하지 않아서 제가 가진 코드를 추가합니다:


원본: mrequest.type_filling = "문서에 있는 3가지 방법으로 넣었습니다."


코드 맨 위에 이 코드를 추가합니다:

#include <Trade\Trade.mqh>

그리고 작업을 열려면 이렇게 입력하세요:

double volumen= 0.01; // 또는 원하는 볼륨

CTrade m_trade;

m_trade.Buy(volumen); // 구매

m_trade.Sell(volumen); // 판매
 
안녕하세요, 튜토리얼에 감사드립니다. 매우 도움이되었습니다. 하지만 한 가지 오해가 있는데, CopyTimes 함수로 New_Time 변수를 선언하고 초기화했지만 Old_Time은 선언되었지만 처음에는 초기화되지 않았고 New_Time 변수와 비교하여 새 막대가 있는지 확인했습니다. Old_Time은 비어 있어야 합니다. 잘 설명했는지 모르겠지만 읽어 주셔서 감사합니다.
 

안녕하세요,


마찬가지로 테스트를 실행할 때 오류 코드 4756이 발생하고 " 판매 주문 요청을 완료 할 수 없습니다"라고 표시됩니다.

이 문제를 해결하는 방법을 알려주세요.


Thank