OOP, mql5의 템플릿 및 매크로, 미묘함 및 사용 기술 - 페이지 15

 
Vict :

내가 지나치게 복잡한 것)).

글쎄, 그가 첫 번째, 아마도 가장 최적의 것을 사용하게하십시오.

TEST를 여러 번 작성하는 것은 결국 문제가 되지 않습니다.

여전히 이것을 좋아할 수 있지만 역순으로 만 모든 것이 호출됩니다.

 #define LINE(dId) EA.AddDealsSettings(InDealType_ ##dId,InVolType_##dId,InVolume_##dId,InPrice_##dId,InVolCoeff_##dId,InClosePips_##dId,Mirror)

#define BLOCK1 LINE( 01 )
#define BLOCK2 LINE( 02 ); BLOCK1
#define BLOCK3 LINE( 03 ); BLOCK2
#define BLOCK4 LINE( 04 ); BLOCK3
#define BLOCK5 LINE( 05 ); BLOCK4
#define BLOCK6 LINE( 06 ); BLOCK5
#define BLOCK7 LINE( 07 ); BLOCK6
#define BLOCK8 LINE( 08 ); BLOCK7
#define BLOCK9 LINE( 09 ); BLOCK8
#define BLOCK10 LINE( 10 ); BLOCK9

#define SEND(dCount) do {BLOCK ##dCount;} while ( false )

void OnStart ()
  {
   SEND( 10 );
  }
 

흠, 클베를 덜 노크하기 위해 작업을 단순화하려고 생각했지만 이제 모든 예제를 처리해야합니다.

@Vladimir Simakov 멋지다!

@빅트 감사합니다!

추신: 솔직히 말해서 매크로의 첫 번째 예만 이해하고 나머지는 피우지 않았습니다(((

 
Igor Makanu :

흠, 클베를 덜 노크하기 위해 작업을 단순화하려고 생각했지만 이제 모든 예제를 처리해야합니다.

@Vladimir Simakov 멋지다!

@빅트 감사합니다!

추신: 솔직히 말해서 매크로의 첫 번째 예만 이해하고 나머지는 피우지 않았습니다(((

전처리기의 마법이라고 합니다)))

 
Vladimir Simakov :

전처리기의 마법이라고 합니다)))

나는 연습이 없었기 때문에 훈련이 느리다는 것을 압니다(((

이 코드를 매크로로 래핑할 수 있습니까?


 //--- input parameters
input ENUM_DEALTYPE        InDealType_01=BUY;             //1.------------------------------ Order ------------------------------
input int                   InPrice_01        =   000 ;     //Start price
input double                InVolume_01       =   0.01 ;     //Start Volume
input ENUM_VOLUMERATIO     InVolType_01=MultiplyAlways;   //Next operation with volume coefficient
input double                InVolCoeff_01     =   1.5 ;     //Volume coefficient
input ENUM_DISTANCERATIO   InDistType_01     =  NotMove; //Next price type
input double                InDistCoeff_01    =   1.23 ;     //Coefficient next open price
input int                   InDistShift_01    =   150 ;     //Shift next open price
input int                   InClosePips_01    =   200 ;     //TakeProfit>0 or StopLoss<0

input ENUM_DEALTYPE        InDealType_02=BUY;             //2.------------------------------ Order ------------------------------
input int                   InPrice_02        =   000 ;     //Start price
input double                InVolume_02       =   0.01 ;     //Start Volume
input ENUM_VOLUMERATIO     InVolType_02=MultiplyAlways;   //Next operation with volume coefficient
input double                InVolCoeff_02     =   1.5 ;     //Volume coefficient
input ENUM_DISTANCERATIO   InDistType_02     =  NotMove; //Next price type
input double                InDistCoeff_02    =   1.23 ;     //Coefficient next open price
input int                   InDistShift_02    =   150 ;     //Shift next open price
input int                   InClosePips_02    =   200 ;     //TakeProfit>0 or StopLoss<0

그래서 10번?

아니면, 아직 8번 남았습니다... 하지만 언제 옵티마이저에서 실행할지 모르겠고, 매개변수를 추가하거나 제거할 수 있고, 아직 코드를 추가하지 않았습니다(주석은 동일, 그러나 한 자리는 다릅니다 - 첫 번째 줄)

 
Igor Makanu :

나는 연습이 없었기 때문에 훈련이 느리다는 것을 압니다(((

이 코드를 매크로로 래핑할 수 있습니까?


그래서 10번? 주석은 같지만 한 자리 숫자가 다릅니다.

예, 문제는 없지만 댓글은 없습니다. 예, /* ... */ 로 대체하면 작동하지 않습니다. 이 경우 컴파일러는 설정 테이블의 외부 변수에 대한 텍스트 설명 컨텍스트에서 인식을 중단합니다. 확인했습니다.

 
Vladimir Simakov :

예, 문제는 없지만 댓글은 없습니다. 예, /* ... */ 로 대체하면 작동하지 않습니다. 이 경우 컴파일러는 설정 테이블의 외부 변수에 대한 텍스트 설명 컨텍스트에서 인식을 중단합니다. 확인했습니다.

그런 다음 매복, 주석은 손으로 편집해야합니다. .... 일반적으로 테스트를 위해 이동합니다. 하나의 무화과가 더 빠르며 코드를 선택합니다. 편집하는 데 시간이 많이 걸리고 얻을 수 없습니다. 테스터 ...

괜찮으시다면 댓글 없이 예시를 만드세요



추신: 아이디어가 엉터리일 수도 있지만 아침에 머리 속에서 시간을 비틀고 있습니다. 보고 싶은 것 .... 주문 그리드가 최적화 도구에 있지만 궁극적인 목표는 다릅니다(나는 일부 고정 그리드 단계 대신 다항식을 고정하여 옵티마이저가 계수를 유도한 다음 너무 많을 수 있지만 Taylor의 행은 헌팅처럼 보입니다.) ), 하지만 먼저 옵티마이저가 표시할 그리드를 확인해야 합니다. 일반적으로 테스트 폴리곤 을 준비 중입니다)))

 
Igor Makanu :

나는 연습이 없었기 때문에 훈련이 느리다는 것을 압니다(((

이 코드를 매크로로 래핑할 수 있습니까?


그래서 10번?

아니면, 아직 8번 남았습니다... 하지만 언제 옵티마이저에서 실행할지 모르겠고, 매개변수를 추가하거나 제거할 수 있고, 아직 코드를 추가하지 않았습니다(주석은 동일, 그러나 한 자리는 다릅니다 - 첫 번째 줄)

이 코드를 생성하는 작은 함수를 작성할 수 있습니다(파일이나 클립보드에 저장).

 
Andrey Khatimlianskii :

이 코드를 생성하는 작은 함수를 작성할 수 있습니다(파일이나 클립보드에 저장).

글쎄, 그는 와서 전체 시적 분위기를 파괴했습니다. 산문에서는 다음과 같이 어렵지 않습니다.

 #property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#include <Files\FileTxt.mqh>
CFileTxt FOut;

#define   COUNT 10


const string code0[]=
  {
   "input ENUM_DEALTYPE        InDealType_" , "=BUY;            //" , ".------------------------------ Order ------------------------------"
  };

const string code1[]=
  {
   "input int                  InPrice_" , "        =  000;     //Start price" ,
   "input double               InVolume_" , "       =  0.01;    //Start Volume" ,
   "input ENUM_VOLUMERATIO     InVolType_" , "=MultiplyAlways;  //Next operation with volume coefficient" ,
   "input double               InVolCoeff_" , "     =  1.5;     //Volume coefficient" ,
   "input ENUM_DISTANCERATIO   InDistType_" , "     =  NotMove; //Next price type" ,
   "input double               InDistCoeff_" , "    =  1.23;    //Coefficient next open price" ,
   "input int                  InDistShift_" , "    =  150;     //Shift next open price" ,
   "input int                  InClosePips_" , "    =  200;     //TakeProfit>0 or StopLoss<0"
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {

   if (FOut.Open( __FILE__ + ".txt" , FILE_WRITE | FILE_COMMON )!= INVALID_HANDLE )
     {
       for ( int i= 0 ;i<COUNT;i++)
        {
         string N= IntegerToString (i, 2 , '0' );
         FOut.WriteString(code0[ 0 ]+N+code0[ 1 ]+ IntegerToString (i)+code0[ 2 ]+ "\n" );
         for ( int j= 0 ;j< 8 ;j++)
           {
            FOut.WriteString(code1[j* 2 ]+N+code1[j* 2 + 1 ]+ "\n" );
           }
        }
       printf ( "Write to file %s" ,FOut.FileName());
     }
   else printf ( "Open file error № %i" , GetLastError ());
  }
//+------------------------------------------------------------------+

))))

하지만 어쨌든 조언 감사합니다!

 
Vladimir Simakov :

예, 문제는 없지만 댓글은 없습니다. 예, /* ... */ 로 대체하면 작동하지 않습니다. 이 경우 컴파일러는 설정 테이블의 외부 변수에 대한 텍스트 설명 컨텍스트에서 인식을 중단합니다. 확인했습니다.

아마도 당신이 뭔가를 잘못 했습니까? 아니면 매크로에 다른 동작이 있습니까?

 input double d1= 1.02 , /*Первая переменная double*/ d2= 3 ; /*Вторая переменная double*/
input double d3= 3.07 ; /*Третья переменная double*/
input int i1= 5 , /*Первая переменная int*/ i2= 7 ; /*Вторая переменная int*/
 
Alexey Viktorov :

아마도 당신이 뭔가를 잘못 했습니까? 아니면 매크로에 다른 동작이 있습니까?

예, 다른. 이는 전처리기가 파서 보다 먼저 시작되어 어리석게 텍스트를 수집하는 반면 매크로 내부의 주석은 전처리기 단계에서 폐기된다는 사실 때문입니다. 동시에 // 매크로에 남겨두면 자신의 잘못으로 맹렬한 버그에 걸릴 수 있습니다.