초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 143

 
barabashkakvn :
int(round)에 대해 동의합니다. 고맙습니다. 명시적 유형 캐스팅 은 문제가 되지 않습니다. 명시적인 캐스트 없이 작동했지만.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty :
int(round)에 대해 동의합니다. 고맙습니다. 명시적 유형 캐스팅 은 문제가 되지 않습니다. 명시적인 캐스트 없이 작동했지만.
작동했지만 컴파일러의 이러한 말은 ... 어쩐지 지루해집니다.
 
barabashkakvn :

나는 오류가 없습니다. 마지막으로 빌드합니다.

감사합니다. MT5 업데이트가 도움이 되었습니다. 오류가 사라졌습니다. 빌드 날짜는 2013년 7월 23일입니다. 그런데 이전 빌드에서는 유형 캐스팅 경고가 없었기 때문에 눈치채지 못했습니다.

글쎄, 누가 컴파일러에서 그런 심각한 오류를 예상했겠습니까.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty :

감사합니다. MT5 업데이트가 도움이 되었습니다. 오류가 사라졌습니다. 빌드 날짜는 2013년 7월 23일입니다. 그런데 이전 빌드에서는 유형 캐스팅 경고가 없었기 때문에 눈치채지 못했습니다.

글쎄, 누가 컴파일러에서 그런 심각한 오류를 예상했겠습니까.

가장 중요한 것은 작동하고 있습니다 :). 다, 이 새끼들.
 

시간 간격에서 최소값을 찾아야 합니다. 시간을 확인하기 위해 다음 코드를 컴파일했습니다.

 datetime ts=st+StartTime* 60 ; // начало временного диапазона в секундах от 01.01.1970
int tss=( int )ts; //преобразование в секунды
Alert ( "tss" ,tss);
datetime tsp=st+StopTime* 60 ; // конец временного диапазона в секундах от 01.01.1970
int tspp=( int )tsp; //преобразование в секунды

이 간격의 최저치를 검색하기 위해 CopyLow 기능을 사용합니다.

 double Low[];
CopyLow ( _Symbol , _Period ,tss,tspp,Low); 

또한 올바르게 이해하면 1차원 배열 Low[],

ArrayMinimum을 사용하여 최소값을 찾고 있습니다.  

 int start= 0 ;
int count= WHOLE_ARRAY ; 
double min= ArrayMinimum (Low,tss, tspp);  
Alert ( "min=" ,min);

오늘 시작 시간을 1시간으로 설정하고 2시간을 중지하고 Alert를 호출하여 min=-1을 확인하려고 했습니다.

질문: 이 작업의 경우 이 작업을 해결하기 위해 함수가 올바르게 선택되었습니까? 아니면 어딘가에 오류가 있습니까? 당신 은 최소 가격 을 얻을 필요가 있습니다.

 
               안녕하세요 . 친애하는 거래자 여러분, 다중 통화 Expert Advisor에서 3 이동 평균에 대한 프로그램의 일부를 올바르게 설계하는 데 도움을 요청합니다.

핸드북에서 이 질문을 다루려고 했지만 클래스를 사용하는 예가 있는데 아직 이에 대한 준비가 되어 있지 않습니다.

아직 클래스를 사용하지 않고 EA를 작성하고 싶습니다. 나는 고려에서 불필요한 모든 것을 제외하고 각각에 대해 3 이동 평균을 얻기 위해

사용된 통화는 프로그램의 다음 부분을 작성했습니다.

입력 정수 Kurtz_Period = 5; // 빠른 이동 평균 주기 Kurtz

입력 intMittel_Period=8;

int Long_Period=13을 입력하십시오.

 

 

intmaHandle; // 이동 평균 표시기의 핸들

    이중 ma_buf[]; // 이것은 MA 함수에서 얻은 이동 평균 판독값을 위한 버퍼 배열입니다.

// 그러면 해당 배열에 다시 작성됩니다.

날짜 시간 시간_버프 [ ]; //바 여는 시간의 기본 배열

날짜 시간 시간_[6][150]; // 바 여는 시간의 배열

더블 커츠[6][70]; //이것은 빠른 이동 평균 Kurtz에 대한 배열입니다. 행 번호는 사용된 통화 번호와 동일하고 열은 이동 평균 판독값입니다.

더블미텔[6][70]; // 중간 이동 평균 Mittel에 대한 배열입니다.

더블 롱[6][70]; // 장기 이동 평균에 대한 배열입니다. Long

string Name_symbol[6] = { "AUDUSD","EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // 이것은 통화 이름의 텍스트 배열입니다:

정수 번호_instr; // 이는 상품(통화)의 번호이며, 통화별로 주기를 구성하는 경우에만 해당됩니다.

 

int OnInit()

{

//-----

//-------

}

무효 OnDeinit(const int 이유)

{

//---

ArrayFree(Time_buf);

ArrayFree ( ma_buf ) ; // 해제된 배열을 재설정

//-------

}

 

무효 OnTick()

{

//------------------------

ArraySetAsSeries(Time_buf, true); // 시계열에서와 같이 time_array 배열에 대한 인덱싱을 설정합니다.

ArraySetAsSeries ( ma _ buf , true ); // 시계열에서와 같이 배열 ma _ buf 에 대한 인덱싱 설정

for( nomer_instr=0; nomer_instr<=5; nomer_instr++ ) // 사용된 모든 통화에 대한 루프입니다.

{

정수 숫자 = 정수( SymbolInfoInteger(이름_심볼[명칭_인스트], SYMBOL_DIGITS)); // 이것은 통화 견적의 문자 수입니다.

CopyTime(이름_기호[명칭], PERIOD_M1,0,160,Time_buf); // 각 막대의 과거 시간 데이터를 버퍼에 복사합니다.

for( i=1; i<=145; i++ ) 시간[nomer_instr][i]=Time_buf[i]; // 첫 번째 막대의 여는 시간

 

                      //################################################## ##############################################

// 처음 3개의 슬라이딩 데이터 생성을 위한 블록: Kurtz , Mittel , Long

manHandle = iMA( Name_symbol[명명_instr],PERIOD_M1, Kurtz_Period, 0, MODE_SMMA, PRICE_CLOSE );

if( 카피버퍼(maHandle,0,0,155,ma_buf)<0 )

{

Alert("지시자 버퍼 복사 오류 ---PERIOD_M1,Kurtz_Period--- 이동 평균 - 오류 번호:",GetLastError());

반품;

}

              

for( i=1; i<=45; i++ ) Kurtz[nomer_instr][ i ] = NormalizeDouble(ma_buf[i], 숫자);

 

               /*

//================================================== ==============

// 시계열에서와 같이 막대의 이동과 숫자 정규화의 정확도를 확인하기 위한 BLOCK

// 빠르게 움직이는 MA-5

if( Multi_Torgi == 0 && Optim_parametrov == nomer_instr ) // 이것은 EA 작동 모드를 선택하는 키입니다. 이제 프로그램 디버그 모드입니다.

{

for( i=1; i<=5; i++ )

{

if(i==1) Alert("=========================================================================================================================================

if(i==1) Alert(" 첫 번째 막대의 여는 시간 : Time[nomer_instr][1]=",Time[nomer_instr][1] );

Alert(" 막대 번호 : i=",i,", MA_buf[i]=",MA_buf[i],", Kurtz[nomer_instr][i]=",Kurtz[nomer_instr][i]);

}

}

//================================================== =================

*/

 

 

 

 

//------------------------------------------------ -------------------------------------------------- ------------------------

 

maHandle = iMA(이름_심볼[명칭_instr],PERIOD_M1, Mittel_Period, 0, MODE_SMMA, PRICE_CLOSE);

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("표시기 버퍼 복사 오류 ===PERIOD_M1, Mittel_Period,=== 이동 평균 - 오류 번호:",GetLastError());

반품;

}

              

for( i=1; i<=45; i++ ) Mittel[nomer_instr][ i ] = NormalizeDouble(ma_buf[i], 숫자);

//------------------------------------------------ -------------------------------------------------- --------------------

 

maHandle = iMA(이름_심볼[명칭_인스트],PERIOD_M1, Long_Period, 0, MODE_SMMA, PRICE_CLOSE);

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("표시기 버퍼 복사 오류 ===PERIOD_M1, Long_Period,===이동 평균 - 오류 번호:",GetLastError());

반품;

}

              

for( i=1; i<=45; i++ ) Long[nomer_instr][ i ] = NormalizeDouble(ma_buf[i], 숫자);

                           

 

       // 처음 3 슬라이딩의 판독값 형성을 위한 BLOCK 끝: Kurtz , Mittel , Long

//################################################## ##############################################

    

} // 사용된 통화의 주기 종료

//================================================== ============

                      기타 프로그램 설명

//================================================== ============

//-----------------------------------------

}// OnTick() 함수의

//+----------------------------------------------- ------ --------------------+

이 프로그램에 따르면 컴파일 중에는 오류가 감지되지 않지만 저널에서 테스트할 때 각 이동 평균에 대해 메시지가 표시됩니다.

오류: 4806은 "요청한 데이터를 찾을 수 없습니다"입니다.

내 실수가 어디 있는지 알려주세요.

고맙습니다.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
DC2008 :

타입 캐스팅의 원리를 제대로 이해하지 못하셨나요? 매우 간단합니다.

이제 명확해 보입니다) datetime tp[]보다 작은 유형의 int st 피연산자가 나타납니다.

따라서 작업에서 초로 변환하지 않습니다.

 int st=tp[ 0 ];

나는 시간 간격에서 최소값을 찾으려고 노력했다. 제대로 하고 있는지 잘 모르겠습니다. 이전글 보이시죠?

주말 확인을 위해 새 틱 없이 Alert 또는 Comment를 어떻게 호출할 수 있습니까?

 
forexman77 :

시간 간격에서 최소값을 찾아야 합니다. 시간을 확인하기 위해 다음 코드를 컴파일했습니다.

이 간격의 최저치를 검색하기 위해 CopyLow 기능을 사용합니다.

또한 올바르게 이해하면 1차원 배열 Low[],

ArrayMinimum을 사용하여 최소값을 찾고 있습니다.  

오늘 시작 시간을 1시간으로 설정하고 2시간을 중지하고 Alert를 호출하여 min=-1을 확인하려고 했습니다.

질문: 이 작업의 경우 이 작업을 해결하기 위해 함수가 올바르게 선택되었습니까? 아니면 어딘가에 오류가 있습니까? 당신 은 최소 가격 을 얻을 필요가 있습니다.

우리는 주의 깊게 읽습니다:

반환 값

이 함수는 배열의 직렬 성을 고려하여 찾은 요소 의 인덱스 를 반환합니다. 실패 시 함수는 -1을 반환합니다.

그래서 당신은 이것을해야합니다 :

 Alert ( "min=" ,Low[ ArrayMinimum (Low)]);
 

스크립트 뿐만 아니라 주말에도 확인 및 테스트가 필요합니다.

 
DC2008 :

스크립트 뿐만 아니라 주말에도 확인 및 테스트가 필요합니다.

고맙습니다!
사유: