MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1207

 

이 루프가 끝나지 않는 이유는 ... (루프가 무한하다는 것을 깨달았을 때 i < 2000에 대한 두 번째 조건을 추가했습니다) MQL4

cv * tvp * ( double )stop < ml


 double tvp  = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_VALUE_PROFIT ),
          vm   = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN ),
          vs   = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP ),
          ml   = AccountEquity() * (risk / 100.0 ),
          cv   = - 1.0 ;
   
   for ( int i = 0 ; cv * tvp * ( double )stop < ml && i < 2000 ; i++)
     {
       if ( (vm + vs * ( double )i) * tvp * ( double )stop < ml ) { cv = vm + vs * ( double )i; Print (i, " " ,cv, "/" ,ml); };
     };


 
Alexandr Sokolov :

이 주기가 끝나지 않는 이유는 ...(주기가 무한하다는 것을 깨달았을 때 i < 2000에 대한 두 번째 조건을 추가했습니다)



사이클은 다음까지 끝나지 않습니다.

cv * tvp * ( double )stop < ml

이 조건이 충족될 때 루프가 종료되도록 루프 본문에 다음과 같이 작성할 수 있습니다.

 for ( int i = 0 ; i < 2000 ; i++)
{
   if ( cv * tvp * ( double )stop < ml )
     break
  ...
}

또는

 for ( int i = 0 ; cv * tvp * ( double )stop >= ml ; i++)
{
  if(i >= 2000)
    break;
  ...
}
 
Mihail Matkovskij :

MQL4에서는 다음과 같은 방법으로만 가능합니다.

결과:


다시 한 번 도움을 주셔서 감사합니다. 다음과 같은 방법을 알려주시면 정말 감사하겠습니다...
이 배열 요소가 정렬 전에 있었던 배열 요소 의 인덱스 값을 계산하는 데 사용할 수 있는 함수 또는 언어 구성은 무엇입니까?

여기에 정렬 전(맨 위 행) 배열 A[]가 있고 정렬 후 동일한 배열이 있습니다. 값이 5인 배열 요소는 정렬하기 전에 인덱스 9에 있었습니다.
정렬 후 값이 5인 배열 요소는 이미 인덱스 3에 있습니다.

또한 함수를 통해 정렬된 배열에서 값이 5인 셀을 찾고 함수는 W에 정렬된 배열에서 이 셀의 인덱스 번호인 3을 저장합니다.

ArraySort(A,10,0,MODE_ASCEND);

W = ArrayBsearch(A,5,WHOLE_ARRAY,0,MODE_ASCEND);

문제. ArrayBsearch() 함수 이후에 정렬되지 않은 배열에 있던 값이 5인 셀 인덱스 값을 어떻게 변수에 저장할 수 있습니까?

즉, 값 9를 유지합니다.
도와 주셔서 감사합니다.

 

안녕하세요. 사용자 지정 지표 에 음수 값을 설정하고 작동하게 하는 방법을 누가 압니까? 저것들. "가격 차트에 대한 지표 이동."

예: 이동 평균 표시기에서 값 -4를 설정하면 차트를 기준으로 왼쪽으로 이동하고 작동합니다.

그러나 표시기 코드에 이러한 값을 입력하면 표시기가 작동을 멈춥니다. 모든 TF의 값을 빨간색으로 표시합니다.

파일:
 
ANDREY :

다시 한 번 도움을 주셔서 감사합니다. 다음과 같은 방법을 알려주시면 정말 감사하겠습니다...
이 배열 요소가 정렬 전에 있었던 배열 요소 의 인덱스 값을 계산하는 데 사용할 수 있는 함수 또는 언어 구성은 무엇입니까?

여기에 정렬 전(맨 위 행) 배열 A[]가 있고 정렬 후 동일한 배열이 있습니다. 값이 5인 배열 요소는 정렬하기 전에 인덱스 9에 있었습니다.
정렬 후 값이 5인 배열 요소는 이미 인덱스 3에 있습니다.

또한 함수를 통해 정렬된 배열에서 값이 5인 셀을 찾고 함수는 W에 정렬된 배열에서 이 셀의 인덱스 번호인 3을 저장합니다.

ArraySort(A,10,0,MODE_ASCEND);

W = ArrayBsearch(A,5,WHOLE_ARRAY,0,MODE_ASCEND);

문제. ArrayBsearch() 함수 이후에 정렬되지 않은 배열에 있던 값이 5인 셀 인덱스 값을 어떻게 변수에 저장할 수 있습니까?

즉, 값 9를 유지합니다.
도와 주셔서 감사합니다.

하지만 글로벌 목표 없이 데이터가 어떻게 적중하든지 정렬할 필요가 없습니다.

현재 프로젝트에서 : 우리는 (짧은) 배열을 취하고 출력에서 원하는 순서로 요소의 인덱스를 갖습니다.

void BubleSortIndex5(double &data[5],int &index[5])
{
   for(int i=0;i<5;i++)
      index[i]=i;
   for(int i=0;i<4;i++) {
      for(int j=1;j<5;j++) {
         if (data[index[i]]>data[index[j]]) {
            int tmp=index[i];
            index[i]=index[j];
            index[j]=tmp;
         }
      }
   }
}


더 큰 배열의 경우 정렬 알고리즘을 변경해야 합니다(큰 배열의 경우 거품이 굴러가지 않음) - 변경하십시오.

주요 메시지 - 글쎄, 원본 데이터를 만지지 마십시오. 참조 또는 배열 인덱스를 사용하여 작업하십시오. 그렇지 않으면 정보가 손실되어 너무 필요합니다.

 
ANDREY :

다시 한 번 도움을 주셔서 감사합니다. 다음과 같은 방법을 알려주시면 정말 감사하겠습니다...
이 배열 요소가 정렬 전에 있었던 배열 요소 의 인덱스 값을 계산하는 데 사용할 수 있는 함수 또는 언어 구성은 무엇입니까?

여기에 정렬 전(맨 위 행) 배열 A[]가 있고 정렬 후 동일한 배열이 있습니다. 값이 5인 배열 요소는 정렬하기 전에 인덱스 9에 있었습니다.
정렬 후 값이 5인 배열 요소는 이미 인덱스 3에 있습니다.

또한 함수를 통해 정렬된 배열에서 값이 5인 셀을 찾고 함수는 W에 정렬된 배열에서 이 셀의 인덱스 번호인 3을 저장합니다.

ArraySort(A,10,0,MODE_ASCEND);

W = ArrayBsearch(A,5,WHOLE_ARRAY,0,MODE_ASCEND);

문제. ArrayBsearch() 함수 이후에 정렬되지 않은 배열에 있던 값이 5인 셀 인덱스 값을 어떻게 변수에 저장할 수 있습니까?

즉, 값 9를 유지합니다.
도와 주셔서 감사합니다.

이렇게 하려면 두 가지 질문에 답해야 합니다. 다음과 같은 경우 어떻게 하시겠습니까?

1. 배열의 다른 셀에 5의 여러 값이 있습니다.

2. 값 5는 배열에 없습니다.

ArrayBsearch 함수(정렬된 데이터의 경우)는 첫 번째 경우에 첫 번째 인덱스를 제공하기 때문에 셀 값이 5이고 두 번째 경우 값 5에 가까운 요소를 제공합니다. 어떻게 하시겠습니까? 정렬되지 않은 배열을 처리하는 것은 나에게 명확하지 않습니다.

 
sla100 :

안녕하세요. 사용자 지정 지표 에 음수 값을 설정하고 작동하게 하는 방법을 누가 압니까? 저것들. "가격 차트에 대한 지표 이동."

예: 이동 평균 표시기에서 값 -4를 설정하면 차트를 기준으로 왼쪽으로 이동하고 작동합니다.

그러나 표시기 코드에 이러한 값을 입력하면 표시기가 작동을 멈춥니다. 모든 TF의 값을 빨간색으로 표시합니다.

SetIndexShift .

또한 iMA에서는 이동 이 표시됩니다.

아이마

보고   의미   기술 지표 이동 평균.

이중 iMA (
            기호 , // 기호 이름
    정수    타임프레임 , // 타임프레임
    정수    ma_period , // 기간
정수            ma_shift , // 평균의 이동
정수            ma_method , // 평균화 방법
정수            apply_price , // 가격 유형
정수            옮기다               // 옮기다
);

옵션

기호

【인】 지표가 계산되는 데이터의 계측기의 기호 이름입니다.   없는   현재 문자를 의미합니다.

시간대

[in] 기간. 열거형 값 중 하나일 수 있습니다.   ENUM_TIMEFRAMES 0은 현재 차트의 기간을 의미합니다.

ma_period

【인】 지표를 계산하기 위한 평균화 기간입니다.

ma_shift

【인】 가격 차트를 기준으로 한 표시기 이동입니다.

ma_method

【인】 평균화 방법. 열거형 값 중 하나일 수 있습니다.   ENUM_MA_METHOD

적용 가격

【인】 사용된 가격입니다. 열거형 값 중 하나일 수 있습니다.   ENUM_APPLIED_PRICE

옮기다

【인】 표시기 버퍼에서 수신한 값의 인덱스(현재 막대를 기준으로 지정된 기간 전에 이동).

반환 값

의미   기술 지표 이동 평균.

예시:

AlligatorJawsBuffer[i]= iMA ( NULL ,0,13,8, MODE_SMMA , PRICE_MEDIAN ,i);

https://docs.mql4.com/en/indicators/ima

여기에 기성품 예가 있지만 MQL5: https://www.mql5.com/ru/docs/indicators/ima ,

MQL4로 번역하기 쉽습니다.

SetIndexShift - Пользовательские индикаторы - Справочник MQL4
SetIndexShift - Пользовательские индикаторы - Справочник MQL4
  • docs.mql4.com
При положительном значении изображение линии смещается вправо, при отрицательном - влево. Значение, рассчитанное на текущем баре, рисуется с указанным смещением относительно текущего бара.
 

설정에 시프트 인디케이터 가 없습니다. 코드에 들어가서 코드에서 시프트를 -4로 설정하고 표시기가 작동을 멈췄습니다. 모든 TF가 빨간색으로 표시됩니다. 여기 앉아서 이유를 생각합니다.

Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для совершения торговых операций на рынках, а вторые — для анализа котировок и выявления закономерностей в их изменении. При этом индикаторы могут использоваться непосредственно в роботах, образуя полноценную...
 
Mihail Matkovskij :

이렇게 하려면 두 가지 질문에 답해야 합니다. 다음과 같은 경우 어떻게 하시겠습니까?

1. 배열의 다른 셀에 5의 여러 값이 있습니다.

2. 값 5는 배열에 없습니다.

ArrayBsearch 함수(정렬된 데이터의 경우)는 첫 번째 경우에 첫 번째 인덱스를 제공하기 때문에 셀 값이 5이고 두 번째 경우 값 5에 가까운 요소를 제공합니다. 어떻게 하시겠습니까? 정렬되지 않은 배열을 처리하는 것은 나에게 명확하지 않습니다.

빠른 응답에 감사드립니다. 필자의 경우 배열 요소의 각 값은 고유하며 단일 인스턴스에 존재합니다. 즉, 값 5 는 다른 값과 마찬가지로 반복되지 않습니다.

제 경우에는 값 5가 정렬되지 않은 배열에 없을 수 있습니다. 즉, 정렬되지 않은 배열에서는 일부 셀이 채워지지 않을 수 있습니다.
하지만 정렬되지 않은 배열에 값 5가 없으면 ArrayBsearch() 함수의 두 번째 매개변수로 값 5를 지정할 수 없으며 정렬되지 않은 배열에 있어야 하는 값만 이 함수에 들어갑니다.
도와 주셔서 감사합니다