포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 650

 
AlexeyVik :

나는 그가 다른 차트에서 개체의 매개변수를 가져와야 한다는 것을 이해했습니다.

다른 차트의 차트가 있는 경우 차트 식별자와 함께 함수 변형을 사용하도록 합니다.

문제도 없습니다.

 
sergeev :

다른 차트의 차트가 있는 경우 차트 식별자와 함께 함수 변형을 사용하도록 합니다.

문제도 없습니다.

맞습니다. 하지만 지금까지는 차트 식별자를 사용할 필요가 없었고 이론적으로만 익숙하기 때문에 현재 차트에 개체를 그리는 옵션을 제안했습니다.
 
rov_kvn :



놀라운! 그게 요점이었습니다. 고마워, 친구!
 
sergeev :

다른 차트의 차트가 있는 경우 차트 식별자와 함께 함수 변형을 사용하도록 합니다.

문제도 없습니다.


내가 이해하는 한 유일한 옵션은 가격에 대한 ObjectGetDouble() 및 날짜에 대한 ObjectGetInteger()뿐입니다.

chart_id = 0인 현재 TF의 가격을 얻으려고 합니다.

 double price1 = ObjectGetDouble ( 0 , "Supply" , 3 );

- 그래야만 하는 의미. 0 대신 https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes 에서 식별자와 값을 모두 시도했지만 0을 반환합니다. "올바른" chart_id는 어떻게 생겼을까요?

 
.roman. :

내가 이해하는 한 유일한 옵션은 가격에 대한 ObjectGetDouble() 및 날짜에 대한 ObjectGetInteger()뿐입니다.

chart_id = 0인 현재 TF의 가격을 얻으려고 합니다.

- 그래야만 하는 의미. 0 대신 https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes 에서 식별자와 값을 모두 시도했지만 0을 반환합니다. "올바른" chart_id는 어떻게 생겼을까요?

chart_id = 0 이것은 TF가 아니며 현재 차트입니다. 필요한 개체가 있는 차트의 chart_id를 찾아야 합니다. 일시적인 소용이 없어서 하지 않은 것입니다.
 
.roman. :

내가 이해하는 한 유일한 옵션은 가격에 대한 ObjectGetDouble() 및 날짜에 대한 ObjectGetInteger()뿐입니다.

chart_id = 0인 현재 TF의 가격을 얻으려고 합니다.

 double price1 = ObjectGetDouble ( 0 , "Supply" , 3 );


3 이 뭐야?



- 그래야만 하는 의미. 0 대신 https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes 에서 식별자와 값을 모두 시도했지만 0을 반환합니다. "올바른" chart_id는 어떻게 생겼을까요?

차트 ID에 대한 TF 기간은 무엇과 관련이 있습니까?


일반적으로 무엇을 사용해야 하는지 이해하는 데 비현실적인 구멍이 있습니다.


작업을 설명하고 덤불 주위를 어둡게 할 필요가 없습니다.

정확히 무엇이 필요합니까? 객체에서 데이터를 얻습니까?

- ObjectGet 왜 마음에 들지 않았습니까?

 
sergeev :

3 이 뭐야?


사각형 아래쪽 테두리의 가격 값입니다. https://docs.mql4.com/constants/objectconstants/enum_object_property


차트 ID에 대한 TF 기간은 무엇과 관련이 있습니까?

나는 아무 생각이 없다, 그리고. 그래서 무작정 직접 해보고 물어본다. 작동하지 않았습니다.

세르게예프 :
작업을 설명하고 덤불 주위를 어둡게 할 필요가 없습니다. 정확히 무엇이 필요합니까? 객체에서 데이터를 얻습니까? - ObjectGet 왜 마음에 들지 않았습니까?

진지하게 묻는거야? 나는 이미 세 번째 시간 프레임(H1)에 있는 동안 두 개의 다른 시간 프레임(H4 및 D)에서 직사각형 데이터(2개의 가격 좌표 및 직사각형을 구성하는 2개의 시간 좌표)를 가져와야 한다고 3번 썼습니다.

ObjectGet은 다른 시간대에서 아무 것도 얻을 수 없기 때문에 적합하지 않습니다.

칠면조는 모든 시간 프레임에 사각형을 그리고 내가 여기에 코드를 추가하면 다른 시간 프레임으로 전환하지 않고도 다른 시간 프레임의 사각형 좌표를 전송할 수 있습니다. 이미 다른 방식으로 설명하는 방법을 모르겠습니다.

 
.roman. :

사각형 아래쪽 테두리의 가격 값입니다. https://docs.mql4.com/constants/objectconstants/enum_object_property



나는 아무 생각이 없습니다. 그래서 무작정 직접 해보고 물어본다. 작동하지 않았습니다.

진지하게 묻는거야? 나는 이미 세 번째 시간 프레임(H1)에 있는 동안 두 개의 다른 시간 프레임(H4 및 D)에서 직사각형 데이터(2개의 가격 좌표 및 직사각형을 구성하는 2개의 시간 좌표)를 가져와야 한다고 3번 썼습니다.

ObjectGet은 다른 시간대에서 아무 것도 얻을 수 없기 때문에 적합하지 않습니다.

칠면조는 모든 시간 프레임에 사각형을 그리고 내가 여기에 코드를 추가하면 다른 시간 프레임으로 전환하지 않고도 다른 시간 프레임의 사각형 좌표를 전송할 수 있습니다. 이미 다른 방식으로 설명하는 방법을 모르겠습니다.

예, 다른 TF와 다른 차트 또는 차트는 다른 개념이며 따라서 문제 해결에 대한 다른 접근 방식이라는 것을 마침내 이해하게 됩니다.
 
AlexeyVik :
예, 다른 TF와 다른 차트 또는 차트는 다른 개념이며 따라서 문제 해결에 대한 다른 접근 방식이라는 것을 마침내 이해하게 됩니다.

따라서 아이디어가 있는 경우에만 결정을 이해하고 수락합니다. 그래서 구현 방법에 대한 조언을 구합니다.
 
Top2n :

고맙습니다! 나는 당신을 이해했다. OrderSelect에서 오류가 발생하지 않는 한 계속을 제외하고 중지하는 방법이 명확하지 않습니다.

메시지를 늦게 삭제하고 설명과 거의 동일하게 수행했습니다.

때로는 반환 값과 오류 플래그를 결합할 수 있습니다. 의미에 따라 특정 값을 오류의 표시로 간주할 수 있는 경우입니다. 예를 들어 평균 비용이 0입니다.

그런 다음 OrderSelect() 가 오류 플래그를 반환하자마자 함수는 즉시 오류 플래그를 반환합니다.

 #property strict

/******************************************************************************/
double CenaUsrednenija( const int type, const int Magic){
   double nn = 0 , bb = 0 ;

   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
    {
       if (OrderSymbol() == Symbol () && OrderType() == type && OrderMagicNumber() == Magic)
      {
         double op = OrderOpenPrice();
         double llot = OrderLots();

        bb += op * llot;
        nn += llot;
         Print ( "  type = " , type, " Цена открытия = " , op, " Лот = " , llot, " itog = op * llot = " , op * llot, " factb = bb / nn = " , bb / nn);
      }
    } else {
       return 0 ; // Цена == 0 - признак ошибки (OrderSelect() не смогла выбрать ордер)
    }
  }

   return nn != 0 ? NormalizeDouble (bb / nn, _Digits ) : 0 ; // Делить на 0 не следует
}

/******************************************************************************/
void OnStart () {
   Print ( "CenaUsrednenija(OP_BUY, 536525) = " , CenaUsrednenija(OP_BUY, 536525 ));
}

직접 실행하여 다음을 얻었습니다.

 23 : 32 : 03 Script 1 EURUSD,H1: loaded successfully
23 : 32 : 03 1 EURUSD,H1: initialized
23 : 32 : 03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36626 Лот = 0.1 itog = op * llot = 0.136626 factb = bb / nn = 1.36626
23 : 32 : 03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36931 Лот = 0.1 itog = op * llot = 0.136931 factb = bb / nn = 1.367785
23 : 32 : 03 1 EURUSD,H1: CenaUsrednenija(OP_BUY, 536525 ) = 1.36779
23 : 32 : 03 1 EURUSD,H1: uninit reason 0
23 : 32 : 03 Script 1 EURUSD,H1: removed

진실인듯...

예, 이 Print()가 디버깅 중이기 때문에 0으로 가상의 나누기를 피하기 위해 Print()에서 조건식을 사용하지 않았습니다...