MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 280

 
hamsteruser :

*리턴틱도 소멸되지 않습니다. 나는 단지 무역 터미널 의 배기 에 혼란 스러웠습니다 . 정리되지 않은 메모리에 대해 씁니다.


함수에 의해 반환된 포인터를 사용하는 모든 코드와 포인터를 파괴하는 순간을 제공하십시오. 당신을 돕기가 너무 어렵습니다.

 
Anatolij Povoroznyj :

안녕하세요. 코드 수정을 도와주세요. 고문은 일련의 주문을 열지 않고 첫 번째 이벤트에 대해 하나의 주문만 열어야 합니다.

이제 다음과 같이 작동합니다 . CCI가 위에서 아래로 라인 200을 넘으면 BY가 열리고 CCI가 위에서 아래로 200을 넘으면 다른 BY가 다시 열리는 식입니다. 맨 위로 모든 BAI가 닫히고 CELL이 열립니다.

묻고 싶은 것: CCI가 위에서 아래로 200선을 넘을 때 - BUY가 열리면(첫 번째이자 유일한 것) CCI가 아래에서 위로 -200선을 넘을 때까지 다른 BAIS는 열리지 않아야 하며, 반면 BUY는 닫히고 CELL은 열립니다. . (Mirror CELL 및 라인 -200)


해당 유형의 미결제 주문을 확인하는 기능을 추가합니다. 즉, 주문이 있는 경우 함수가 true를 반환하고 다음 주문이 열리지 않습니다.

 

아마도 주제에서 벗어났습니다.

MT4의 소원

저는 많은 경고를 사용하며 특정 매개변수에 맞춰져 있습니다.

매번 다시 모든 것을 입력하지 않기 위해 경고의 수명을 오랫동안 설정하고 필요에 따라 단순히 새로운 목표 가격으로 "재생"합니다.

경고 로그의 터미널에는 기호 또는 이벤트별로 정렬되지 않기 때문에 매번 올바른 경고를 검색하는 것은 매우 번거로운 일입니다.

"trade"탭과 같은 정렬을 할 수 있으면 좋을 것입니다.

 
hamsteruser :

포인터가 있는 함수가 있습니다.


나는 또한 다른 함수를 호출합니다:


그리고 그 뒤에있는 메모리를 청소하는 방법은 무엇입니까?

삭제 시(TickReturn); 피연산자 예외 오류가 있습니다.

TickReturn* rt = returntick( period, 1 );

int timeis = rt.curtime;

delete rt;
 
MMM1972 :

아마도 주제에서 벗어났습니다.

MT4의 소원

저는 많은 경고를 사용하며 특정 매개변수에 맞춰져 있습니다.

모든 것을 다시 입력할 필요가 없을 때마다 경고의 수명을 길게 설정하고 필요에 따라 새 목표 가격으로 간단히 "재생"합니다.

경고 로그의 터미널에는 기호 또는 이벤트별로 정렬되지 않기 때문에 매번 올바른 경고를 검색하는 것은 매우 번거로운 일입니다.

"trade"탭과 같은 정렬을 할 수 있으면 좋을 것입니다.

MT4 터미널은 더 이상 개발되지 않습니다. 발견된 버그만 수정됩니다.

 
Алексей Барбашин :

함수에 의해 반환된 포인터를 사용하는 모든 코드와 포인터를 파괴하는 순간을 제공하십시오. 도와드리기가 너무 어렵습니다.

기억은 정말 흐른다.

   class TickReturn

   {

   public :

       int curtime;

       double open;

       double close;

       double high;

       double low;

       double priceask;

       double pricebid;

      

   };



  TickReturn *returntick( int period, int timeposition)

   {

      TickReturn *returntick = new TickReturn();

       MqlRates rates[];

       MqlTick last_tick;

      

       if ( SymbolInfoTick (symbol,last_tick)){}

       else Print ( "SymbolInfoTick() failed, error = " , GetLastError ());

      

       //int timeposition=0;

       ArraySetAsSeries (rates, true );

       ArrayResize (rates, 1 );

       int copied= CopyRates (symbol,period,timeposition, 1 ,rates);

      

      returntick.curtime = rates[ 0 ].time;

      returntick.open = rates[ 0 ].open;

      returntick.close = rates[ 0 ].close;

      returntick.high = rates[ 0 ].high;

      returntick.low = rates[ 0 ].low;

      returntick.priceask = last_tick.ask;

      returntick.pricebid = last_tick.bid;

      

       return (returntick);

}

void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); Вот здесь пытаюсь уничтожить указатель. }

 
hamsteruser :

기억은 정말 흐른다.


무효 OnTick() { 정수 기간 = 15; int timeis = returntick(마침표, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); 여기에서 포인터를 파괴하려고 합니다. }


여기에서 정확히 무엇을 파괴할 수 있는지 어떻게 든 명확하지 않습니다. 당연히 메모리 누수가 발생합니다. 포인터 란 무엇입니까? 포인터는 생성된 동적 변수가 저장되는 메모리 주소에 대한 참조입니다. 사실, 당신은 클래스 변수에 대한 포인터를 얻기 위한 프로시저를 호출하고, 프로시저에서 클래스의 객체가 생성되고, 메모리에 배치되고, 포인터는 틱을 얻기 위한 함수로 반환되고 .... 함수가 나가면 파괴됩니다. 포인터가 파괴되었지만 메모리가 지워지지 않는다는 사실에 주목합니다! 그리고 새로운 메모리 틱이 있을 때마다 점점 더 많은 메모리가 소모됩니다! 코드 개정판에서 이 문제를 해결하려면 먼저 속기를 제거하고 포인터를 다른 변수에 넣어야 합니다. TickReturn* temptick = returntick(period, 1);// 포인터를 가져와 변수 int timeis = temptick 에 넣습니다. . 시간; // 포인터로 객체에서 원하는 값 가져오기 ...... delete temptick; // 포인터를 파괴하고 메모리를 지웁니다.

글쎄, 포인터를 파괴하기 전에 삭제 오류를 피하기 위해 정확성을 확인하는 것이 정확할 것입니다.

글쎄, 일반적으로 귀하의 질문에서 포인터와 특히 클래스에 신경 쓰지 않을 것입니다. 사실 작업이 훨씬 간단하고 클래스 자체를 사용할 필요가 없기 때문입니다. 필수 필드가 있는 구조를 만들고 이 구조의 유형으로 전역 변수를 선언하고 매 틱마다 이 구조의 정보를 업데이트하는 함수를 만들고 필요한 것을 수집합니다. 기능을 통해 구동해야 하며 포인터는 필요하지 않습니다.

 

1. mql4 도구를 사용하여 다른 Expert Advisors를 비활성화할 수 있습니까?

2. 주어진 ChartId 에 실행 중인 Expert Advisor가 있는지 확인?

 
Sergey Likho :

1. mql4 도구를 사용하여 다른 Expert Advisors를 비활성화할 수 있습니까?

2. 주어진 ChartId에 실행 중인 Expert Advisor가 있는지 확인합니까?


어드바이저 코드 내에서 거래를 금지하고 외부 파일에서 전환하면 다른 어드바이저가 더 이상 거래할 필요가 없다고 모든 어드바이저에게 알릴 수 있습니다.

 
Aleksey Vyazmikin :

어드바이저 코드 내에서 거래를 금지하고 외부 파일에서 전환하면 다른 어드바이저가 더 이상 거래할 필요가 없다고 모든 어드바이저에게 알릴 수 있습니다.


조건에 따라 조언자 A는 조언자 B를 꺼야한다는 아이디어입니다.