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

 
fxsaber :

전체 CopyBuffer INF가 있습니다.

슬라이딩 카운팅 알고리즘을 사용하면 처음에는 두 개의 DBL_MAX 가격만 있으면 전체 버퍼가 INF가 됩니다.

DBL_MAX + DBL_MAX = INF

그러면 INF는 계산을 떠나지 않을 것입니다.

EMPTY_VALUE 를 고려하지 않도록 모든 지표의 코드를 변경해야 합니다.
 
A100 :

슬라이딩 카운팅 알고리즘을 사용하면 처음에는 두 개의 DBL_MAX 가격만 있으면 전체 버퍼가 INF가 됩니다.

DBL_MAX + DBL_MAX = INF

그러면 INF는 계산을 떠나지 않을 것입니다.

이 옵션은 가능성이 매우 높기 때문입니다. Mashka 기간보다 작은 값은 DBL_MAX만 막힙니다. 그런 다음 반복 평균 알고리즘인 MODE_SMA에 버그가 있습니다.

그리고 있다! 변경하고 작동했습니다

 // Вычисляем Машку от Машки через хэндл самого себя
#property indicator_separate_window 
#property indicator_buffers 1 
#property indicator_plots    1 

#property indicator_type1   DRAW_LINE 
#property indicator_color1   clrRed 
#property indicator_style1   STYLE_SOLID 
#property indicator_width1   1 

input bool CustomData = false ; // true - кастомный режим для iCustom
input int MAPeriod = 1 e1;       // Период МАшки

string GetMyName( void )
{
   const int Length = StringLen ( TerminalInfoString ( TERMINAL_DATA_PATH ) + "\\MQL5\\Indicators\\" );
   const string Path = MQLInfoString ( MQL_PROGRAM_PATH );
  
   return ( StringSubstr (Path, Length, StringLen (Path) - Length - 4 ));
}

double Buffer[];
const bool Init = SetIndexBuffer ( 0 , Buffer, INDICATOR_DATA );

const int handleMA = CustomData ? iMA ( NULL , PERIOD_CURRENT , 100 , 0 , MODE_SMA , PRICE_OPEN ) // от этой МАшки будет брать другую Машку, но не напрямую, а кастомно
                                : iMA ( NULL , PERIOD_CURRENT , MAPeriod, 0 , MODE_SMA , iCustom ( _Symbol , PERIOD_CURRENT , GetMyName(), true ));

int Replace( double &Array[], const double NewValue = 1 e3, const double PrevValue = EMPTY_VALUE )
{
   for ( int i = ArraySize (Array) - 1 ; i >= 0 ; i--)
     if (Array[i] == PrevValue)
      Array[i] = NewValue;
      
   return ( 0 );
}

int OnCalculate ( const int rates_total,       // размер входных таймсерий 
                 const int prev_calculated,   // обработано баров на предыдущем вызове
                 const datetime & time[],     // Time 
                 const double & open[],       // Open 
                 const double & high[],       // High 
                 const double & low[],         // Low 
                 const double & close[],       // Close 
                 const long & tick_volume[],   // Tick Volume 
                 const long & volume[],       // Real Volume 
                 const int & spread[] )       // Spread 
{
   return (prev_calculated + CopyBuffer (handleMA, 0 , prev_calculated, rates_total - prev_calculated, Buffer) + Replace(Buffer) );
}

순환 iMA 알고리즘은 DBL_MAX가 입력으로 제공되는 경우를 고려하지 않는다고 확실히 말할 수 있습니다. 벌레.


@A100 감사합니다!

 

첨부 파일을 컴파일하려고 할 때 MetaEditor가 멈춥니다

바로 고정되지 않으면 조금 기다리거나 마지막 줄로 가서 컴파일 시간을 확인해야 합니다.

파일:
Test0.mq5  1 kb
 

마우스를 가져갈 때 팝업 창에 주문/거래 번호가 표시되지 않는 이유는 무엇입니까? 천 년 전에 내가 이것에 대해 물었지만 이것은 너무 부족합니다!

 
fxsaber :


 return (prev_calculated + CopyBuffer (handleMA, 0 , prev_calculated, rates_total - prev_calculated, Buffer ) + Replace( Buffer ));

이러한 구조는 피해야 합니다. C++에서 피연산자 실행 순서는 규제되지 않으므로 모든 것은 특정 컴파일러의 재량에 따릅니다. 예외는 && 및 || 연산자로, 피연산자는 항상 왼쪽에서 오른쪽으로 평가됩니다.

 
Alexey Navoykov :

이러한 구조는 피해야 합니다. C++에서 피연산자 실행 순서는 규제되지 않으므로 모든 것은 특정 컴파일러의 재량에 따릅니다. 예외는 && 및 || 연산자로, 피연산자는 항상 왼쪽에서 오른쪽으로 평가됩니다.

글쎄, 우리는 MQL에 있습니다!

 
fxsaber :

글쎄, 우리는 MQL에 있습니다!

문서에서는 특정 주문에 대해 아무 말도 하지 않습니다. 따라서 언제든지 자신의 재량으로 변경할 수 있습니다.

이 문제를 명확히 하기 위해 이미 서비스 데스크에 한 번 연락했습니다.

 

안녕하세요. 차트에 표시 되는 표시기 목록 과 해당 매개변수를 가져오는 데 사용할 수 있는 기능을 알려주실 수 있습니까? 기능만 찾았습니다. 차트의 지표 수를 반환합니다.

Списки наложенных объектов - Дополнительные возможности - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
Списки наложенных объектов - Дополнительные возможности - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
  • www.metatrader5.com
У каждого графика можно посмотреть списки наложенных объектов: индикаторов, аналитических объектов и советников. Там же можно можно редактировать их свойства и удалять их с графика. Список индикаторов Индикаторы сгруппированы на наложенные на основное окно графика и на те, что открыты в отдельных окнах. Выберите индикатор и нажмите "Свойства...
 
Aleksandr Teleguz :

안녕하세요. 차트에 표시 되는 표시기 목록 과 해당 매개변수를 가져오는 데 사용할 수 있는 기능을 알려주실 수 있습니까? 기능만 찾았습니다. 차트의 지표 수를 반환합니다.

IndicatorParameters(+ IndicatorRelease)

Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorParameters
Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorParameters
  • www.mql5.com
//| Script program start function                                    |                          +                                    p,                                                                        parameters[p].integer_value,                                    parameters[p].double_value...
 
Alexey Navoykov :

문서에서는 특정 주문에 대해 아무 말도 하지 않습니다 . 따라서 언제든지 자신의 재량에 따라 변경할 수 있습니다.

나는 이것에 대해 신경 쓰지 않는다. 많은 것들이 거기에 설명되어 있지 않습니다.

나브스키두

  • MT4/5에서 시간별로 거래 기록을 정렬합니다.
  • 함수 로 전역/정적 변수를 초기화하는 기능은 비교적 최근에 나온 것입니다.
  • 그러나 한 줄에 전처리기 지시문을 설정하는 것은 곧 꺼집니다.
  • 왼쪽에서 오른쪽으로 피연산자의 실행.
  • 99%의 경우 OrderSend는 거래 환경과 동기화됩니다.
  • ChartApplyTemplate은 비동기식입니다.
  • 및 기타 문서화되지 않은 많은 뉘앙스. 그러나 문서가 현실과 일치하지 않는 경우가 여전히 있습니다. 그리고 이것은 버그가 아니라 단순히 언급되지 않은 드문 기능입니다.

선례가 있었다 - 캐스팅을 거부했지만 이유가 있었다.

따라서 기술되지 않았다는 이유로 사용하지 않는 것은 모호한 결정입니다.


나는 그런 코드가 프로그래머들 사이에서 의심을 일으키지 않을 것이라고 생각한다.

 int Replace( double &Array[], int );

return (prev_calculated + Replace( Buffer , CopyBuffer (handleMA, 0 , prev_calculated, rates_total - prev_calculated, Buffer )));

그러나, 그것은 어쩐지 추하다. MyCopyBuffer를 작성하는 것은 논리적이지만 버그를 우회하기 위해 이것이 필요하다는 것을 짧은 코드로 명확하게 보여주는 것은 다시 추악합니다. 따라서 문서화되지 않은 피연산자 실행 우선 순위를 사용하는 것이 이것이 임시 솔루션임을 보여주는 가장 좋은 방법입니다.