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

 

그 과정에서 몇 가지 질문이 더 생겼습니다.

1. 다음과 같은 줄이 있습니다.

datetime ProvTimeX1=ObjectGetInteger(0,"Y="+IntegerToString(y,0,' '),OBJPROP_TIME);

컴파일러는 "유형 변환으로 인한 데이터 손실 가능성 "을 씁니다. 여기서 무슨 문제가 있습니까?

2. 데이터는 어떻게 배열에 입력되고 mql5에서 어떤 방향으로 배포됩니까?

 
WindSW :

그 과정에서 몇 가지 질문이 더 생겼습니다.

1. 다음과 같은 줄이 있습니다.

datetime ProvTimeX1=ObjectGetInteger(0,"Y="+IntegerToString(y,0,' '),OBJPROP_TIME);

컴파일러는 "유형 변환으로 인한 데이터 손실 가능성 "을 씁니다. 여기서 무슨 문제가 있습니까?

글쎄, 당신은 맹세하는 것이 옳습니다. 당신은 ObjectGetInteger에서 반환된 긴 값을 datetime 변수에 쓰려고 합니다. 유형 캐스트를 수행합니다.

 datetime ProvTimeX1=( datetime ) ObjectGetInteger ( 0 , "Y=" + IntegerToString (y, 0 , ' ' ), OBJPROP_TIME );
2. 데이터는 어떻게 배열에 입력되고 mql5에서 어떤 방향으로 배포됩니까?

방향은 항상 동일합니다. 처음(인덱스는 0)에서 끝까지, 그러나 ArraySetAsSeries 함수를 사용하여 인덱싱이 지정되지 않은 경우입니다. 질문이 인덱싱에 관한 것이라면.

 

좋은 오후, 나는 숫자를 나눌 수 없습니다, 결과는 0.0입니다

왜요?

   double res =   8000 / 16000 * 100 ;
   Print (res);
 
ryzhak.vladimir :

좋은 오후, 나는 숫자를 나눌 수 없습니다, 결과는 0.0입니다

왜요?



   double res=(( double ) 8000 / 16000 )* 100 ;
   Print (res);
문서 >>> 유형 캐스팅
 

물론 변경할 것을 추가해야 하는 어리석음, 점이 없는 일부 계산기는 모든 것이 괜찮다고 생각하고 데이터 유형이 무엇인지 말할 필요가 없지만 두 번째 방법은 ".0"을 추가하는 것입니다. 정수의 끝에서

즉, 올바른 표현은 다음과 같습니다.

 double res = 8000.0 / 16000.0 * 100 ;
Print (res);
그건 그렇고, 일부 프로그래밍 언어에서 터미널 자체가 유형을 선택하는 것과 같은 변수 지정을 보았습니다. 아마도 이것은 디지털 데이터에만 관련이 있지만 여전히 편리하고 여기에서 우연히 구현되지 않았습니다. 문서에서 찾으려고했습니다. 못 찾았어?
 
모두 감사합니다)
 

버전 4: datetime TimeX2=Time[0]+18000; - 시간 값을 앞으로 5초 증가

이제 5시에 다음을 작성합니다.

 datetime Topen[];
ArraySetAsSeries (Topen, true );
CopyTime ( _Symbol , _Period , 0 , 3 ,Topen);
datetime TimeX2=Topen[ 0 ]+ 18000 ;

디버깅할 때 배열 오버플로 오류가 발생하고 문자열 datetime TimeX2=Topen[ 0 ]+ 18000 을 가리킵니다.

4에서와 5에서 동일한 결과를 얻는 방법을 알려주십시오.

추가: 모든 것이 올바르게 작성되었습니다. 방금 실수를 했습니다. OnInit에서 배열이 비어 있었습니다.

 
WindSW :

버전 4: datetime TimeX2=Time[0]+18000; - 시간 값을 앞으로 5초 증가

이제 5시에 다음을 작성합니다.

디버깅할 때 배열 오버플로 오류가 발생하고 문자열 datetime TimeX2=Topen[ 0 ]+ 18000 을 가리킵니다.

4에서와 5에서 동일한 결과를 얻는 방법을 알려주십시오.

 datetime b= TimeTradeServer ()+ 60 *min; //min - кол-во минут от текущего времени
 

도면 수준 문제에 직면했습니다.

 void OnInit ()
  {
   ObjectCreate ( 0 ,oPP, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
   ObjectSetInteger ( 0 ,oPP, OBJPROP_COLOR , clrDeepSkyBlue );
   ObjectSetInteger ( 0 ,oPP, OBJPROP_STYLE , STYLE_SOLID );
   ObjectSetInteger ( 0 ,oPP, OBJPROP_WIDTH , 2 );
   ObjectSetInteger ( 0 ,oPP, OBJPROP_RAY , false );
   ObjectCreate ( 0 ,oRes1, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
   ObjectSetInteger ( 0 ,oRes1, OBJPROP_COLOR , clrDeepSkyBlue );
   ObjectSetInteger ( 0 ,oRes1, OBJPROP_STYLE , STYLE_DASH );
   ObjectSetInteger ( 0 ,oRes1, OBJPROP_WIDTH , 1 );
   ObjectSetInteger ( 0 ,oRes1, OBJPROP_RAY , false );
   ObjectCreate ( 0 ,oSup1, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
   ObjectSetInteger ( 0 ,oSup1, OBJPROP_COLOR , clrDeepSkyBlue );
   ObjectSetInteger ( 0 ,oSup1, OBJPROP_STYLE , STYLE_DASH );
   ObjectSetInteger ( 0 ,oSup1, OBJPROP_WIDTH , 1 );
   ObjectSetInteger ( 0 ,oSup1, OBJPROP_RAY , false );
   PPlevel();
  }
//+------------------------------------------------+
//| Пивот поинт                                    |
//+------------------------------------------------+
void PPlevel()
   {
     double iH=iHigh( Symbol (), PERIOD_D1 , 1 );
     double iL=iLow( Symbol (), PERIOD_D1 , 1 );
     double iC=iClose( Symbol (), PERIOD_D1 , 1 );
     double iO=iOpen( Symbol (), PERIOD_D1 , 1 );
     int New_candle= 0 ;
    New_candle=NBar(); // функция появления новой свечи
     if (New_candle== 1 )
      {
       double range= NormalizeDouble (iH-iL, _Digits );
       double PP= NormalizeDouble ((iH+iL+iC)/ 3 , _Digits );
       double R1= NormalizeDouble (( 2 *PP)-iL, _Digits );
       double S1= NormalizeDouble (( 2 *PP)-iH, _Digits );
       TimeStart=iTime( Symbol (), PERIOD_D1 , 0 )- 7200 ;
       TimeFinish=Topen[ 0 ]+ 64000 ;
       ObjectSetInteger ( 0 ,oPP, OBJPROP_TIME ,TimeStart);                 // отрисовка PP
       ObjectSetDouble ( 0 ,oPP, OBJPROP_PRICE ,PP);
       ObjectSetInteger ( 0 ,oPP, OBJPROP_TIME , 1 ,TimeFinish);
       ObjectSetDouble ( 0 ,oPP, OBJPROP_PRICE , 1 ,PP);
       ObjectSetInteger ( 0 ,oRes1, OBJPROP_TIME ,TimeStart);               // отрисовка сопротивления
       ObjectSetDouble ( 0 ,oRes1, OBJPROP_PRICE ,R1);
       ObjectSetInteger ( 0 ,oRes1, OBJPROP_TIME , 1 ,TimeFinish);
       ObjectSetDouble ( 0 ,oRes1, OBJPROP_PRICE , 1 ,R1);
       ObjectSetInteger ( 0 ,oSup1, OBJPROP_TIME ,TimeStart);               // отрисовка поддержки
       ObjectSetDouble ( 0 ,oSup1, OBJPROP_PRICE ,S1);
       ObjectSetInteger ( 0 ,oSup1, OBJPROP_TIME , 1 ,TimeFinish);
       ObjectSetDouble ( 0 ,oSup1, OBJPROP_PRICE , 1 ,S1);
      }
   }
Print()를 사용하여 확인합니다. "예: (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" 정상적인 계산 결과를 제공하지만 그리지는 않습니다. 수준. " 객체 목록 "을 통해 터미널을 확인했는데 거기에 없습니다. 무엇이 문제인지 알려주세요. 어디에서 침을 뱉나요?
 
WindSW :

도면 수준 문제에 직면했습니다.

Print()를 사용하여 확인합니다. "예: (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" 정상적인 계산 결과를 제공하지만 그리지는 않습니다. 수준. " 객체 목록 "을 통해 터미널을 확인했는데 거기에 없습니다. 무엇이 문제인지 알려주세요. 어디에서 침을 뱉나요?
인쇄를 통해 ObjectCreate의 결과를 인쇄하십시오. 아마도 오류가 있을 수 있습니다.
사유: