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

 
andrey46 :
테스터에서 EA가 잘 작동하고 주문을 하는 이유를 누가 알 수 있지만 실제 계정 에서는 로봇이 활성화되어 있어도 주문이 이루어지지 않습니다.

잡지를 읽어야 답이 있을 수 있습니다.

 

이것부터 알려주세요-

 double w = 18.2

그것을 얻을 -

 int w = 18
 
TrederMT5 :

이것부터 알려주세요-

그것을 얻을 -

 int w1;
double w = 18.2 ;
w1=( int )w;
w=round (w);

명시적 유형 변환.

그리고 전체가 아닌 정수(반올림)도 할 수 있습니다. 하지만 이중에서는 18.0이 됩니다.

 
scomoroh :

그럼 질문을 반복하겠습니다.

표현

 if (izmb>b ||izmb<b || izms>s || izms<s)

이것과 동일:

 if (izmb!=b || izms!=s)

그리고 무언가를 저장하고 싶다면 전역 변수 에 저장하십시오.

이것은 함수 본문 외부에 선언된 것입니다.

 int izmb= 0 , izms= 0 ;


void OnTick ()
   {
   .........
 
Valeriy Yastremskiy :


감사해요
 

모두에게 좋은 하루!

MQL4에 대한 질문입니다. 다음은 간단한 코드입니다.

 double LoY[ 31 ][ 31 ],LoU,LoU1;
int S,S1,S2;
void OnTick ()
{
if (Minute()== 20 &&Minute()!=S1)
{
ArrayFill (LoY, 0 , 31 , 0.5555 );
S1=Minute();
}
//***************************************************************
if (Minute()!=S)
{
LoY[ 0 ][ 0 ]=Bid;
ArraySort (LoY, WHOLE_ARRAY , 0 ,MODE_ASCEND);
Print ( "----LoY[0][1]-- Горизонтально ---  [0}  " ,  LoY[ 0 ][ 0 ], "  [1] " ,   LoY[ 0 ][ 1 ], "  [2] " ,   LoY[ 0 ][ 2 ], "  [3] " ,   LoY[ 0 ][ 3 ], "  [4] " ,   LoY[ 0 ][ 4 ], "  [26] " ,   LoY[ 0 ][ 26 ], "  [27] " ,   LoY[ 0 ][ 27 ], "  [28] " ,   LoY[ 0 ][ 28 ], "  [29] " ,   LoY[ 0 ][ 29 ], "  [30] " ,   LoY[ 0 ][ 30 ]);
Print ( "----LoY[1][0]-- Вертикалььно ---  [0}  " ,  LoY[ 0 ][ 0 ], "  [1] " ,   LoY[ 1 ][ 0 ], "  [2] " ,   LoY[ 2 ][ 0 ], "  [3] " ,   LoY[ 3 ][ 0 ], "  [4] " ,   LoY[ 4 ][ 0 ], "  [26] " ,   LoY[ 26 ][ 0 ], "  [27] " ,   LoY[ 27 ][ 0 ], "  [28] " ,   LoY[ 28 ][ 0 ], "  [29] " ,   LoY[ 29 ][ 0 ], "  [30] " ,   LoY[ 30 ][ 0 ]);
S=Minute();
}
}

2차원 배열을 만들고 프로그램에서 값으로 채웁니다. 코드 ArrayFill(LoY,0,31,0.5555); 및 ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND); 디렉토리로 판단하면 둘 다 2차원 배열에서 작동합니다. ArrayFill()은 수평으로 채워진 배열에서 엄격하게 작동하며 Reference에서는 위에서 아래 또는 아래에서 위로가 아닌 왼쪽에서 오른쪽으로 엄격하게으로 배열을 채웁니다 . ArraySort()는 2차원 배열을 첫 번째 차원으로 정렬합니다. 핸드북은 수평으로 채워진 배열 또는 수직으로 채워진 배열을 정렬하는지 여부를 말하지 않습니다. 내 코드 실행으로 판단하면 ArraySort()는 세로로 채워진 배열만 정렬합니다. 이 두 함수는 동일한 프로그램의 동일한 배열에서 작동할 수 없는 것 같습니다.

문제. ArraySort() 함수가 올바르게 작동하는 것이 중요합니다. 이를 기반으로 ArrayFill()이 작동하는 수평으로 채워진 배열을 정렬하도록 ArraySort()를 구성할 수 있습니까? 아니면 MQL4에서 작동하는 MQL5의 정렬 기능이 대신 도움이 될까요? 또는 모든 값이 포함된 가로로 채워진 배열을 세로로 변환하는 함수가 있습니다. 한 마디로, 내 프로그램이 배열을 수평으로 정렬하는 방법

메모. 대신에   루프를 사용하는 ArrayFill() - 나에게 적합하지 않습니다.

도와 주셔서 감사합니다

 
ANDREY :

모두에게 좋은 하루!

MQL4에 대한 질문입니다. 다음은 간단한 코드입니다.

2차원 배열을 만들고 프로그램에서 값으로 채웁니다. 코드 ArrayFill(LoY,0,31,0.5555); 및 ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND); 디렉토리로 판단하면 둘 다 2차원 배열에서 작동합니다. ArrayFill()은 수평으로 채워진 배열에서 엄격하게 작동하며 Reference에서는 위에서 아래 또는 아래에서 위로가 아닌 왼쪽에서 오른쪽으로 엄격하게으로 배열을 채웁니다 . ArraySort()는 2차원 배열을 첫 번째 차원으로 정렬합니다. 핸드북은 수평으로 채워진 배열 또는 수직으로 채워진 배열을 정렬하는지 여부를 말하지 않습니다. 내 코드 실행으로 판단하면 ArraySort()는 세로로 채워진 배열만 정렬합니다. 이 두 함수는 동일한 프로그램의 동일한 배열에서 작동할 수 없는 것 같습니다.

문제. ArraySort() 함수가 올바르게 작동하는 것이 중요합니다. 이를 기반으로 ArrayFill()이 작동하는 수평으로 채워진 배열을 정렬하도록 ArraySort()를 구성할 수 있습니까? 아니면 MQL4에서 작동하는 MQL5의 정렬 기능이 대신 도움이 될까요? 또는 모든 값이 포함된 가로로 채워진 배열을 세로로 변환하는 함수가 있습니다. 한마디로 내 프로그램이 배열을 수평으로 정렬하는 방법

메모. 대신에   루프를 사용하는 ArrayFill() - 나에게 적합하지 않습니다.

도와 주셔서 감사합니다

주의를 기울였는가

노트

배열 채우기

다차원 배열 은 ArrayFill() 에 의해 처리될 때 1차원 으로 처리됩니다. 예를 들어 array[2][4] 는 array[8] 로 처리 되므로 이 배열로 작업할 때 인덱스를 지정할 수 있습니다. 초기 요소의 값은 5와 같습니다. 따라서 array[2][4]에 대해 ArrayFill(array, 5, 2, 3.14)을 호출하면 array[1][1] 및 array[1][2]에 값 3.14가 채워집니다.


이 라인

 ArrayFill (LoY, 0 , 31 , 0.5555 );

정확히 하나의 행으로 배열을 채웁니다.

수직/수평은 녹화물을 계속 바라보는 방식입니다. Excel 스프레드시트를 보면 모든 것이 명확해집니다. 열 "A"가 값으로 채워지면 1차원 배열을 얻습니다. 위치는 어떻게 됩니까? 그렇군요.. 소파에 누워서 가로로 보고있으니까.......

 
Alexey Viktorov :

주의를 기울였는가

노트

이 라인

정확히 하나의 행으로 배열을 채 웁니다.

수직/수평은 녹화물을 계속 바라보는 방식입니다. Excel 스프레드시트를 보면 모든 것이 명확해집니다. 열 "A"가 값으로 채워지면 1차원 배열을 얻습니다. 위치는 어떻게 되나요? 그렇군요.. 소파에 누워서 가로로 보고있으니까.......

답변 해주셔서 감사합니다. 당신이 쓴 모든 것을 이해했습니다. 하지만 내 문제의 관점에서 쓰여진 것의 의미를 이해하지 못했습니다.

내 코드에서 수평 2차원 배열이란 인덱스 0 또는 1에 2개의 행이 있고 인덱스 0에서 30까지의 열이 있는 경우를 의미합니다. 첫 번째 차원은 다음과 같이 표시됩니다.   [0]   [0],   [0]   [하나],   [0]   [2], ... [0]   두 번째 차원은 다음과 같이 표시됩니다.   [하나]   [0],   [하나]   [하나],   [하나]   [2], ... [1]   [서른]  

내 코드에서 수직 2차원 배열이란 인덱스 0~30에 31개의 행이 있고 인덱스 0과 1에 2개의 열이 있는 경우를 의미합니다. 첫 번째 차원은 다음과 같이 표시됩니다.   [0]   [0],   [하나   [0],   [2]   [0], ... [30]   [0] 두 번째 차원은 다음과 같이 표시됩니다.   [0]   [하나],   [하나]   [하나],   [2]   [1], ... [30]   [하나]  

내 코드를 실행하면 배열이 세로로 채워집니다. 그리고 ArraySort() 함수는 배열을 정렬 해야 하는 대로 정렬합니다.

질문 ArrayFill() 함수가 작동하지 않는 이유는 무엇입니까? 결국 20분에 배열의 첫 번째 차원(31개 요소)을 동일한 값 0.5555로 채우라고 했습니다.
도와 주셔서 감사합니다.

 
MakarFX :

나는 그것을 시도 할 것이다

도와 주셔서 감사합니다. 노력하겠습니다.

 
Aleksei Stepanenko :

표현

이것과 동일:

그리고 무언가를 저장하고 싶다면 전역 변수 에 저장하십시오.

이것은 함수 본문 외부에 선언된 것입니다.

어드바이저 항목을 검색하기 위한 조건을 매 틱마다 확인하지 않고 다음 주문이 다른 어드바이저에 의해 또는 수동으로 열리거나 닫히는 경우에만(프로세서에 추가 로드가 없도록) 그런 아이디어가 있었습니다. 따라서 각 틱별로 주문 수의 일치 여부를 확인할 필요가 있습니다.

정적 변수 - 정적을 사용할 수 있습니까? 프로그램이 이 형식으로 작동합니까?

    double LB= 0 ,LS= 0 ;
    int b= 0 ,s= 0 ;
    static int izmb, izms; // статическая переменная
   
   for ( int i= 0 ; i< OrdersTotal (); i++)
   {    
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()== Symbol ())
         { 
             int tip = OrderType(); 
             if (tip==OP_BUY)             
            {  
               LB  += OrderLots();
               b++; 
            }                                         
             if (tip==OP_SELL)        
            {
               LS  += OrderLots();
               s++;
            } 
         }
     }
     
   }
     if (izmb!=b || izms!=s){ 
    izmb=b;
    izms=s 
           // далее идут условия для открытия ордера.
     }