오류, 버그, 질문 - 페이지 567

 
일반적으로 CTrade 를 통해 작동했습니다. 파일의 도움으로 모든 것을 다시 실행해야합니다. 헬리콥터에서 다시 잠수함 .. 그러나 붐 붐이 없다고 말할 수는 없습니다. :)
 

흠 .. 원칙적으로는 다 똑같습니다 ..

 

새 빌드는 루프에서 간단한 구조 복사를 중지했습니다. 테스트 스크립트는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                             Test_Copy_Struct.mq5 |
//+------------------------------------------------------------------+
struct   trade_settings
  {
   int       reopened;
   int       reverse; 
   int       TrailingStop;
   int       WithoutlossLevel;
   int       WithoutlossProfit;
   double    LossToReverse;
   int       MAPeriod;
   int       MA_use;
   double    Lots;
   int       takeprofit; 
  };
trade_settings arr_tr_set_ini[ 3 ]={  
 { 60 , 90 , 1000 , 100 , 900 , 2000.0 , 105 , 1 , 0.13 , 2700 },   // EURUSD
 { 130 , 1298 , 400 , 300 , 600 , 1000.0 , 130 , 1 , 0.1 , 2800 },   // GBPUSD
 { 110 , 140 , 200 , 600 , 800 , 1000.0 , 85 , 0 , 0.15 , 1700 }};   // AUDUSD 
trade_settings symb_default={ 110 , 130 , 200 , 1300 , 1500 , 3000.0 , 100 , 1 , 0.1 , 1000 };

class CTest_Copy_Struct
  {  
protected :
   trade_settings    m_tr_set;
public :
   void               Copy_tr_set( const trade_settings& tr_set){m_tr_set=tr_set;}
   void               Print_tr_set(){ printf ( "Setting reopened=%u overpos=%u TrailingStop=%u WithoutlossLevel=%u WithoutlossProfit=%u" 
                        ,m_tr_set.reopened,m_tr_set.reverse,m_tr_set.TrailingStop,m_tr_set.WithoutlossLevel,m_tr_set.WithoutlossProfit);
                         printf ( "LossToReverse=%.2f MAPeriod=%u MA_use=%u Lots=%.2f takeprofit=%u"
                        ,m_tr_set.LossToReverse,m_tr_set.MAPeriod,m_tr_set.MA_use,m_tr_set.Lots,m_tr_set.takeprofit);}
   void               Zero(){ ZeroMemory (m_tr_set);} 
  };

void OnStart ()
  {
   CTest_Copy_Struct Test; 
   Test.Zero();
   Test.Print_tr_set();
   Print ( "------------------------------" );
   Test.Copy_tr_set(arr_tr_set_ini[ 0 ]);
   Test.Print_tr_set();
   Print ( "------------------------------" );
   Test.Copy_tr_set(arr_tr_set_ini[ 2 ]);
   Test.Print_tr_set();
   Print ( "------------------------------" );
   Test.Copy_tr_set(symb_default);
   Test.Print_tr_set();
   int total= ArraySize (arr_tr_set_ini);
   for ( int i= 0 ;i< 3 ;i++)
     {
       Print ( "i=" ,i);
      Test.Copy_tr_set(arr_tr_set_ini[i]);
      Test.Print_tr_set();
     } 
  }
//+------------------------------------------------------------------+
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Valmars :

결과:

2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) 'E:\Program Files\Championship_2011\MQL5\Scripts\Test_Copy_Struct.ex5'의 0x00000000209FFFAC에 대한 액세스 위반 읽기
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) i=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=3000.00 MAPeriod=100 MA_use=1 lot=0.10 takeprofit=1000
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) 설정 재개됨=110 overpos=130 TrailingStop=200 WithoutlossLevel=1300 WithoutlossProfit=1500
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=1000.00 MAPeriod=85 MA_use=0 lot=0.15 takeprofit=1700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) 설정 재개됨=110 overpos=140 TrailingStop=200 WithoutlossLevel=600 WithoutlossProfit=800
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=2000.00 MAPeriod=105 MA_use=1 lot=0.13 takeprofit=2700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) 설정 재개됨=60 overpos=90 TrailingStop=1000 WithoutlossLevel=100 WithoutlossProfit=900
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=0.00 MAPeriod=0 MA_use=0 랏=0.00 takeprofit=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) 설정 재개됨=0 overpos=0 TrailingStop=0 WithoutlossLevel=0 WithoutlossProfit=0

 

https://www.mql5.com/ru/docs/basis/function/events 에서 " 더 나은 이해를 위해 표시기를 실행하는 것이 유용할 것입니다. 코드는 아래에 첨부되어 있습니다. "

코드가 시작되었습니다. 주말에. 더 나은 이해는 일어나지 않았습니다. 제 생각에는 정상이었지만 최악의 인상이 추가되었습니다. 주말에는 틱이 없으므로 이 시점에서 prev_calculated = 0은 시간대에서 시간대로 전환할 때 항상 다음과 같습니다.

그러나 어느 좋은 순간에 나타납니다(재연결이 없었습니다. 솔직히 고귀합니다!). 값은 다음과 같습니다.

차트의 재미있는 선:

또는 다음과 같이 2배 덜 재미있습니다.

스토리 초반에 지그재그 형태의 대사도 있었다.

선은 다른 TF에도 나타나지만 더 드물게 나타납니다. 이것은 스스로 쉽게 확인할 수 있습니다.

그것이 작가들이 진정 말하고 싶었던 것이었을까?

prev_calculated 의 결과가 진드기가 없을 때 적어도 동일하지 않거나 완전히 이상한 이유는 무엇입니까? TF에서 TF로 점프할 때 뭔가 실패합니까?

이(또는 다른) 선이 눈금 외부에 나타나야 합니까?

드문 경우지만 시간 프레임에서 시간 프레임으로 비교적 빈번하게 이동하면 기록 등의 막대 값 계산을 시작하는 의사 눈금과 같은 것을 생성할 수 있습니까?

터미널 변동성이 수정될 것으로 예상해야 합니까? 아니면 재료를 배워야 하나요?

내가 원하지 말아야 할 일을 하려고 하는 걸까? 이 경우 귀하의 관점을 정당화하십시오.

질문이 많이 쌓여 ... 그러나 이것은 시작에 불과합니다 ...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

계속...

동일한 링크에는 " 참고 : OnCalculate 함수가 0 값을 반환하면 표시기 값은 클라이언트 터미널의 DataWindow에 표시되지 않습니다. "

알다시피, 문제가 무엇입니까 ... 필요한 경우 손이 자라는 곳이라면 어디든 기꺼이 동의하고 필요한 경우 곧게 펴기 위해 달려갑니다. 하지만. 단순한 지표와 중간 정도의 복잡성에서도 여전히 버그가 있는 특정 상황에서 벗어날 수 있습니다. 그러나 코드의 복잡성이 증가함에 따라 Copy...() 복사 함수(다른 표시기의 핸들을 인수로 받아들이는 함수와 없는 함수)는 개인적으로 생각하기에 상황을 상당히 복잡하게 만들기 시작합니다. MQL 프로그래밍을 한지 일주일도 안되었습니다. 코드에서 다른 무엇을 변경할 수 있는지 더 이상 알 수 없는 임계값이 옵니다. 변경할 수 있는 모든 것과 나머지는 변경할 필요가 없기 때문에 전혀 건드릴 필요가 없기 때문입니다. 문제를 해결하십시오. 또는 완전히 무장 해제하는 생각이 들어옵니다. 삶의 특성과 터미널의 변동이 미리 고려되지 않았기 때문에 알고리즘을 완전히 변경합니다. 결국, 문서에서 MQL을 연구하는 과정에서 개발자가 의도치 않게 숨길 수 있는 뉘앙스를 처리해야 합니다. 결국 MQL 프로그래머는 문서를 충분히 연구한 후에도 많은 것을 배우지 못합니다. 그리고 가장 불쾌한 것은 터미널의 많은 모호한 부분을 MQL을 통해 전혀 수정할 수 없거나 모호한 목발에 코드를 작성하고 언젠가는 충돌하는 데 상처를 입습니다 ...

알았어... 나 오늘 미쳤어. 아직 쉬는 날.

그리고 여기 이른 아침에 말하고 싶었던 것은 ...

https://www.mql5.com/ru/forum/1111/page570#comment_117425 - 터미널 초기 실행 시 표시기가 그려지지 않는 주요 문제가 어떻게 든 해결되었습니다 (아무도 그 사실에 대해 논쟁하지 않기를 바랍니다. 최소한 프랙탈 표시기는 틱이 없는 경우에도 전체 기록을 올바르게 그리는 것을 방해하지 않아야 합니다.).

그것은:

             CopyHigh ( _Symbol , PERIOD_M1 ,TimeUpBuffer[shift+ 1 ]- 1 ,
                                    TimeUpBuffer[shift],
                                    exact_extremum);

다음으로 대체됨:

             if ( CopyHigh ( _Symbol , PERIOD_M1 ,TimeUpBuffer[shift+ 1 ]- 1 ,
                                       TimeUpBuffer[shift],
                                       exact_extremum)< 0 ) return ( 0 );

나는 내 부주의와 결과적으로 해로운 형식주의를 인정합니다.

하지만. 이것은 가장 단순한 경우에 도움이 되었습니다(특히 원래 지표를 단순화함). 더 복잡한 표시기에서는 이러한 트릭이 더 이상 도움이 되지 않았습니다. 특히 복사 기능이 많이 있기 때문에 어떤 시점에서 변경 사항이 더 이상 차이를 나타내지 않았습니다. 그리고 어디에서 어떻게 진행해야 하는지 알기 쉬운 지시를 받고 싶습니다. 결국 데크의 그루터기를 통해 작동하는 작업에 너무 많은 시간이 소요됩니다. 여기까지가 내 캔트인지 터미널인지 도무지 이해가 되지 않는다. 그리고 기본 렌더링의 문제가 if 및 return의 부족에만 있는지 확신할 수 없습니다. 예를 들어 else ...

개발자 - 필요한 경우 PM에 코드를 던질 것입니다. 동시에 의도된 목적을 위해 유사한 것을 연결할 수 있지만 다르게 구현되고 문제 없이 즉시 작동합니다(완성되는 작업과 목표에는 적합하지 않지만).

 
Print 기능을 터미널의 Experts 탭에 기록하는 과정은 물론이고 RAM과 디스크에 있는 파일에 기록하는 과정이 별도의 과정인가요? 분리된 느낌인데 터미널이 꽁꽁 얼어붙지 않는데, 집약적 벌목을 하다보면 마치 벽돌을 쌓은 것처럼 느려지는 이유가 뭘까요? 어떻게 든 다운로드 할 수 있습니까? 매우 평균적인 ArraySize 의 배열 요소 를 표시하기로 결정하면 브레이크가 매우 눈에 띄며 더 큰 크기의 배열 요소 값을 표시하는 것을 즉시 잊을 수 있습니다.
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 

터미널이 캐시와 함께 이상하다는 강한 의심이 있습니다 (나는 거의 주제에서 벗어 났으므로 ...). 설상가상으로 MetaEditor조차도 터미널에서 그 시간에 일어나는 일의 처리에 어떻게든 영향을 미칩니다.

나는 MQL 프로그램(디버깅 데이터를 Expert의 책갈피 로그에 인쇄)의 코드를 변경하고, 다시 컴파일하고, 터미널 창으로 이동하여 이전 결과가 어떻게 반복되는지 볼 때 반복적으로 문제가 발생했습니다. 이전에 완료되지 않은 프로그램 출시의 지연된 완료와 같은 것이 아닙니다. MetaEditor에서 F7을 통해 실행을 위해 업데이트된 코드를 일종의 컴파일하고 전송하는 것으로 나타났습니다. 그 동안 터미널에는 이전 코드(캐시에서 또는 무엇인가? .. 또는 그 운영 체제 "리깅" 메모리 페이지처럼 보입니다. "이빨에 끼인" .ex5 코드의 이전 버전은 terminal.exe 프로세스를 완전히 언로드하는 것뿐만 아니라 드문 경우에 MetaEditor를 닫는 것만으로 취소/언로드할 수 있다는 점이 궁금합니다. 그것이 당신이 원하는 방식이며 이해합니다. 저는 개인적으로 관찰한 것을 다시 말했습니다.

최근에 공사가 다음과 같은 상황이 있었습니다.

 Print ( 1 );
for ( int e= 0 ; e<ArraySize(Arr); e++)
{
   Print (Arr[e]);
}
첫 번째 Print의 값만 표시했지만 배열 요소의 값이 다음에 표시될 때까지 기다리는 것은 쓸모가 없었습니다. 첫 번째 Print를 제거하고 다시 컴파일한 후 배열 요소의 순환 출력이 즉시 시작되었습니다. MQL5-커뮤니티에 대한 Prints의 비밀 음모입니까 아니면 나만 운이 나쁜 사람입니까?

또한 터미널 동작의 이러한 이상한 경우는 차트 창, 그래픽 개체 및 MQL 프로그램으로 오버로드된 MT5 인스턴스에서 관찰되지 않고 단일 깨끗한(실행 중인 표시기의 스케치 제외) 차트 창에서만 관찰되었다는 점에 주목합니다.

 
x100일중 문제에 더 잘 대처하십시오 - C 또는 다른 언어로 작성하십시오. 결국 우리가 터미널에서 필요한 것은 견적, 계좌 정보, 동반 주문뿐이고 나머지는 전문 프로그래밍 환경에서 작성하고 라이브러리를 통해 연결할 수 있습니다. 그리고 어느 순간 무언가가 바뀔 것이고, 프로젝트가 크면 왜 그것이 작동하지 않는지 끝을 찾지 못할 것입니다. 질문은 - 그러한 모험을 위한 것입니다 :) 무엇을, 왜 찾을 때까지...
 
ivandurak :

1. ArrayInitialize 코드가 작동하지 않습니다. 주기의 주석을 제거하면 모든 것이 정상입니다.

2. 그런데 클래스의 변수와 글로벌 수준의 인디케이터를 같은 이름으로 선언하면 경고창이 뜹니다.

1. PlotIndexSetDouble(z,EMPTY_VALUE)은 init의 표시기 버퍼에 사용됩니다 .

2. 팝업. 따라서 이에 대해 조치를 취해야 하므로 클래스 멤버에 "m_" 접두사를 표시하는 것이 좋습니다.

Документация по MQL5: Пользовательские индикаторы / PlotIndexSetDouble
Документация по MQL5: Пользовательские индикаторы / PlotIndexSetDouble
  • www.mql5.com
Пользовательские индикаторы / PlotIndexSetDouble - Документация по MQL5