RefreshRates() 함수는 무엇을 업데이트합니까? - 페이지 2

 
iClose: null - 오류입니다. 함수는 오류를 발생시키지 않습니다. 현재 사용되지 않는 값을 반환합니다.
 
여기에서 " iClose() 는 브로커의 서버(DC)에서 값을 받습니다. " 이 함수의 데이터가 정직한 브로커를 구성하면 모든 것이 제자리에 들어갑니다.))) 현재 틱만 신뢰할 수 있는 것으로 나타났습니다.
 
Artyom Trishkin :
아니 이런 식으로. 함수에 대한 도움말에서 반환 값에 대해 무엇을 말합니까?
나는 닫는다

반환 값

해당 차트의 막대 종가(shift 매개변수로 표시) 값 또는 오류의 경우 0입니다 . 오류에 대한 자세한 정보를 얻으려면 GetLastError() 함수를 호출하십시오.

0이 아니면 오류가 없는 것으로 판명되었습니다. 그러나 값도 변경되지 않습니다... 그래서 RefreshRates(); 없이는 업데이트되지 않습니다.
 
Mikhail Nazarenko :

그리고 현재 시간과 다른 시간 프레임으로 변경하면 RefreshRates() 를 사용해도 데이터 업데이트가 정시에 중지됩니다. iClose 등의 기본 기능을 나타냅니다. MT4에서 그들은 관련 없는 헛소리를 합니다. 정보 제품의 80%는 MT4의 이러한 고유한 기능을 고려하지 않는다고 확신합니다. 어떻게 더 살 것인가?)))

TF를 변경해도 아무 효과가 없습니다. 현재 iClose 값은 차트 기간 에 관계없이 Bid 값과 동일합니다.
 
Alexey Viktorov :
TF를 변경해도 아무 효과가 없습니다. 현재 iClose 값은 차트 기간 에 관계없이 Bid 값과 동일합니다.

어드바이저를 만들어서 하루동안 M5로 런칭했습니다. 시간 변경 시 iClose(symbol,PERIOD_H1,1),iClose(symbol, PERIOD_ M5,1), iClose(symbol, PERIOD_ M1,1 ),Close[1 ],매기다

  1. iClose(symbol, PERIOD_ M5,1 ),Close[1] - 차트에 정확히 표시됨
  2. 입찰가가 임박했습니다. 다음 틱입니다.
  3. iClose(symbol,PERIOD_H1,1),iClose(symbol, PERIOD_ M1,1) - 때로는 일치하고 때로는 특히 저녁에 RefreshRates()가 연결된 후에도 완전한 쓰레기를 보여주었습니다.

개발자에게 질문합니다. 잘못된 정보를 제공하고 어쨌든 데이터를 업데이트할 수 없는 경우 MQL4에서 iClose 기능 등이 필요한 이유는 무엇입니까?

 
Mikhail Nazarenko :

어드바이저를 만들어서 하루동안 M5로 런칭했습니다. 시간 변경 시 iClose(symbol,PERIOD_H1,1),iClose(symbol, PERIOD_ M5,1), iClose(symbol, PERIOD_ M1,1 ),Close[1 ],매기다

  1. iClose(symbol, PERIOD_ M5,1 ),Close[1] - 차트에 정확히 표시됨
  2. 입찰가가 임박했습니다. 다음 틱입니다.
  3. iClose(symbol,PERIOD_H1,1),iClose(symbol, PERIOD_ M1,1) - 때로는 일치하고 때로는 특히 저녁에 RefreshRates()가 연결된 후에도 완전한 쓰레기를 보여주었습니다.

개발자에게 질문합니다. 잘못된 정보를 제공하고 어쨌든 데이터를 업데이트할 수 없는 경우 MQL4에서 iClose 기능 등이 필요한 이유는 무엇입니까?

말도 안되는 소리. 어떤 이유로 실행이 지연되는 경우에만 RefreshRates()를 호출하면 됩니다. 긴주기 또는 단순히 주문을 보낼 때 가격을 업데이트하는 것과 같은 경우. 귀하의 버전은 문제가 되지 않습니다. 가격 값을 잘못 수신하는 코드의 예를 더 잘 배치하십시오.

이제 이 코드를 실행했습니다.

 double close_H1,
       close_M1;

/*******************Expert initialization function*******************/
int OnInit ()
 {
   return ( INIT_SUCCEEDED );
 } /*******************************************************************/

/************************Expert tick function************************/
void OnTick ()
 {
   if (NewBar( PERIOD_M5 ))
   {
    close_H1 = iClose ( _Symbol , PERIOD_M5 , 1 );
    close_M1 = iClose ( _Symbol , PERIOD_M1 , 1 );
     if (close_H1 != close_M1)
       Print (close_H1, " != " , close_M1);
   }
   Comment (close_H1, "\n" ,
          close_M1, "\n"
         );
 } /******************************************************************/

/**********************Expert OnDeinit function**********************/
void OnDeinit ( const int reason)
 {
   Comment ( "" );
 } /******************************************************************/

bool NewBar( ENUM_TIMEFRAMES tf)
  {
   static datetime nt = 0 ;
   datetime tm = iTime ( _Symbol , tf, 0 );
   if (tm == 0 )
       return false ;
   if (tm != nt)
     {
      nt = tm;
       return true ;
     }
   return false ;
 } /******************************************************************/
사실, 1분의 마감은 차트의 더 높은 기간 과 일치해야 합니다. 나중에 로그에 뭔가 기록되어 있는지 확인하겠습니다.
 
Mikhail Nazarenko :

그리고 현재 시간과 다른 시간 프레임으로 변경하면 RefreshRates() 를 사용해도 데이터 업데이트가 정시에 중지됩니다.

이 주장을 뒷받침하는 테스트 코드가 있습니까? 나는 이것을 스스로 눈치채지 못했다. TF를 전환할 때 히스토리가 바뀔 때까지 기다린 다음 작업합니다.


iClose 등의 기본 기능을 나타냅니다. MT4에서는 관련 없는 헛소리를 합니다.

너무 시끄러운 발언. 경우에 따라 이것이 가능하지만 오류 코드가 있습니다 . 확인하지 않으면 결과를 사용할 수 있는지 여부를 결코 이해할 수 없습니다.


정보 제품의 80%는 MT4의 이러한 고유한 기능을 고려하지 않는다고 확신합니다. 어떻게 더 살 것인가?)))

나는 더 말할 것입니다 : 거의 모든 프로그램은 무언가를 고려하지 않습니다. 그것이 새로운 버전을 위한 것입니다. 제품이 더 이상 지원되지 않으면 사용할 수 없게 됩니다.

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov :

말도 안되는 소리. 어떤 이유로 실행이 지연되는 경우에만 RefreshRates()를 호출하면 됩니다. 긴주기 또는 단순히 주문을 보낼 때 가격을 업데이트하는 것과 같은 경우. 귀하의 버전은 문제가 되지 않습니다. 가격 값을 잘못 수신하는 코드의 예를 더 잘 배치하십시오.

이제 이 코드를 실행했습니다.

사실, 1분의 마감은 차트의 더 높은 기간 과 일치해야 합니다. 나중에 로그에 뭔가 기록되어 있는지 확인하겠습니다.

내 코드는 비슷합니다. OnTick 오류

close_H1 = iClose ( _Symbol , PERIOD_M5 , 1 );

필요한

close_H1 = iClose ( _Symbol , PERIOD_H1 , 1 );
close_M5 = Close[1];
if(close_H1 != close_M5)
	Print(close_H1, " != " , close_M5);
if(close_M1 != close_M5)
	Print(close_M1, " != " , close_M5);


현재 시간 프레임이 M5인 경우 M5를 H1 및 M1과 비교해야 합니다.

현재 시간 프레임, 즉 M5가 나에게 올바르게 표시되었습니다. 문제는 H1과 M1에 있었습니다.

Alpari에서 실제 EURCHF M5를 확인했지만 Print 대신 각 레벨에서 가로 세그먼트를 그렸습니다.

 
Ihor Herasko :

이 주장을 뒷받침하는 테스트 코드가 있습니까? 나는 이것을 스스로 눈치채지 못했다. TF를 전환할 때 히스토리가 바뀔 때까지 기다린 다음 작업합니다.


너무 시끄러운 발언. 경우에 따라 이것이 가능하지만 오류 코드가 있습니다 . 확인하지 않으면 결과를 사용할 수 있는지 여부를 결코 이해할 수 없습니다.


나는 더 말할 것입니다 : 거의 모든 프로그램은 무언가를 고려하지 않습니다. 그것이 새로운 버전을 위한 것입니다. 제품이 더 이상 지원되지 않으면 사용할 수 없게 됩니다.

다음은 코드입니다. 넣고 확인하세요. 모든 촛불에 성냥이 있는 것은 아닙니다. 알파리 리얼 EURCHF M5.

double close_H1,close_M5,
       close_M1;

/*******************Expert initialization function*******************/
int OnInit()
 {
  return(INIT_SUCCEEDED);
 }/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  if(NewBar(PERIOD_M5))
   {
    close_H1 = iClose(_Symbol, PERIOD_H1, 1);
    close_M1 = iClose(_Symbol, PERIOD_M1, 1);
    close_M5 = Close[1];
    
    if(close_H1 != close_M5)
      Print(close_H1, " H1 != M5 ", close_M5);
    if(close_M1 != close_M5)
      Print(close_M1, " M1 != M5 ", close_M5);
   
     Comment(
               close_H1, " H1\n",
               close_M1, " M1\n",
               close_M5, " M5\n"
            );
         
  }       
 }/******************************************************************/

/**********************Expert OnDeinit function**********************/
void OnDeinit(const int reason)
 {
  Comment("");
 }/******************************************************************/

bool NewBar(ENUM_TIMEFRAMES tf)
  {
   static datetime nt = 0;
   datetime tm = iTime(_Symbol, tf, 0);
   if(tm == 0)
      return false;
   if(tm != nt)
     {
      nt = tm;
      return true;
     }
   return false;
 }/******************************************************************/

 
Mikhail Nazarenko :
iClose: null - 오류입니다. 함수는 오류를 발생시키지 않습니다. 현재 사용되지 않는 값을 반환합니다.

iXXXXX 기능의 오류가 의심되는 경우 SymbolInfoXXXX 기능을 사용하십시오.