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

 
Roman :

H1 아래의 분 타임프레임은 올바른 값을 반환하기 때문입니다.
도움말에 설명된 대로 그들은 지속적인 헛소리가 아닌 timeframe 의 값을 반환합니다.

무슨 헛소리?

눈을 닦으십시오. 그러나 ENUM_TIMEFRAMES의 내부 표현을 보여주었습니다.

16번 비트 설정은 주간 및 월간 기간을 정의합니다.

세트 비트 번호 15는 시간 단위를 정의하고 D1 = 100000000011000 --> 11000 --> 24 시간 프레임을 정의합니다. 즉, 개발자는 D1을 24시간으로 비교했으며 나머지 시간 프레임은 십진법으로의 변환에 해당합니다.

분 시간 프레임의 경우 시간 단위와 유사하지만 상위 비트는 재설정됩니다.


또 다른 질문은 ENUM_TIMEFRAMES를 반환하는 함수가 TF 시간을 분 단위로 반환하도록 결정했다는 것입니다. 그렇지 않습니다. 이 함수 는 ENUM_TIMEFRAMES 열거형을 반환합니다. 더도 말고 덜도 말고 ENUM_TIMEFRAMES만

https://www.mql5.com/ru/docs/basis/types/integer/enumeration 도움말의 예를 참조하십시오.

열거형은 열거형의 멤버에 상수 값을 할당할 수도 있습니다.

요구 사항에 따라 자신의 목록을 만들 수 있습니다.

 

매우 감사합니다! 도움이 된 것은 wchar_ 입니다! 나는 그것에 대해 읽었습니다. char와 달리 문자당 2바이트를 저장합니다.


 extern "C" __declspec(dllexport) wchar_t* __stdcall ToString(wchar_t* str)

{

        str = L " - 889 - dsa - просто!" ;

         return L "--- Привет! ---" ;

}


사실, 함수 매개 변수 "str"은 여전히 할당 된 값을 반환하지 않습니다. 왜 그런지 궁금합니다. ..

 

안녕하세요, 문제를 해결하는 방법을 알려주세요. 차트에 많은 수준(선)을 구축하는 지표(하드웨어에 연결됨)를 기반으로 하는 Expert Advisor를 작성하고 싶습니다. 줄 수는 500개에 도달할 수 있습니다.

내가 구현하고 싶은 것은 가격이 차트의 선을 넘을 때 주문 또는 기타 이벤트(예: 경고 또는 메시지)를 여는 것입니다. 그러나 문제는 표시기가 값을 반환하지 않고 수평선 (이름이 있는 개체)만 그립니다. 차트에는 다른 것이 없습니다.

"_price"변수를 통해 가격 수준을 검색하는 iCustom 기능을 통해 솔루션을 찾으려고했지만 라인을 터치하면 EA가 거래를 열지 않습니다. 내가 뭘 잘못했는지 이해가 안 돼요.

 void OnTick ()
  {
  
ENUM_OBJECT typeObj = OBJ_HLINE ;
string    ArrLines[];
  
   double 
  Price;
  Price=Bid;
  
//ВАРИАНТ 1 (не получился). Я хотел, чтобы ордер открывался при пересечении любой из линий на графике   
  
//вызовем индикатор: (пара, таймфрейм, индикатор...)
iCustom ( Symbol (), 0 , "ITS-Level Gun" , 0 , 0 ); 

int i, k = ObjectsTotal ();

ArrayResize (ArrLines, 0 );

//в цикле перебираем все объекты на графике
for (i=k- 1 ; i>= 0 ; i--) {
  
   //узнаем имя объекта на графике
   string _name = ObjectName (i);

{

     //узнаем координату цены линии
     double _price = NormalizeDouble ( ObjectGetDouble ( 0 , _name, OBJPROP_PRICE ), Digits );
  } 
}

if (Price==_price)
{ OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 3 ,Bid- 15 * Point ,Bid+ 15 * Point );}

     // И ВСЁ, дальше не знаю, что делать


     
    } 
 
  }

옵션 2. 내가 설정에서 지정한 라인에서 주문이 열립니다. - 어드바이저 매개변수에서 지정한 수준에서 작동하고 거래를 엽니다.


 extern string h= "@Line_week_open-0" ; //ИЗМЕНЕНИЕ ННАЗВАНИЯ ЛИНИИ В СВОЙСТВАХ СОВЕТНИКА.ВАРИАНТ 2.

if ( ObjectFind (h)>- 1 )

    {

     double prise = ObjectGet(h, OBJPROP_PRICE1);

     if (Price==prise)

      { OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 3 ,Bid- 15 * Point ,Bid+ 15 * Point );}       

    } 
파일:
we3s6_kgeqx.jpg  151 kb
 
Fib0 RU :

안녕하세요, 문제를 해결하는 방법을 알려주세요. 차트에 많은 수준(선)을 구축하는 지표(하드웨어에 연결됨)를 기반으로 하는 Expert Advisor를 작성하고 싶습니다. 줄 수는 500개에 도달할 수 있습니다.

내가 구현하고 싶은 것은 가격이 차트의 선을 넘을 때 주문 또는 기타 이벤트(예: 경고 또는 메시지)를 여는 것입니다. 그러나 문제는 표시기가 값을 반환하지 않고 수평선 (이름이 있는 개체)만 그립니다. 차트에는 다른 것이 없습니다.

"_price"변수를 통해 가격 수준을 검색하는 iCustom 기능을 통해 솔루션을 찾으려고했지만 라인을 터치하면 EA가 거래를 열지 않습니다. 내가 뭘 잘못했는지 이해가 안 돼요.

옵션 2. 내가 설정에서 지정한 라인에서 주문이 열립니다. - 어드바이저 매개변수에서 지정한 수준에서 작동하고 거래를 엽니다.



 for ( int i = ObjectsTotal () - 1 ; i >= 0 ; i--) {

         // все что не горизонтальные линии - игнорируем

         if (ObjectType( ObjectName (i)) != OBJ_HLINE ) continue ; 

         double PriceLine = NormalizeDouble (ObjectGet( ObjectName (i), OBJPROP_PRICE1), Digits ());
	
	// измените условие Bid == PriceLine
        
	if (Bid == PriceLine) {

                 // ..... тут что-то происходит ... 

        }
}


그러나 어떤 이유로 Bid가 라인을 뛰어 넘고 라인 의 가격과 같지 않다면 어떻게 될까요? - 뭔가 조치 ... 그러나이 경우 "허용되는"교차점 을 제공하는 것을 잊지 마십시오. 시장이 큰 갭으로 열리거나 큰 가격 상승이 발생하면 순식간에 많은 라인에서 열리며 원하는 곳에서 열리지 않을 수 있습니다. 교차점이 허용되는 값보다 크도록 하십시오. 메시지만 표시됩니다. ..

 
Vadim Lin :



그러나 어떤 이유로 Bid가 라인을 뛰어 넘고 라인 의 가격과 같지 않다면 어떻게 될까요? - 뭔가 조치 ... 그러나이 경우 "허용되는"교차점 을 제공하는 것을 잊지 마십시오. 시장이 큰 갭으로 열리거나 큰 가격 상승이 발생하면 순식간에 많은 라인에서 열리며 원하는 곳에서 열리지 않을 수 있습니다. 교차점이 허용되는 값보다 크도록 하십시오. 메시지만 표시됩니다. ..

문제 코드.

 
Igor Makanu :

무슨 헛소리?

눈을 닦으십시오. 그러나 ENUM_TIMEFRAMES의 내부 표현을 보여주었습니다.

16번 비트 설정은 주간 및 월간 기간을 정의합니다.

세트 비트 번호 15는 시간 단위를 정의하고 D1 = 100000000011000 --> 11000 --> 24 시간 프레임을 정의합니다. 즉, 개발자는 D1을 24시간으로 비교했으며 나머지 시간 프레임은 십진법으로의 변환에 해당합니다.

분 시간 프레임의 경우 시간 단위와 유사하지만 상위 비트는 재설정됩니다.


또 다른 질문은 ENUM_TIMEFRAMES를 반환하는 함수가 TF 시간을 분 단위로 반환하도록 결정했다는 것입니다. 그렇지 않습니다. 이 함수 는 ENUM_TIMEFRAMES 열거형을 반환합니다. 더도 말고 덜도 말고 ENUM_TIMEFRAMES만

https://www.mql5.com/ru/docs/basis/types/integer/enumeration 도움말의 예를 참조하십시오.

열거형은 열거형의 멤버에 상수 값을 할당할 수도 있습니다.

요구 사항에 따라 자신의 목록을 만들 수 있습니다.

Igor, 예, 상수 값에 대해 오랫동안 명확했습니다.
이것이 우리가 말하는 것, 반환 값으로 15비트와 16비트의 의미입니다. 브래드와 모두.
어떤 이유로 M30 이전 에는 ENUM 상수TIMEFRAME VALUES !!!!
그리고 그것은 이미 일부 비트의 값에 해당합니다 . 글쎄, 논리 녀석은 도대체 어디에?
따라서 이것은 큰 실수이며 의도적으로 이런 식으로 수행되면 사보타주))
_Period 변수에는 이미 이러한 모든 기간 값 이 포함되어 있으므로 ENUM 열거형에서 더 이상 변환할 필요가 없습니다.
따라서 이러한 상수 값은 도움말에 명시된 기간 값 과 일치해야 합니다. 비탐이 아닙니다!

 
Roman :

자가격리 시간입니다. 검색은 이것에 대해 말한 모든 것을 수집하고 건강을 위해 읽으십시오. 왜 다른 사람들이 다시 작성된 모든 것을 반복해야 한다고 결정했습니까?

 
Alexey Viktorov :

자가격리 시간입니다. 검색은 이것에 대해 말한 모든 것을 수집하고 건강을 위해 읽으십시오. 왜 다른 사람들이 다시 작성된 모든 것을 반복해야 한다고 결정했습니까?

왜 나쁜 결정을 참는가? 개발자가 생각한 것이 아니라 상수 값에 대한 논리적인 설명을 전달했습니다.

 
Roman :

왜 나쁜 결정을 참는가? 개발자가 생각한 것이 아니라 상수 값에 대한 논리적인 설명을 전달했습니다.

분명히 당신에게는 당신의 의견과 잘못된 의견의 두 가지 의견 만 있습니다. 이것에 대해 이미 쓰여진 모든 것을 수집하고 아마도 당신에게 적합한 설명을 찾을 수 있을 것입니다.
 
Alexey Viktorov :
분명히 당신에게는 당신의 의견과 잘못된 의견의 두 가지 의견 만 있습니다. 이것에 대해 이미 쓰여진 모든 것을 수집하고 아마도 당신에게 적합한 설명을 찾을 수 있을 것입니다.

따라서 수학적 계산에서 H1 이상의 기간에 _Period 변수가 반환 하는 값을 사용하십시오 .
그리고 누가 실수했는지 즉시 이해하게 될 것입니다.