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

 
Mihail Matkovskij :

알렉세이, 내 메시지를 왜곡하여 나를 대신하여 개발자에게 클레임처럼 보이게 만드는 것 외에 다른 할 일이 없습니까? ... 당신 편에서 그런 이상한 "열정"을 일으키는 원인이 무엇인지 궁금합니다. 초보분들은 여기에서 엉뚱한 질문보다는 관련 분야에서 도움을 받는 것이 좋을 것 같습니다.   공부하다!...

그러나 여전히 "버그"를 명확하게 작성했습니다. 이것은 보고하는 플랫폼의 결함을 나타내며 문서를 논리적으로 읽지 못한 것이 아닙니다.

 
Artyom Trishkin :

그러나 여전히 "버그"를 명확하게 작성했습니다. 이것은 보고하는 플랫폼의 결함을 나타내며 문서를 논리적으로 읽지 못한 것이 아닙니다.

네, 제가 망쳤습니다. ObjectDelete 함수 에 대한 설명에서 메모를 읽었지만 어쩐지 그 안에 모든 것이 들어 있다고 생각하지 않았습니다 ... 누가 일어나지 않습니까? ...

그러나 모든 것이 원을 그리며 진행됩니다. 더 정확하게는 내가 잘못 썼거나 뒤죽박죽이 된 것을 둘러 보며 ... 그러나 어떤 이유로 아무도이 버그를 해결하는 방법에 대해 말하지 않았습니다 ... 물론 제안 된 ObjectsDeleteAll 기능을 제외하고 다시 실행해야합니다. 내가 가장 원하지 않는 것과 상관없이 전체 프로젝트.

 
Mihail Matkovskij :

네, 제가 망쳤습니다. ObjectDelete 함수 에 대한 설명에서 메모를 읽었지만 어쩐지 그 안에 모든 것이 들어 있다고 생각하지 않았습니다 ... 누가 일어나지 않습니까? ...

그것은 일어난다 ...

 

Mihail Matkovskij :

... 웬일인지 아무도이 버그를 해결하는 방법에 대해 한마디도 말하지 않았습니다 ... 물론 제안 된 ObjectsDeleteAll 기능을 제외하고 는 전체 프로젝트를 다시 실행해야합니다 . 이것은 내가 원하는 마지막 것입니다. .

여전히 그래픽 개체의 이름에 접두사를 사용하십시오. 이것은 개체를 식별하는 일반적인 방법입니다. 접두사를 사용하여 동시 제거와 함께 쓰레기를 확인합니다.

개체 이름에 접두사를 추가하면 전체 프로젝트 를 다시 수행해야 합니까?

절차적 스타일로 작성합니까? 따라서 객체 이름을 생성하는 기능을 변경하는 것은 그리 어렵지 않습니다.

 
Artyom Trishkin :

여전히 그래픽 개체의 이름에 접두사를 사용하십시오. 이것은 개체를 식별하는 일반적인 방법입니다. 접두사를 사용하여 동시 제거와 함께 쓰레기를 확인합니다.

개체 이름에 접두사를 추가하려면 전체 프로젝트를 다시 실행해야 합니까?

글쎄, 다른 옵션이 없다면 시도하겠습니다.

Artyom Trishkin :

절차적 스타일로 작성합니까? 따라서 객체 이름을 생성하는 기능을 변경하는 것은 그리 어렵지 않습니다.

시시피언 노동?... :)


내 표시기 버그의 원인을 찾는 데 도움을 준 Rashid Umarov 에게 감사드립니다!
 
Mihail Matkovskij :

알렉시, 내 메시지를 왜곡하여 나를 대신하여 개발자에게 주장하는 것처럼 보이게 만드는 것 외에는 다른 할 일이 없습니까? ... 당신 편에서 그런 이상한 "열정"을 유발한 이유가 무엇인지 궁금합니다. 초보분들은 여기에서 엉뚱한 질문을 하시는 것보다 관련 분야에서 도움을 받으시는게 좋을 것 같습니다.   공부하다!...

그래서 여기에서 나는 당신을 도우려고 합니다. 어디가 틀렸는지 설명하겠습니다. 그래픽 개체를 삭제하는 다른 옵션을 시도하면 문제가 없습니다. 그리고 당신이 언급한 모든 버그가 사라질 것입니다. 여기에서 어떤 것도 왜곡할 필요가 없다고 당신은 말했습니다.

 
Alexey Viktorov :

그래서 여기에서 나는 당신을 도우려고 합니다. 어디가 틀렸는지 설명하겠습니다. 그래픽 개체를 삭제하는 다른 옵션을 시도하면 문제가 없습니다. 그리고 당신이 언급한 모든 버그가 사라질 것입니다. 여기에서 어떤 것도 왜곡할 필요가 없다고 당신은 말했습니다.

나는 당신을 도우려고 노력하고 동시에 당신을 근거없이 고발하고 추가하는 것을 잊지 마십시오. 그런 열광의 원인이 무엇인지 물었지만 어째서인지 당신은 대답하지 않았습니다! 왜 대답을 회피하는거야, 알렉시?

 
Mihail Matkovskij :

나는 당신을 도우려고 노력하고 동시에 당신을 근거없이 고발하고 추가하는 것을 잊지 마십시오. 그런 열광의 원인이 무엇인지 물었지만 어째서인지 당신은 대답하지 않았습니다! 왜 대답을 회피하는거야, 알렉시?

그것은 오랫동안 침묵했을 것이고 나는 계속하지 않을 것입니다.

여기에 비난의 암시 없이 도움을 주기 위한 나의 솔직한 시도가 있습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

알렉세이 빅토 로프 , 2020.07.11 17:12

주기가 OnDeinit 실행에 할당된 시간보다 오래 지속되는 경우는 없을까요?

결국, 귀하의 예에서 모든 객체에는 "추세" 접두사가 있습니다. 이것을 활용하고 주기를 포기하지 않으시겠습니까?

 int    ObjectsDeleteAll (
   long            chart_id,   // идентификатор графика
   const string      prefix,   // префикс имени объекта
   int        sub_window=- 1 ,   // индекс окна
   int       object_type=- 1      // тип объекта для удаления
   );

무엇이 정답인가요? 답변을 읽으십시오.
 
Alexey Viktorov :

그것은 오랫동안 침묵했을 것이고 나는 계속하지 않을 것입니다.

그리고 ... 여기에 나를 향한 비난의 이유가 있습니다! 당연하게도... :)

알렉세이 빅토로프 :
무엇이 정답인가요? 답변을 읽으십시오.

괜찮습니다. 내가 처음에 이 기능을 사용하기를 거부한 유일한 것. 그리고 그것이 당신을 혼란스럽게 했습니까?... 글쎄요, 죄송합니다... :)

 

내 예에서 먼저 ObjectDeleteAll 함수를 대체했습니다 .

 //+------------------------------------------------------------------+
//|                                           DeleteChartObjects.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version    "1.00"
#property indicator_chart_window

#property indicator_plots 0

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

#include <ChartObjects\ChartObjectsLines.mqh>
#include <Arrays\ArrayObj.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//--- input parameters
input int       nBars = 100000 ;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int customN_Bars = 0 ;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CArrayObj listOfTrendLines;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit () {
//--- indicator buffers mapping
   int totalBars = iBars ( NULL , PERIOD_CURRENT );
  customN_Bars = (nBars < totalBars) ? nBars : totalBars;
//---
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[]
) {
  CChartObjectTrend * trend;
   int delta = rates_total - customN_Bars;
   int shift;
   int i;
   for (i = 0 ; i < customN_Bars; i++) {
    shift = delta + customN_Bars - i - 1 ;
    trend = new CChartObjectTrend();
     if (trend.Create( 0 , "trend" +( string )i, 0 , time[shift], low[shift], time[shift], high[shift]))
      listOfTrendLines.Add(trend);
     else
       delete trend;
  }
   return (rates_total);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason) {
  
   ObjectsDeleteAll ( 0 , "trend" , 0 , OBJ_TREND );
  
  CChartObjectTrend * trend;
  
   int i = listOfTrendLines.Total() - 1 ;
   for (; i >= 0 ; i--) {
    trend = dynamic_cast <CChartObjectTrend *> (listOfTrendLines.At(i));
    
     if ( CheckPointer (trend) == POINTER_INVALID )
       continue ;
    
     delete trend;
  }
}
//+------------------------------------------------------------------+

그런 다음 표시기로.

Artyom Trishkin :

개체 이름에 접두사를 추가하려면 전체 프로젝트를 다시 실행해야 합니까?

프로젝트에서 ObjectDeleteAll 을 사용하는 것은 아주 쉬운 일이었습니다. 모든 개체를 삭제하려면 접두사를 3번만 변경하면 충분하므로 ObjectDeleteAll 을 3번 호출하면 됩니다. 결과적으로 일정이 깨끗합니다. MQL5 언어에는 많은 미묘함이 있습니다. 그러나 동시에 매우 사려깊습니다.

이 문제를 해결하는 데 도움을 주신 모든 분들께 감사드립니다!