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

 

Ccanvas 개체 를 복제할 수 있습니까?


나는 Ccanvas를 사용하여 객체를 생성하는데, 그 과정에서 복제본이 생성되어야 합니다. 때로는 10-20, 때로는 100-200.

일단 개체가 정확하게 그려집니다. 복제할 수 있는 방법이 있나요?

 
Sergey Likho :

Ccanvas 개체를 복제할 수 있습니까?


나는 Ccanvas를 사용하여 객체를 생성하는데, 그 과정에서 복제본이 생성되어야 합니다. 때로는 10-20, 때로는 100-200.

일단 개체가 정확하게 그려집니다. 복제할 수 있는 방법이 있나요?

CCanvas *canv = 새 CCanvas
그러나 이것은 기존의 복제가 아닙니다. 이것은 새로운 것을 생성하고 그것에 대한 포인터입니다.
 
Artyom Trishkin :
CCanvas *canv = 새 CCanvad

그래픽 개체를 의미했습니다.

   CCanvas obj;
   obj.CreateBitmapLabel( 0 , 1 ,name,x,y,x_size,y_size, COLOR_FORMAT_ARGB_NORMALIZE );
   obj.FillRectangle( 0 , 0 ,x_size,y_size, ColorToARGB (Color,Alpha));
   obj.Update( false );


Как сделать 10 копий с измененными координатами?
 
Sergey Likho :

그래픽 개체를 의미했습니다.

나는 보여 주었다. 생성할 객체의 수를 미리 알 수 없는 경우에는 신규를 통해서만 가능합니다.
수량을 알면
obj1, obj2, obj3,..., objN
 
Igor Makanu :

내가 틀릴 수 있지만 귀하의 링크는 작성자의 주제가 될 것입니다. 그러나 전체 주제를 뒤집어야 합니다. Igor는 몇 가지 원시 코드를 즉시 배치한 것 같습니다. 그런 다음 때때로 미세 조정이 필요한 것을 다시 작성했습니다. 틀려요 - 5-6년 전에 이 주제를 읽었습니다. 더 이상 기억이 나지 않습니다.

오해하지 마세요. 최근에 저자의 전체 주제를 완전히 뒤집었습니다. 2~3일 정도 소요되었습니다. 저자의 주제에서 쓰기의 처방에 비추어 볼 때 쓰기의 일부 기능은 더 이상 관련이 없습니다.(또는 제 생각에는 그렇게 보였습니다.) 관련성이 높거나 관련성이 거의 없는 모든 것을 절대적으로 읽어야 합니다. 그리고 아시다시피 그는 참가자 중 한 명이 자신의 기능을 사용하기로 결정하고 오류를 발견하거나 수정하고 단순히 오류가 있다고 말하거나 그냥 지적했을 때 2-3페이지 또는 더 많은 페이지 후에 팝업되는 오류가 있었습니다. 밖으로. 따라서 10페이지가 지나도 같은 기능이 다시 나타나거나 수정되거나 수정될 수 있습니다(시간이 지나고 개선하고 싶었습니다).

따라서 전체 주제의 누군가가 가장 중요하고 관련성이 높은 것만 빼면 고맙다는 말만 할 수 있고 많은 시간을 절약할 수 있습니다.

 
함수에 대한 함수 포인터를 매개변수로 전달하는 방법(함수 포인터를 인수로 사용하는 함수가 작성됨을 의미)은 무엇입니까? 이미 mql4에서 이 작업을 수행했으며 이 작업도 가능하지만 이 예제가 있었던 파일의 복사본을 잃어버렸습니다.
 
Seric29 :
함수에 대한 함수 포인터를 매개변수로 전달하는 방법(함수 포인터를 인수로 사용하는 함수가 작성됨을 의미)은 무엇입니까? 이미 mql4에서 이 작업을 수행했으며 이 작업도 가능하지만 이 예제가 있었던 파일의 복사본을 잃어버렸습니다.

MQL이 한때 함수에 대한 포인터를 지원했습니까? 그렇지 않은 것 같다. 한 가지 해결책은 함수를 클래스로 래핑하고 객체에 대한 포인터를 전달하는 것입니다.

 
Sergey Popov :

안녕하세요!

어드바이저에서 거래 시작 후 처음 2시간 동안 거래를 금지하는 기능을 작성하고 싶습니다.

그러나 iTime(Symbol(),1440, 0)이 매일 양초 의 시작 시간을 올바르게 반환하지 않는다는 사실에 부딪쳤습니다.

보다 구체적으로, 2019년 12월 26일, 시장은 06:00:00에 개장했으며 iTime은 00:00:00을 정의합니다.

정확한 영업시간은 어떻게 계산하나요?

SymbolInfoSessionTrade는 거래 시간을 찾는 데 도움이 될 것입니다. 크리스마스 및 기타 휴일의 변경 사항만 반영하는지 모르겠습니다.

 
Aleksey Mavrin :

MQL이 한때 함수에 대한 포인터를 지원했습니까? 그렇지 않은 것 같다. 한 가지 해결책은 함수를 클래스로 래핑하고 객체에 대한 포인터를 전달하는 것입니다.

지원합니다. 이것은 typedif 지정자가 도움말을 읽으면서 수행되며 스키마만 C++와 다릅니다. 이 코드를 적어둔 포럼을 찾았지만 파일을 저장하지 않고 시스템을 다시 시작했는데 당연히 파일이 삭제되었습니다. 그러나 도움말은 간단한 예를 보여주고, 나는 정확히 내가 묻고 있는 것에 대한 예를 가지고 있었습니다.

 
Aleksey Mavrin :

MQL이 한때 함수에 대한 포인터를 지원했습니까? 그렇지 않은 것 같다. 한 가지 해결책은 함수를 클래스로 래핑하고 객체에 대한 포인터를 전달하는 것입니다.

재현할 코드:

 #property copyright "Copyright 2019, IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property strict
typedef void (*TFuncvoidPTR)( void );
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   TFuncvoidPTR f_ptr[ 3 ];
   f_ptr[ 0 ] = f_1;
   f_ptr[ 1 ] = f_2;
   f_ptr[ 2 ] = f_3;
   for ( int i= 0 ;i< ArraySize (f_ptr);i++)
   {
       printf ( "Вызываю фунцию № %i " ,i);
      f_ptr[i]();
   }

}
//+------------------------------------------------------------------+
void f_1() { Print ( "Это вызов функции : " , __FUNCTION__ );}
void f_2() { Print ( "Это вызов функции : " , __FUNCTION__ );}
void f_3() { Print ( "Это вызов функции : " , __FUNCTION__ );}

2019.12.30 18:30:55.518 스크립트 tst EURUSD,H1: 제거됨

2019.12.30 18:30:55.511 tst EURUSD,H1: 단위 이유 0

2019.12.30 18:30:55.511 tst EURUSD,H1: 이것은 함수 호출 입니다: f_3

2019.12.30 18:30:55.511 tst EURUSD,H1: 함수 #2 호출

2019.12.30 18:30:55.511 tst EURUSD,H1: 이것은 함수 호출입니다: f_2

2019.12.30 18:30:55.511 tst EURUSD,H1: 함수 #1 호출

2019.12.30 18:30:55.511 tst EURUSD,H1: 이것은 함수 호출입니다: f_1

2019.12.30 18:30:55.511 tst EURUSD,H1: 함수 #0 호출

2019.12.30 18:30:55.511 tst EURUSD,H1: 초기화됨

2019.12.30 18:30:55.496 스크립트 tst EURUSD,H1: 성공적으로 로드됨