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

 
Askr :

고맙습니다.

가능한 다른 것을 찾았습니다. 1) 이것은 브로커 차단입니다.

https://www.mql5.com/ru/forum/38456/page127

https://www.mql5.com/ru/forum/304679

2) 어쩐지 비율이 많이 올랐고, 110%와 70%가 지속적으로 강하게 뛰었는데, 아직 내가 직접 세지 못했다. 다운로드와 관련이 있을 수 있지만 거의 없습니다. 이렇게 작게 열어보니 마진 사양의 레버리지도 같고 잔고도 거의 같습니다.

일반적으로 신호에 대한 분기는 이쪽
https://www.mql5.com/en/forum/10603/page394
정보를 위해.

FAQ по сервису Сигналы
FAQ по сервису Сигналы
  • 2020.04.18
  • www.mql5.com
Узнать за 15 минут: смотри обучающие видео по торговым сигналам в MetaTrader 4 и MetaTrader 5 Здесь будут собраны и обработаны наиболее частые вопр...
 
Sergey Dzyublik :

버그 МТ5(빌드 2390) 클래스 구조 설명에서 중괄호 계산이 잘못되었습니다.

올려주셔서 감사합니다 수정했습니다

 

다음과 같이 작동합니다.

   ObjectSetDouble ( 0 ,name, OBJPROP_ANGLE ,direction== 0 ? 0 :direction> 0 ? 30 :- 30 );

그래서 아니오(항상 0)

   ObjectSetDouble ( 0 ,name, OBJPROP_ANGLE ,direction* 30 );

방향 -1; +1; 0

 
Igor Zakharov :

다음과 같이 작동합니다.

그래서 아니오(항상 0)

방향 -1; +1; 0

그리고 그래서

 ObjectSetDouble ( 0 ,name, OBJPROP_ANGLE , ( direction== 0 ? 0 :direction> 0 ? 30 :- 30 ) );
 
Alexey Viktorov :

그리고 그래서

작동하지 않는 두 번째 옵션도 작동합니다.

 
   ObjectSetDouble ( 0 ,name, OBJPROP_ANGLE ,direction* 30.0 );
방향은 int로 선언됩니다. 여기서 당신은 당신이 얻는 것을 얻습니다. 최근에 많은 함수가 값에 대해 상당히 까다로워졌습니다. 캐스트와 함께 안전하게 플레이하는 것이 좋습니다.
나는 최근에 이것에 부딪쳤다. 이전에는 문제가 없었던 것 같습니다. 그런 다음 그들은 코드를 수정해 달라고 요청했고 코드가 두 배로 늘어날 때까지 예상대로 작동하고 싶지 않았습니다.
 
Konstantin Nikitin :
방향은 int로 선언됩니다. 여기서 당신은 당신이 얻는 것을 얻습니다. 최근에 많은 함수가 값에 대해 상당히 까다로워졌습니다. 캐스트와 함께 안전하게 플레이하는 것이 좋습니다.
나는 최근에 이것에 부딪쳤다. 이전에는 문제가 없었던 것 같습니다. 그리고 나서 그들은 코드를 수정해달라고 요청했고, 지금까지 두 배로 이어지지도 않았고 예상대로 작동하고 싶지도 않았습니다.

네, INT. 그러나 동일한 곱셈 - 정수에서도 30*1=30입니다. 나는 몇 가지 이전 빌드가 두 번째 버전에서도 잘 작동했다고 100% 확신합니다. 이 30개는 선택에 의해 결정되었습니다 ...

MT5의 또 다른 "기능"인 것 같습니다... 글쎄요, 적어도 블록은 장식적이지만, 오토로트나 스톱로스와 같은 곳이라면 - 슬픔이 일어날 수 있습니다 - 나는 종종 -1을 곱하여 그것을 뒤집습니다 ...

감사합니다, 다른 목발을 사용하겠습니다 ...

 
Igor Zakharov :

작동하지 않는 두 번째 옵션도 작동합니다.

아. 실수로 잘못된 코드를 복사했습니다.

그리고 Konstantin이 맞습니다. 왜 double이 예상되는 곳에 int를 넣어야 합니까... 그리고 이것은 mql5의 기능이 아니라 순서에 익숙해지기 위한 몇 가지 시도일 뿐입니다.

 

도와주세요.

표시기가 범위를 벗어난 배열로 인해 충돌합니다.

코드에 정의된 버퍼

 #property indicator_buffers 2

#property indicator_color1 Red

#property indicator_width1 1

#property indicator_plots    1 // количество графических построений

#property indicator_type1    DRAW_ARROW


선언된 전역 변수

 double Buf1[];

double Buf2[];

Init()에서 속성을 설정합니다.

     PlotIndexSetInteger ( 0 , PLOT_ARROW ,code); 

//--- установим пустое значение 

   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , 0 );

   SetIndexBuffer ( 0 ,Buf1, INDICATOR_DATA );

   PlotIndexSetString ( 0 , PLOT_LABEL , "Break" );



//----

   PlotIndexSetInteger ( 1 , PLOT_ARROW ,code);  

//--- установим пустое значение 

   PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , 0 );

   SetIndexBuffer ( 1 ,Buf2, INDICATOR_CALCULATIONS );

   PlotIndexSetString ( 1 , PLOT_LABEL , "Break" );


OnCalculate()에서 조건은 코드(up 변수)에 정의됩니다.

true이면 다음 코드가 실행됩니다.

  i=nPoint1; BreakUp= false ; BreakDn= false ;
  
while (i>= 0 && BreakUp== false && BreakDn== false )
  {              Print ( "i  " ,i);                 tmp= iHigh ( NULL , 0 ,nPoint1)-Speed*(nPoint1-i);        tmp1= iHigh ( NULL , 0 ,nPoint1)-Speed*(nPoint1-i)-resultL;        if ( NormalizeDouble ( iLow ( NULL , 0 ,i), Digits ())< NormalizeDouble (tmp1, Digits ()) && NormalizeDouble ( iHigh ( NULL , 0 ,i), Digits ())> NormalizeDouble (tmp, Digits ()))         {          size= ArraySize (Buf1);          Print ( "size " ,size);                   BreakUp= true ;          if (channelbreak) Buf1[i]=tmp;          Comm= "\nПробой вверх на уровне " + DoubleToString (tmp, Digits ());         }        else        if ( NormalizeDouble ( iLow ( NULL , 0 ,i), Digits ())< NormalizeDouble (tmp1, Digits ()))         {          size= ArraySize (Buf1);          Print ( "size " ,size);                          BreakDn= true ;          if (channelbreak) Buf1[i]=tmp1;          Comm= "\nПробой вниз на уровне " + DoubleToString (tmp1, Digits ());         }        else        if ( NormalizeDouble ( iHigh ( NULL , 0 ,i), Digits ())> NormalizeDouble (tmp, Digits ()))         {          size= ArraySize (Buf1);          Print ( "size " ,size);                   BreakUp= true ;          if (channelbreak) Buf1[i]=tmp;          Comm= "\nПробой вверх на уровне " + DoubleToString (tmp, Digits ());         }        else Comm= "\nПробоя канала нет" ;        //i--;       }     } Ошибка происходит при входе в цикл while при присвоении значения переменной значению буфера. Проверка на размер массива буфера выдает ноль. Т.е. буфер не инициализируется. Всю голову сломал, не могу понять почему. В чем затык?
nPoint1 - это индекс бара (сдвиг от нулевого).
 
Ilyas :

이 지표가 설정될 때 열린 차트 에서 이 지표의 값이 보이지 않는 것이 정상입니까? 즉, 예를 들어 디버거에서 MACD를 엽니다. 버퍼에 값을 쓰는 주기에 중단점을 넣습니다. ChartRedraw() 값을 작성한 후. 값을 기록한 후 차트에서 즉시 이 값을 볼 것으로 예상하지만 빈 창만 표시됩니다.

빌드 2380 x64.