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

 
분명한. 고맙습니다.
 
Dmytro Zelenskyy :

좋아, 하지만 부호를 유지하면서 double을 int로 올바르게 변환하는 방법(숫자는 중요하지 않습니다. 제한을 초과하면 int 제한으로 제한)

길게 캐스팅합니다.
 
fxsaber :
답변하고 바로 닫았습니다

다른 입력 매개변수를 사용하더라도 최소한 하나의 사본이 실행 중인 경우에 대비하여 나 자신(지시자)을 제거할 수 있어야 했습니다. 이를 위해서는 자체 핸들을 찾아야했습니다. 불행히도 그 당시에는 이것이 100%의 경우 MQL에서 불가능하다는 것을 아직 알지 못했습니다. 그래서 그다지 어렵지 않은 트릭을 하기로 결정했습니다.

나는 모든 핸들을 통과합니다. 그리고 CopyBuffer를 통한 첫 번째 버퍼의 마지막 값이 확인하기 전에 내 표시기에 쓴 임의성과 일치하면 자동으로 핸들이 내 소유임을 의미하며 필요한 경우 나를 삭제할 수 있습니다.

이러한 이유로 무해한 코드가 작성되어 모호하지만 분명히 개발자의 부정적인 반응이 발생했습니다. 당신은 그렇게 할 수 없습니다. 그는 불법적으로 무엇을 했습니까? 글쎄, 나는 CopyBuffer를 통해 내 버퍼의 값을 읽었습니다. 불법이다?!

개발자들의 반응에 "너는 할 수 없다" 같은 것은 없다. "불법"이라는 말은 어디에도 없습니다.

이 "무해한 코드"가 절대적으로 필요하다고 생각되면 사용하십시오. 버퍼를 읽은 후 OnCalculate()에 IndicatorRelease(handle))를 추가하기만 하면 됩니다. 이것이 "귀하의" 표시인지 모든 눈금에서 확인할 필요는 없습니까?

이것은 표시기가 문제를 해결하고 "보이지 않는"것을 중지하는 방법입니다.

 #property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1

double Buffer[];

int handle= INVALID_HANDLE ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit ()
  {
   :: SetIndexBuffer ( 0 ,Buffer, INDICATOR_DATA );
   handle= ChartIndicatorGet ( 0 , 1 , ChartIndicatorName ( 0 , 1 , 0 ));
  }

#define TOSTRING(A) #A + " = " + ( string )A + "\n"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
  {
   if (handle!= INVALID_HANDLE )
     {
      Buffer[rates_total- 1 ]= MathRand ();

       double BufferCopy[];

       if ( CopyBuffer (handle, 0 , 0 , 1 ,BufferCopy)> 0 )
         Print (TOSTRING(BufferCopy[ 0 ])+TOSTRING(Buffer[rates_total- 1 ]));
         
       if ( IndicatorRelease (handle)) 
         handle= INVALID_HANDLE ;
     }

   return (rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int Reason)
  {
   if (handle!= INVALID_HANDLE )
       IndicatorRelease (handle);
   return ;
  }


이러한 방식으로 차트가 없는 터미널에서도 모든 코드의 백그라운드 제어되지 않은 실행을 생성할 수 있음을 커뮤니티에 알리십시오. 여기 해킹이 있습니다. 그리고 그것을 버그로 간주하는 것은 분명히 용어의 문제입니다. 개발자가 여기에서 아키텍처를 변경할 수 없다는 것을 이해합니다. 그러므로 그러한 분노. 나는 이 반응을 다른 식으로 설명할 수 없다.

서비스 데스크 응답 에는 "분노"가 없습니다. 당신이 직면한 문제를 정기적으로 과장하려는 당신의 동기에 대한 오해가 있습니다.

개발자는 변경할 수 있습니다. 그러나 문서화되지 않은 행동이 명백히 해롭지 않는 한 "제거하고 금지"하라는 제안을 매우 조심하는 것이 일반적입니다. 이 "해킹"은 매우 구체적이지만 누군가가 그것을 사용할 수도 있습니다.

이것에 대해 터미널에 여전히 편집이 있을 수 있지만 이것은 확실히 큰 문제가 아니며 이 문제는 최소 우선 순위를 갖습니다.

어쨌든 아무도 말하지 않을 것입니다. 이러한 갈퀴를 도움말에 반영하는 것이 좋을 것입니다.

터미널의이 "심각한 버그"가 당신에게만 관심이 있다는 것을 완벽하게 이해하고 있음이 밝혀졌습니다.

이것에 대해 우리는이 질문을 닫을 것입니다. 기술적인 세부 사항에 대해 논의했지만 이 스레드의 감정은 불필요합니다.

 
Anton :

개발자들의 반응에 "이건 안 돼" 같은 건 없다. "불법"이라는 말은 어디에도 없습니다.

이 "무해한 코드"가 절대적으로 필요하다고 생각되면 사용하십시오. 버퍼를 읽은 후 OnCalculate()에 IndicatorRelease(handle))를 추가하기만 하면 됩니다. 이것이 "귀하의" 표시인지 모든 눈금에서 확인할 필요는 없습니까?

아니요, 물론 그런 필요는 없습니다.

이것이 표시기가 문제를 해결하고 "보이지 않는"것을 중지하는 방법입니다.

최근에 이 주제에 대해 동료로부터 답변을 받았습니다.

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

오류, 버그, 질문

슬라바 , 2016.09.07 17:17

fxsaber :

iCustom 후에 IndicatorRelease를 수행해야 합니까?

무엇 때문에?

필요 없음. IndicatorCreate 후에 당신은 또한 할 필요가 없습니다

그리고 답을 얻지 못했다.

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

오류, 버그, 질문

fxsaber , 2016.09.07 17:27

After는 즉시를 의미하지 않습니다. 하지만 그렇지 않다면 언제 ?

서비스 데스크 응답 에는 "분노"가 없습니다. 당신이 직면한 문제를 정기적으로 과장하려는 당신의 동기에 대한 오해가 있습니다.

동기는 순전히 이기적입니다. 설명서에 따르면 모든 것이 예상대로 작동하기를 바랍니다. 버그가 있습니다. 결과는 다음과 같습니다.

개발자는 변경할 수 있습니다. 그러나 문서화되지 않은 행동이 명백히 해롭지 않는 한 "제거하고 금지"하라는 제안을 매우 조심하는 것이 일반적입니다. 이 "해킹"은 매우 구체적이지만 누군가가 그것을 사용할 수도 있습니다.

이것에 대해 터미널에 여전히 편집이 있을 수 있지만 이것은 확실히 큰 문제가 아니며 이 문제는 최소 우선 순위를 갖습니다.

우선순위에 동의합니다.

터미널의이 "심각한 버그"가 당신에게만 관심이 있다는 것을 완벽하게 이해하고 있음이 밝혀졌습니다.

이것에 대해 우리는 이 질문을 닫을 것입니다. 기술적인 세부 사항에 대해 논의했지만 이 스레드의 감정은 불필요합니다.

아니요, 그들은 다른 이유로 댓글을 달지 않습니다. 버그가 아무리 심각해도. 내 "진지함"은 당신이 무작위로 수행하고 동일한 시장에 넣을 수 있는 더러운 속임수에 있었습니다. 그런 다음 VPS에 컴퓨팅 리소스가 충분하지 않다는 사실에 직면하십시오. 일반적으로 이해합니다.
 
Vladimir Pastushak :

그래서 그럴 필요가 없고, 앞으로 좀 더 편하게 살 수 있도록 많은 일을 하려고 해요.

나는 내 문제를 극복하여 부모에서 모든 것이 보호되고 상속은 보호 된 추가 재정의하에 있습니다.

모든 것이 부모에서 보호된다면 보호된 상속은 더 이상 의미가 없습니다(공개를 떠날 수도 있습니다). 이제야 원래 원하는 것이 무엇인지 명확하지 않습니다. 클래스 내부에 부모 메서드를 숨겨야 하는 경우(내가 생각한 대로 외부가 아닌) 보호된 메서드는 무엇과 관련이 있습니까? 여기에 프라이버시가 필요합니다.
 
Alexey Navoykov :
이제야 원래 원하는 것이 무엇인지 명확하지 않습니다.
팝업 목록에서 사용할 수 없는 메서드를 쉽게 제거할 수 있을 것 같습니다.
 
Sergei Vladimirov :
팝업 목록에서 사용할 수 없는 메서드를 쉽게 제거할 수 있을 것 같습니다.
그래서 접근이 불가능하고 나타나지 않죠?
 
Sergei Vladimirov :
팝업 목록에서 사용할 수 없는 메서드를 쉽게 제거할 수 있을 것 같습니다.

그뿐만 아니라 그래픽 개체의 클래스를 직접 다시 작성했고 개체의 모든 속성이 설명된 한 클래스에서 이제 쉽고 이해할 수 있게(적어도 저에게는) Button 유형의 상속인을 만들고 그러한 개체를 만들었습니다. 클래스에서는 버튼의 속성만 보고 TextLabel 속성은 볼 수 없습니다.

또한, 이러한 간단한 요소에서 오류 가능성을 최소화하고 가능한 한 빠르고 명확하게(적어도 저에게는) 더 복잡한 요소를 이미 구성할 수 있습니다.

아마도 당신은 저를 함께 차기 시작하고 모든 것이 표준 성경에 있다고 말할 것입니다. 나는 모든 것을 즉시 말하지 않을 것이며 모든 것이 명확하지 않습니다. 나는 내가 완전히 이해하는 것으로 작업하는 데 익숙하지만 모든 것이 어떻게 작동하는지 이해하려면 모든 것을 직접 수행해야합니다 ..

 
Alexey Navoykov :
그래서 접근이 불가능하고 나타나지 않죠?

아니요, 그들은 나타납니다.

그건 그렇고, 스튜디오에서도 마찬가지입니다.

 
Sergei Vladimirov :

아니요, 그들은 나타납니다.

그렇다면 메타 인용문은 이것에 주의를 기울여야 합니다. 사용할 수 없는 방법을 표시하는 이유 결국 보호 섹션에 대해 모든 것이 숨겨져 있어야 합니다. 따라서 여기에서도 동일해야 합니다.