초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 124

 
Игорь :
안녕 친애하는 사람들!
MT4에서 템플릿을 사용하지 않고 막대를 다시 칠하는 방법을 알려주세요!?
또는 색 구성표를 적용하는 방법!?
차트의 컨텍스트 메뉴 , 속성, 색상 - 사용해 보셨습니까?
 
Ihor Herasko :

혼동하지 않도록 답변을 조금 단순화하겠습니다. 이 기호(&)는 함수 인수가 함수 실행 중에 값을 변경할 수 있고 다른 값으로 함수가 호출된 위치로 돌아갈 수 있음을 나타냅니다. 이 경우 SaveOrder 함수는 g_arrstBuyOrderInfo 및 g_arrstSellOrderInfo 배열의 내용과 g_nBuyOrdersCnt 및 g_nSellOrdersCnt 변수를 변경할 수 있습니다.

고맙습니다. 조금 더 명확해집니다. 포럼을 참조하지 않고 이 모든 것을 어떻게 알 수 있는지 명확하지 않습니다. 나는 교과서에서 그런 설명을 찾지 못했다.

추가 조언을 부탁드립니다:

1) 컴파일러는 'g_nBuyOrdersCnt' - 유형 없는 선언을 작성합니다. 'g_nSellOrdersCnt' - 유형이 없는 선언 . 컴파일러가 맹세하지 않도록 g_nBuyOrdersCnt 및 g_nSellOrdersCnt 를 전역 수준에서 선언해야 한다는 것을 올바르게 이해하고 있습니까?

2) 컴파일러: ' for' - 표현식은 전역 범위에서 허용되지 않습니다 . 여기에는 명확하지 않습니다.

3) void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) 함수 에서 컴파일러는 다음과 같이 작성합니다. 'arrstOrderInfo' 선언은 전역 선언을 숨깁니다. 'arrstOrderInfo'의 이전 선언을 참조하십시오 . 또한 명확하지 않습니다.

4) 'nOrderCnt' - 선언되지 않은 식별자 . 그리고 실제로 왜 아무데도 선언되지 않습니까?

그리고 마지막으로: .n.f 가 어디에서 왔는지, 그리고 그것들이 무엇인지 아직도 이해하지 못합니다.




 
Игорь :

안녕 친애하는 사람들!

MT4에서 템플릿을 사용 하지 않고 막대를 다시 칠하는 방법을 알려주세요!?

또는 색 구성표를 적용하는 방법!?

프로그래밍 방식이라면 ChartSetInteger() 및 ChartGetInteger() 함수를 참조하십시오.

 
novichok2018 :

고맙습니다. 조금 더 명확해집니다. 포럼을 참조하지 않고 이 모든 것을 어떻게 알 수 있는지 명확하지 않습니다. 나는 교과서에서 그런 설명을 찾지 못했다.

추가 조언을 부탁드립니다:

1) 컴파일러는 'g_nBuyOrdersCnt' - 유형 없는 선언을 작성합니다. 'g_nSellOrdersCnt' - 유형이 없는 선언 . 컴파일러가 맹세하지 않도록 g_nBuyOrdersCnt 및 g_nSellOrdersCnt 를 전역 수준에서 선언해야 한다는 것을 올바르게 이해하고 있습니까?

2) 컴파일러: ' for' - 표현식은 전역 범위에서 허용되지 않습니다 . 여기에는 명확하지 않습니다.

3) void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) 함수 에서 컴파일러는 다음과 같이 작성합니다. 'arrstOrderInfo' 선언은 전역 선언을 숨깁니다. 'arrstOrderInfo'의 이전 선언을 참조하십시오 . 또한 명확하지 않습니다.

4) 'nOrderCnt' - 선언되지 않은 식별자 . 그리고 정말로, 왜 아무데도 선언되지 않습니까?

코드 전체를 보면 다음과 같습니다.

 #property strict

input        int i_nMagicNumber = 12876 ;

#define MAX_ORDERS_CNT   int ( 500 )
struct OrderInfo
{
   int       nTicket;
   int       nType;
   double    fOpenPrice;
   double    fSL;
   double    fTP;
   datetime dtOpenTime;
};

int          g_nBuyOrdersCnt, 
            g_nSellOrdersCnt;

OrderInfo   g_arrstBuyOrderInfo[MAX_ORDERS_CNT], 
            g_arrstSellOrderInfo[MAX_ORDERS_CNT];

//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert initialization function                                                                                                                                                                    |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit ()
{
   return INIT_SUCCEEDED ;
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert deinitialization function                                                                                                                                                                  |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert tick function                                                                                                                                                                              |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void OnTick ()
{
    FindOrders();
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Fills the orders arrays                                                                                                                                                                           |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void FindOrders()
{
   g_nBuyOrdersCnt = 0 ;
   g_nSellOrdersCnt = 0 ;
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; --i)
   {
       if (! OrderSelect (i, SELECT_BY_POS ))
         continue ;
   
       if ( OrderSymbol () != Symbol ())   // Если нужны ордера только по текущему символу, к графику которого прикреплен советник
         continue ;
   
       if ( OrderMagicNumber () != i_nMagicNumber)   // Если имеется входной параметр советника i_nMagicNumber, в котором указан ID ордеров советника
         continue ;
   
       if ( OrderType () == OP_BUY )
         SaveOrderInfo(g_arrstBuyOrderInfo, g_nBuyOrdersCnt);
       if ( OrderType () == OP_SELL )
         SaveOrderInfo(g_arrstSellOrderInfo, g_nSellOrdersCnt);
   }
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Saves one selected order in the specified array                                                                                                                                                   |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt)
{
   if (nOrdersCnt >= MAX_ORDERS_CNT)
       return ;

   arrstOrderInfo[nOrdersCnt].nTicket = OrderTicket ();
   arrstOrderInfo[nOrdersCnt].nType = OrderType ();
   arrstOrderInfo[nOrdersCnt].fOpenPrice = OrderOpenPrice ();
   arrstOrderInfo[nOrdersCnt].fSL = OrderStopLoss ();
   arrstOrderInfo[nOrdersCnt].fTP = OrderTakeProfit ();

   ++nOrdersCnt;
}
 
novichok2018 :

그리고 마지막으로: .n.f 가 어디에서 왔는지, 그리고 그것들이 무엇인지 아직도 이해하지 못합니다.

점 연산자는 구조체나 클래스의 멤버에 대한 액세스를 나타냅니다. 이 경우 구조.

리터럴 n 및 f는 변수에 저장된 데이터 유형을 나타내는 방법입니다. 실제로 수많은 변수로 인해 각각의 유형을 기억하는 것은 불가능합니다. 그리고 변수 이름에 유형 표시가 포함되어 있으면 암기의 필요성이 저절로 사라집니다. n - 정수의 부호(숫자에서), f - 실수(float에서 - 부동 소수점 숫자). 변수 이름을 쓰는 이 방법을 헝가리 표기법 이라고 합니다.

 
Ihor Herasko :

점 연산자는 구조체나 클래스의 멤버에 대한 액세스를 나타냅니다. 이 경우 구조.

리터럴 n 및 f는 변수에 저장된 데이터 유형을 나타내는 방법입니다. 실제로 수많은 변수로 인해 각각의 유형을 기억하는 것은 불가능합니다. 그리고 변수 이름에 유형 표시가 포함되어 있으면 암기의 필요성이 저절로 사라집니다. n - 정수의 부호(숫자에서), f - 실수(float에서 - 부동 소수점 숫자). 변수 이름을 쓰는 이 방법을 헝가리 표기법 이라고 합니다.

와~같다!! g_g_n 은 일종의 약어가 아니라 전역 및 전역 정수 변수임을 나타내는 접두어입니다!! 휴... 그런데 왜 이런 대시가 변수 표기법인지 이해가 안 가네요... 글쎄요, 그런 미묘한 부분을 이해하지 못하는 초보자가 어떻게 배열, 구조 등을 사용하여 코드를 작성할 수 있습니까? 나는 내 간단한 전략이 야생에 뛰어 들지 않고 간단한 언어로 작성 될 수 있다고 생각했습니다.

상담과 병행하여 공부할 수 있는 자세한(확장된) MK4 자습서에 대한 링크를 제공할 수 있습니까?

그리고 비교를 위해 헝가리 표기법을 사용하지 않고 위의 코드를 작성할 수 있습니까? MT4 플랫폼이 명확하게 이해하고 있다고 확신합니까?


그리고 코드에 대한 질문: 왜 여기서 계속 ;?

 for ( int i = OrdersTotal () - 1 ; i >= 0 ; --i)
   {
       if (! OrderSelect (i, SELECT_BY_POS ))
         continue ;
이론적으로 첫 번째 반복에서 순서가 선택되지 않으면 후속 반복에서 선택되지 않고 주기가 무한정 계속됩니까? 주문 수는 변하지 않기 때문입니다. 오류 메시지와 함께 중단 하는 것이 좋지 않을까요?
 
STARIJ :
차트의 컨텍스트 메뉴, 속성, 색상 - 사용해 보셨습니까?

감사합니다. 이미 소프트웨어를 찾아야 합니다!!!

 
Ihor Herasko :

프로그래밍 방식이라면 ChartSetInteger() 및 ChartGetInteger() 함수를 참조하십시오.

감사합니다 도움으로 찾았습니다!

 
novichok2018 :

와~같다!! g_g_n 은 일종의 약어가 아니라 전역 및 전역 정수 변수임을 나타내는 접두어입니다!! 휴... 그런데 왜 이런 대시가 변수 표기법인지 이해가 안 가네요... 글쎄요, 그런 미묘한 부분을 이해하지 못하는 초보자가 어떻게 배열, 구조 등을 사용하여 코드를 작성할 수 있습니까? 내 간단한 전략은 야생에 뛰어들지 않고 간단한 언어로 작성될 수 있다고 생각했습니다.

무언가를 하려면 미묘함에 빠져들어야 합니다. 다른 방법은 없습니다.

상담과 병행하여 공부할 수 있는 자세한(확장된) MK4 자습서에 대한 링크를 제공할 수 있습니까?

MQL4 - Sergei Kovalev's Tutorial 에 대한 단 하나의 튜토리얼만 알고 있습니다.

그리고 비교를 위해 헝가리 표기법을 사용하지 않고 위의 코드를 작성할 수 있습니까? MT4 플랫폼이 명확하게 이해하고 있다고 확신합니까?

바로 코드의 올바른 디자인에 익숙해지십시오. )) 헝가리 표기법은 상당히 숙련된 프로그래머에 의해 발명되었습니다.

그리고 코드에 대한 질문: 왜 계속 여기에 ;가 있습니까?

이론적으로 첫 번째 반복에서 순서가 선택되지 않으면 후속 반복에서 선택되지 않고 주기가 무한정 계속됩니까? 주문 수는 변경되지 않기 때문입니다. 오류 메시지와 함께 중단 하는 것이 낫지 않을까요?

하나의 주문을 선택하지 못했다고 해서 다음 주문을 선택할 수 없다는 의미는 아닙니다. 따라서 주기를 계속하는 것이 좋습니다.

Учебник по MQL4
Учебник по MQL4
  • book.mql4.com
В настоящее время персональный компьютер стал незаменимым помощником в жизни каждого человека. Благодаря развитию Интернета и увеличению мощности современных компьютеров открылись новые возможности во многих областях деятельности. Ещё десять лет назад торговля на финансовых рынках была доступна только банкам и узкому кругу специалистов. Сегодня...
 
Ihor Herasko :

하나의 주문을 선택하지 못했다고 해서 다음 주문을 선택할 수 없다는 의미는 아닙니다. 따라서 주기를 계속하는 것이 좋습니다.

그리고 오류 메시지를 표시할 필요가 없습니까? 주문을 찾을 수 없는 이유와 주문을 피하는 방법을 아는 것도 나쁘지 않을 것입니다.