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

 
Alexandr Sokolov :

그것은 계산에 도달하지 않습니다


여기 초기화가 있습니다


그리고 여기 테스트 조건이 있습니다

감사합니다!!!!!)))))) 일부러 Tf=false를 했고...... 잊어버렸습니다. 죄송합니다

모든 것이 작동합니다.
 
Alexey Viktorov :
먼저 미래 배열의 두 번째 차원에서 값의 수를 결정해야 합니다. 요소의 수가 같지 않다는 것은 이미 분명합니다. 아마도 최대값을 취해야 하며, 추가 값이 있는 경우 예를 들어 0 또는 -1로 채웁니다. 그리고 첫 번째 측정은 알고 있는지 여부를 미리 결정하는 데 방해가 되지 않습니다. 그런 다음 중첩 루프에서 L1을 취하고 필요한 모든 것을 배열에 쓰고, 외부 루프의 두 번째 반복은 L2에 있는 모든 것을 다음 인덱스에 씁니다.


그리고 아주 정확하게는 구조에 밀어 넣는 것이 좋습니다.

그런 다음 첫 번째 차원과 두 번째 차원 모두에서 차원을 변경할 수 있습니다. 즉, 1차원 배열 안에 1차원 배열이 있을 것입니다.
벡터 감사합니다.
 
stepystr :
벡터 감사합니다.

나는 갑자기 매개변수를 문자열에 쓰고 그로부터 매개변수 배열을 생성하는 것이 더 유리하다는 주문을 받았습니다. 그래서 우리는 이론을 실천으로 옮겨야 했습니다. 글쎄, 나는 당신에게 내 작업을 약간 확장했습니다. 다음은 구조체를 사용하는 예입니다. 값 목록 끝에 있는 예에서만 구분 기호 ";"를 제거해야 합니다.

 /********************************************************************\
|                                                             00.mq5 |
|                                            © 2020, Alexey Viktorov |
|                       https://www.mql5.com/ru/users/alexeyvik/news |
\********************************************************************/
#property copyright "© 2020, Alexey Viktorov"
#property link        "https://www.mql5.com/ru/users/alexeyvik/news"
#property version    "1.00"
struct TEST
 {
   double              s0[];
   double              s1[];
 } test[ 2 ];
string L1 = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475" ;
string L2 = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465" ;
/********************Script program start function*******************/
void OnStart ()
 {
  String_to_Array(L1, test[ 0 ].s0);
  String_to_Array(L2, test[ 1 ].s1);
   ArrayPrint (test[ 0 ].s0);
   ArrayPrint (test[ 1 ].s1);
 } /******************************************************************/

/********************************************************************/
void String_to_Array( string str, double &array[])
 {
   StringTrimRight (str);
   int index = INT_MAX ;
   while (index > 0 )
   {
    index = StringFind (str, ";" );
     int i = ArraySize (array);
     ArrayResize (array, i+ 1 );
    array[i] = StringToDouble ( StringSubstr (str, 0 , index));
     StringTrimLeft (str);
    str = StringSubstr (str, index+ 1 );
   }
 }; /*****************************************************************/
/*****************************End program****************************/
파일:
00.mq5  4 kb
 
Alexey Viktorov :

나는 갑자기 매개변수를 문자열에 쓰고 그로부터 매개변수 배열을 생성하는 것이 더 유리하다는 주문을 받았습니다. 그래서 우리는 이론을 실천으로 옮겨야 했습니다. 글쎄, 나는 당신에게 내 작업을 약간 확장했습니다. 다음은 구조체를 사용하는 예입니다. 값 목록 끝에 있는 예에서만 구분 기호 ";"를 제거해야 합니다.

 struct TEST
{
   double              s0[];
   double              s1[];
} test[ 2 ];
string L1 = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475" ;
string L2 = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465" ;
/********************Script program start function*******************/
void OnStart ()
{
   String_to_Array(L1, ';' , test[ 0 ].s0);
   String_to_Array(L2, ';' , test[ 1 ].s1);
   ArrayPrint (test[ 0 ].s0);
   ArrayPrint (test[ 1 ].s1);
} /******************************************************************/

/********************************************************************/
void String_to_Array( const string str, const ushort separator, double &result[])
{
   string s_arr[];
   if ( StringSplit (str, separator, s_arr) <= 0 )
   {
       ArrayResize (result, 0 );
       Print ( __FUNCTION__ + " Error converting !" );
       return ;
   }
   ArrayResize (result, ArraySize (s_arr));
   for ( int i = ArraySize (result) - 1 ; i >= 0 ; i--)
      result[i] = StringToDouble (s_arr[i]);
}
 

수표가 없습니다, 가능합니다

 void String_to_Array( const string str, const ushort separator, double &result[])
{
   string s_arr[];
   StringSplit (str, separator, s_arr);
   for ( int i = ArrayResize (result, ArraySize (s_arr)) - 1 ; i >= 0 ; i--)
      result[i] = StringToDouble (s_arr[i]);
}
 
Igor Makanu :

또한 옵션입니다. 모든 문서를 읽지 않은 것으로 나타났습니다.

 
Alexey Viktorov :

또한 옵션입니다. 모든 문서를 읽지 않은 것으로 나타났습니다.

StringSplit 은 멋진 기능입니다. 구분 기호로 문자열을 구문 분석하는 것은 매우 편리합니다.

 
안녕 모두. 코드에 문자열 유형 의 변수를 삽입하는 데 도움이 됩니다. 감사해요
 ObjectCreate ( "ObjName11" , OBJ_LABEL , 0 , 0 , 0 );
   ObjectSetText( "ObjName11" , "|Direction: =" + <String>   + "|Spread: =" + IntegerToString (Spread, 0 )+ "|Today: =" +DoubleToStr(ATRToday, 2 )+ "%" ,Size, "Verdana" ,Red);
   ObjectSet( "ObjName11" , OBJPROP_CORNER ,infoCorner);
   ObjectSet( "ObjName11" , OBJPROP_XDISTANCE , 0 );
   ObjectSet( "ObjName11" , OBJPROP_YDISTANCE , 120 );
 
Carcass77 :
안녕 모두. 코드에 문자열 유형 의 변수를 삽입하는 데 도움이 됩니다. 감사해요

자신의 질문에 답할 수 있습니까?

아니면 어딘가에서 코드 조각을 잘라서 사용할 수 없습니까? 그리고 당신은 무슨 일이 일어나고 있는지 알아 내야합니다

위에 쓰다

 string s;

<문자열>을 s로 바꿉니다.

하지만 나는 이것이 갈 길이라고 생각하지 않는다

 
Igor Makanu :

자신의 질문에 답할 수 있습니까?

아니면 어딘가에서 코드 조각을 잘라서 사용할 수 없습니까? 그리고 당신은 무슨 일이 일어나고 있는지 알아 내야합니다

위에 쓰다

<문자열>을 s로 바꿉니다.

하지만 나는 이것이 갈 길이라고 생각하지 않는다

내 표시기가 작동 중이며 확장 중입니다. 문자열 ; 추가되었다.

알았어, 내가 갈게