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

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

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


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

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

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


감사합니다. 왜 축소로 전환했는지 기억하고 변수는 주기적으로 업데이트되지 않으며(함수가 호출되지 않는 것이 분명합니다) 재채기할 때마다 새 항목을 만든 다음 종료해야 합니다. 일반적으로 returntick을 스위치로 변환하는 것이 더 쉽습니다.

 
Vitaly Muzichenko :

계정 번호로 서버에 사후 요청 보내기

서버에서 CSV 파일의 모든 행으로 수신 번호를 확인하고 일치하는 경우 파일의 이 행에서 터미널에 대한 응답으로 메시지를 보냅니다. 터미널에서 서버의 응답을 읽어 차트에 표시하는 일만 남았습니다.

일반적으로 이러한 것들은 파일보다 MySQL에서 구현하기가 더 쉽습니다.


답변 감사합니다, 비탈리!

3일 동안 알아내려고 노력했지만, 지금까지 아무것도 나오지 않았습니다(저는 아직 초보자입니다-여행 초기에) ...

조금 더 자세히 설명해 주시겠습니까? 몇 가지 예를 들면...

무지해서 죄송합니다...

 

그리고 질문 하나 더..

나는 Ray가 현재 가격 에서 선을 그리게 하고 싶었습니다. 하루가 끝날 때까지 레벨이 끝날 때까지(23:59) (white2), 하지만 시간이 지나면서 하루가 끝날 때까지 그립니다. ), 그러나 수준(white2)에는 없지만 그래프의 경계 깊숙이 남습니다.

또한, 레벨(red1, red2 등) 중 하나를 거기에 넣습니다. 그러나 Ray는 무한대로 올라가거나 내려갑니다. 그리고 Beam의 시작은 항상 High [ 0 ] 로 시작한다고 올바르게 썼습니까? 새 양초 에서 시작은 새 양초로 이동합니다(즉, 가격을 따릅니다). 아니면 Ray를 한 번만 그리나요? 레벨은 CSV에서 가져옵니다. 도와주세요...

 if (уровни==Daily)
        {
         double red1 = d_input[ 0 ];
         double red2 = d_input[ 1 ];
         double blue1 = d_input[ 2 ];
         double blue2 = d_input[ 3 ];
         double white = d_input[ 4 ];
         double signal= d_input[ 5 ];
         double z_1 = d_input[ 6 ];
         double z_2 = d_input[ 7 ];
         double white2 = d_input[ 8 ];
                 
         t0 = дата_уровней + 1 * PeriodSeconds ( PERIOD_M1 );
         t1 = дата_уровней + 24 * PeriodSeconds ( PERIOD_H1 );

         Draw_Level( "red1" , red1, c_day_1, STYLE_SOLID , 2 );  
         Draw_Level( "red2" , red2, c_day_1, STYLE_SOLID , 2 );  
         Draw_Level( "blue1" , blue1, c_day_2, STYLE_SOLID , 2 );  
         Draw_Level( "blue2" , blue2, c_day_2, STYLE_SOLID , 2 );  
         Draw_Level( "white" , white,c_day_3, STYLE_SOLID , 2 );
         Draw_Level( "white2" , white2,c_day_3, STYLE_DOT , 0 );
        
         Draw_Level( "green1" ,z_1, c_day_4, STYLE_SOLID , 2 );
         Draw_Level( "green2" ,z_2,c_day_3, STYLE_DOT , 2 );
               
         string name = "Ray" ;
         int window = 0 , time1 = ( int ) Time [ 0 ], time2 = ( int ) StrToTime (txt_data+ " 23:59" );
           double price1 = High [ 0 ], price2= white2 ;
         
           ObjectCreate (name, OBJ_TREND , window, time1, price1, time2, price2);
           ObjectSet (name, OBJPROP_COLOR , clrAqua );
           ObjectSet (name, OBJPROP_RAY_RIGHT , false );
           ObjectSet (name, OBJPROP_WIDTH , 1 );
           ObjectSet (name, OBJPROP_STYLE , 2 );
              
        
         if (показ_не отработанных)
             if (!check_white_level(дата_уровней,white))
               draw_line(t0,white,c_day_3);
                 else (Draw_Level( "white" , white,c_day_3, STYLE_SOLID , 1 )); // меняет толщину белой при достижении ценой
                
        }
 
MosheDayan :

그리고 질문 하나 더..

나는 Ray가 현재 가격 에서 선을 그리게 하고 싶었습니다. 하루가 끝날 때까지 레벨이 끝날 때까지(23:59) (white2), 하지만 시간이 지나면서 하루가 끝날 때까지 그립니다. ), 그러나 수준(white2)에는 없지만 그래프의 경계 깊숙이 남습니다.

또한, 레벨(red1, red2 등) 중 하나를 거기에 넣습니다. 그러나 Ray는 무한대로 올라가거나 내려갑니다. 레벨은 CSV에서 가져옵니다. 도와주세요...

Alert 또는 Print 로 white2 의 값을 알아내십시오(확인 지정).
 
STARIJ :
Alert 또는 Print를 사용하여 white2의 값을 알아내십시오(확인 지정).
나는 Alert의 도움으로 즉시 "EURUSD Error FileOpen() for write"를 작성하고 현재 날짜의 모든 수준이 사라지고... 어제와 모든 과거 수준이 남아 있음을 알았습니다... 방법. 하지만 하루가 끝날 때까지는 아닙니다. , 하지만 오늘은 세로로 내려가면 어제의 white2 수준에서 멈추는 것이 시각적으로 명확합니다.
 
MosheDayan :
나는 Alert의 도움으로 즉시 "EURUSD Error FileOpen() for write"를 작성하고 현재 날짜의 모든 수준이 사라지고... 어제와 모든 과거가 남아 있다는 것을 알게 되었습니다... 방법. 하지만 하루가 끝날 때까지는 아닙니다. 그러나 오늘은 수직으로 내려가면 어제의 white2 수준에서 멈추는 것이 시각적으로 분명합니다.

파일에 액세스하려는 이유는 무엇입니까? white2 값이 있고 이를 사용하기 전에 Alert ("white2 = ", white2)로 표시합니다.

 
STARIJ :

파일에 액세스하려는 이유는 무엇입니까? white2 값이 있고 이를 사용하기 전에 Alert("white2 = ", white2);로 표시합니다.

설명에 감사드립니다.... 그것이 말하는 것입니다: white2 = 0.0

추신 나는 바보입니다 ... white2 = 0.0 다른 통화 쌍에 대해 씁니다. CSV에는 수준이 없습니다. 그리고 CSV의 EURUSD에는 수준이 있으며 경고는 어제(white2 1.1720)에 대해 오늘(white2 1.1810)에 대한 수준을 보여줍니다.

빔은 필요한 곳에서 시작하지만 어제의 흰색 2 수준, 즉 1.1720으로 이동하지만 오늘은 1.1810이어야 하며 하루의 끝 23:59에 떠나지 않지만 오늘 시각적으로 볼 수 있습니다. 어제의 white2 수준, 즉 1.1720에서 멈춥니다.

 

이해할 수 없는

기능 설명

정수 IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

경고 ("IsBelow 구걸");

경고("NextTick=",NextTick);

//--------


//--------

경고("NextTick=",NextTick);

Alert("종료 IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

함수 본문 세미콜론이 만료되기 전에 메시지를 받았습니다. {

질문은 세미콜론이 무엇을 예상했습니까?

설명을 부탁드립니다...

 
buyanov :

이해할 수 없는

기능 설명

정수 IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("IsBelow를 요청하세요");

경고("NextTick=",NextTick);

//--------


//--------

경고("NextTick=",NextTick);

Alert("종료 IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

함수 본문 세미콜론이 만료되기 전에 메시지를 받았습니다. {

질문은 세미콜론이 무엇을 예상했습니까?

설명을 부탁드립니다...


무효 IsBelow()

 
buyanov :

이해할 수 없는

기능 설명

정수 IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("IsBelow를 요청하세요");

경고("NextTick=",NextTick);

//--------


//--------

경고("NextTick=",NextTick);

Alert("종료 IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

함수 본문 세미콜론이 만료되기 전에 메시지를 받았습니다. {

질문은 세미콜론이 무엇을 예상했습니까?

설명을 부탁드립니다...

답은 여기
Функции - Основы языка - Справочник MQL4
Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Функции - Основы языка - Справочник MQL4