고문 프로젝트

 
안녕하세요.
코드의 양이 증가함에 따라 때때로 어려움과 혼란이 발생합니다.
엄청난 수의 코드 라인이 있는 EA 코드를 봤습니다. EA가 얼마나 복잡하게 설계 되었는지 궁금합니다. 아마도 그러한 복잡한 알고리즘으로 작업할 수 있는 도구나 기술이 있을까요?
 
Gregory Kovalenko :
안녕하세요.
코드의 양이 증가함에 따라 때때로 어려움과 혼란이 발생합니다.
엄청난 수의 코드 라인이 있는 EA 코드를 봤습니다. EA가 얼마나 복잡한 디자인으로 설계되었는지 궁금합니다. 아마도 그러한 복잡한 알고리즘으로 작업할 수 있는 도구나 기술이 있을까요?

그리고 이건 얼마에요? ... 이 정도면 파일로 나눌 수 없을 정도인가요?

 
Gregory Kovalenko :
안녕하세요.
코드의 양이 증가함에 따라 때때로 어려움과 혼란이 발생합니다.
엄청난 수의 코드 라인이 있는 EA 코드를 봤습니다. EA가 얼마나 복잡한 디자인으로 설계되었는지 궁금합니다. 아마도 그러한 복잡한 알고리즘으로 작업할 수 있는 도구나 기술이 있을까요?
예, 모든 것이 매우 간단합니다. 개별 기능을 정확하게 문서화하고 별도의 파일로 분리해야 합니다. 기본 파일이 즉시 축소되고 더 읽기 쉬워집니다.
 

두 가지 주요 원칙:

1. 코드를 기능으로 나눕니다. 하나의 기능은 논리적으로 어느 정도 완벽해야 하며 한 눈에 그것을 덮기 위해 하나의 화면을 넘지 않아야 합니다.

2. 전역 변수의 수를 줄입니다. 전역 변수 중 프로그램 동작 중에 변하지 않는 매개변수만 사용하는 것이 바람직하다.

...더 나아가:

3. 객체 지향 프로그래밍.

4. 코드를 여러 파일에 배치합니다(디버깅은 여기에서 조금 더 복잡해 지지만 의미가 있습니다).

 
STARIJ :
예, 모든 것이 매우 간단합니다. 개별 기능을 정확하게 문서화하고 별도의 파일로 분리해야 합니다. 기본 파일이 즉시 축소되고 더 읽기 쉬워집니다.

나는 항상 하나의 mq4/mq5 파일과 클래스가 있는 많은 mqh 파일을 가지고 있으며 각 클래스에는 별도의 파일이 있습니다. 일반적으로 산업 개발에서 이것이 바로 그들이 하는 일입니다. 모든 것이 산재되어 있는 킬로미터 파일이 없습니다.

그리고 때때로 전체 어드바이저가 OnTick에 들어갈 때 걸작을 발견하지만 이 못생긴 시트에는 주문을 20번 여는 동일한 코드 조각이 있습니다. 즉시 토사백을 받고 싶다))

 
Gregory Kovalenko :
안녕하세요.
코드의 양이 증가함에 따라 때때로 어려움과 혼란이 발생합니다.
엄청난 수의 코드 라인이 있는 EA 코드를 봤습니다. EA가 얼마나 복잡한 디자인으로 설계되었는지 궁금합니다. 아마도 그러한 복잡한 알고리즘으로 작업할 수 있는 도구나 기술이 있을까요?

항상 일정하고 이 스타일로 절대 변경되지 않는 함수를 작성하지 마십시오.

 void CloseOrders( int cmd)
  {
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()== OP_BUY && cmd== OP_BUY )
              {
               if (! OrderClose ( OrderTicket (), OrderLots (), Bid ,Slippage,Blue))
                 {
                   Print ( "Order BUY not close! Error = " , GetLastError ());
                 }
              }
             if ( OrderType ()== OP_SELL && cmd== OP_SELL )
              {
               if (! OrderClose ( OrderTicket (), OrderLots (), Ask ,Slippage,Red))
                 {
                   Print ( "Order SELL not close! Error = " , GetLastError ());
                 }
              }
           }
        }
     }
  }

간결하게 쓰세요. 어쨌든 아무도 쳐다보지도 않고 반만 줄이면 됩니다.

 void CloseOrders( int cmd) {
 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) {
   if ( OrderSelect (i, SELECT_BY_POS )) {
   if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic) {
     if ( OrderType ()== OP_BUY && cmd== OP_BUY ) {
     if (! OrderClose ( OrderTicket (), OrderLots (), Bid ,Slippage,Blue)) Print ( "Order BUY not close! Error = " , GetLastError ());
    }
     if ( OrderType ()== OP_SELL && cmd== OP_SELL ) {
       if (! OrderClose ( OrderTicket (), OrderLots (), Ask ,Slippage,Red)) Print ( "Order SELL not close! Error = " , GetLastError ());
    }
}}}}


코드에 대해 지속적으로 주석을 달고, 이 코드 조각이 무엇을 담당하는지, 어렵지 않으며, 마무리할 때 항상 코드가 무엇인지 알게 될 것이고, 공부하는 시간을 줄일 수 있습니다.

 
Vitaly Muzichenko :

항상 일정하고 이 스타일로 절대 변경되지 않는 함수를 작성하지 마십시오.

간결하게 쓰세요. 어쨌든 아무도 쳐다보지도 않고 줄도 절반만 씁니다.

코드에 대해 지속적으로 주석을 달고, 이 코드 조각이 무엇을 담당하는지, 어렵지 않으며, 마무리할 때 항상 코드가 무엇인지 알게 될 것이고, 공부하는 시간을 줄일 수 있습니다.

주석은 프로그램 텍스트의 절반을 차지해야 합니다.

 
Vitaly Muzichenko :

항상 일정하고 이 스타일로 절대 변경되지 않는 함수를 작성하지 마십시오.

간결하게 쓰세요. 어쨌든 아무도 쳐다보지도 않고 줄도 절반만 씁니다.

코드에 대해 지속적으로 주석을 달고, 이 코드 조각이 무엇을 담당하는지, 어렵지 않으며, 마무리할 때 항상 코드가 무엇인지 알게 될 것이고, 공부하는 시간을 줄일 수 있습니다.

괄호를 재배열해도 헛소리가 줄어들지는 않습니다. 조언을 하기 전에 - 당신의 레벨을 최소한 평균으로 올리십시오.

 
STARIJ :

주석은 프로그램 텍스트의 절반을 차지해야 합니다.

아니요, 그럼 바로 코드의 90%가 주석입니다. 동시에 더 많은 주석을 달 수 있도록 의미 없고 읽기 어려운 코드가 최대한 많이 필요합니다!
 
Vasiliy Sokolov :
아니요, 그럼 바로 코드의 90%가 주석입니다. 동시에 더 많은 주석을 달 수 있도록 의미 없고 읽기 어려운 코드가 최대한 많이 필요합니다!

당신의 아이디어도 주목받을 가치가 있습니다. 토론을 위해 불러오세요

 

나는 오래전부터 묻고 싶었다. MKL5에서 포함된 파일, 클래스에서 지표 데이터를 얻는다면 최적화가 더 빨라질까요?

즉, EA 자체의 코드에서는 표시기 핸들이 호출되지 않습니다.