한 번에 둘 이상의 EA 실행 - 페이지 2

 

먼저 모든 변수를 의미 있는 기본값으로 초기화했는지 확인하십시오. 예를 들어 초기화되기 전에 BuyTicket을 사용하고 있으므로 처음 실행할 때 값이 될 수 있습니다.

MQL4 참조 파일(MQL4 참조/언어 기본/변수/변수 초기화)에서 발췌:

If a variable is not initialized explicitly, the value stored in this variable can be any. Implicit initialization is not used.

따라서 다음 부분에서 변수에 기본값을 추가합니다.

 //Global Variables
int BuyTicket;
int SellTicket;
double InternalStopLoss;
double CalcDigits;
double CalcPoint;
bool MABuyFanning;
bool MASellFanning;
int SelectedOrder;
bool Closed;
int ErrorCode;
string ErrLog;
double BuyStopLoss;
double SellStopLoss;
bool NewBar;
double ThisBarOpen;
double SmallMA;
double MediumMA;
double LargeMA; 
 

그리고 예, MQL4에는 버그와 단점이 있지만 대부분의 오류는 참조 매뉴얼의 기본 사항만 읽으면 피할 수 있습니다.

또한 MQL4 프로그램의 일반적인 버그에 대한 기사가 있습니다. 포럼 상단을 확인 하면 링크를 찾을 수 있습니다.

 
drazen64 :

먼저 모든 변수를 의미 있는 기본값으로 초기화했는지 확인하십시오. 예를 들어 초기화되기 전에 BuyTicket을 사용하고 있으므로 처음 실행할 때 값이 될 수 있습니다.

MQL4 참조 파일(MQL4 참조/언어 기본/변수/변수 초기화)에서 발췌:

따라서 다음 부분에서 변수에 기본값을 추가합니다.



사실이지만 사용법에 따라 다릅니다. 값을 가져올 위치를 알고 있기 때문에 선언하고 싶을 때도 있고 특정 기본값으로 초기화하지 않으면 올바르게 작동하지 않을 수 있으므로 무언가로 초기화해야 할 때도 있습니다.
 
deysmacro :

사실이지만 사용법에 따라 다릅니다. 값을 가져올 위치를 알고 있기 때문에 선언하고 싶을 때도 있고 특정 기본값으로 초기화하지 않으면 올바르게 작동하지 않을 수 있으므로 무언가로 초기화해야 할 때도 있습니다.


정의 위치에서 변수를 초기화할 필요는 없지만 변수를 사용하기 전에 어떤 값으로 초기화해야 합니다.

초기화 전에 사용하면 값을 예측할 수 없습니다. 그의 오류도 마찬가지입니다. 더 깊은 코드 분석 을 하기 전에 그는 이 문제를 처리해야 합니다.

최신 컴파일러는 초기화되지 않은 변수를 사용하려고 하면 오류가 발생합니다. MQL4는 불행히도 그렇지 않으므로 코더는 모든 것이 올바르게 초기화되었는지 확인해야 합니다.

 
적절한 초기화 없이 var를 사용한다는 을 지적할 수 있습니다.
 
deysmacro :
적절한 초기화 없이 var를 사용한다는 을 지적할 수 있습니다.


https://www.mql5.com/en/forum/151167/page2#954612 의 첫 번째 줄에서 두 번째 문장을 읽으십시오.

당신은 그것을 비판하기 전에 답변을 읽을 수 있습니다.

BTW, 여기서 어떻게 도와주나요? "똑똑하다"는 말은 별로 도움이 되지 않습니다.

 
for(Counter = 0; Counter <=OrdersTotal()-1; Counter++)
               {
               SelectedOrder = OrderSelect(Counter,SELECT_BY_POS);
               if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY)
                  {
                 // while(IsTradeContextBusy()) Sleep(10);
                  Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red);
                  if(Closed == true) BuyTicket = 0;
                  else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine");                  
                  }
            Counter--;               
                }
 

나는 내 것을 게시하기 전에 읽었습니다. 내 말은, 그에게 var와 관련된 한 가지를 보여주고 그 var가 제대로 초기화되지 않았다는 것입니다.


헤헤. GumRai가 이깁니다. XD

 

내가 당신을 올바르게 이해한다면, 당신은 프로그램이 시작될 때 BuyTicket 및 일부 다른 변수에 알 수 없는 값이 포함되어 있기 때문에 무슨 일이 일어날 수 있는지 정확히 지적하지 않았기 때문에 그가 초기화되지 않은 변수를 사용한다는 사실이 걱정할 일이 아니라는 말입니까?

글쎄, 그렇게 될 것입니다. 그가 초기화되지 않은 변수를 사용하게 하십시오. 무엇이 잘못될 수 있습니까?

 
제안한 대로 모든 변수를 초기화하고 부울에서 "==true"를 제거 했습니다. 또한 코드 줄 내부에서 모든 은행 공간을 제거했습니다. 저는 약 2시간 동안 랩톱과 PC에서 각각 하나씩 두 개의 다른 기호에 대해 디버거를 사용하여 테스트했으며 오류 없이 정확한 시간에 판매, 구매 및 닫기가 모두 정상적으로 작동했습니다. 그러나 그런 다음 PC와 랩톱의 다른 3개 기호에 EA를 추가하여 4개 모두가 두 터미널에서 모두 작동하고 그 이후로 모두가 입력 및 종료를 놓치기 시작했습니다. 테스트가 끝나면 한 터미널에서 열린 위치를 닫기 전에 EA를 제거하고 다른 터미널에서 열린 위치를 닫은 후 EA를 제거했습니다. 여전히 열려 있는 위치가 있는 터미널은 EA를 제거하는 데 매우 오랜 시간이 걸렸지만 열린 위치가 없는 터미널은 4개의 EA를 모두 즉시 제거했습니다. 수정된 코드는 아래에 별도로 게시됩니다.