[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 61

 

친애하는 전문가 여러분, 다음 질문에 답변해 주십시오.

MetaEditor에는 프로그램 생성 템플릿의 텍스트 파일이 있습니다. 프로그램을 생성할 때 마법사에서 사용합니다. 템플릿의 텍스트는 생성되는 프로그램 파일 유형의 매개변수를 지정합니다. 코드 텍스트에 나타나지 않는 옵션과 태그 사이에 태그가 있습니다. 그러나 터미널은 어떻게 든 그들을 인식합니다. Expert Advisor가 생성되면 다음 틱이 도착한 후 시작 기능이 실행되고, 표시기이면 틱 없이 시작 기능이 실행됩니다. 태그와 그 안의 모든 것은 어디로 가나요?

 

다리가 어디에서 자라는지 이해하기 위해 2가지 테스트를 더 했습니다.


1. ini에서 읽는 것은 문자열 배열이 아니라 별도의 변수로 읽습니다. 결과가 예상됩니다. 복사는 값이 아니라 참조입니다.

 int     numCross = 0 ;

string Cross_1="-", Cross_2="-", Cross_3="-";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init ( )
{
   string sectionName = "common" ;
  
  numCross = ReadIniInteger ( config_path , sectionName , "numCross" , 0 ) ;
   ArrayResize ( CrossName , numCross ) ;
  for (int i=0; i<numCross; i++) CrossName[i] = "-";
  
  sectionName = "cross1" ;
  Cross_1 = ReadIniString ( config_path , sectionName , "name" , "-" ) ;
   Print ( "init.1: Cross_1=" , Cross_1 ) ;
  sectionName = "cross2" ;
  Cross_2 = ReadIniString ( config_path , sectionName , "name" , "-" ) ;
   Print ( "init.1: Cross_2=" , Cross_2 ) ;
  sectionName = "cross3" ;
  Cross_3 = ReadIniString ( config_path , sectionName , "name" , "-" ) ;
   Print ( "init.1: Cross_3=" , Cross_3 ) ;
   Print ( "init.1: read complete" ) ;

   Print ( "init.2: Cross_1=" , Cross_1 ) ;
   Print ( "init.2: Cross_2=" , Cross_2 ) ;
   Print ( "init.2: Cross_3=" , Cross_3 ) ;
   Print ( "-------------------------------" ) ;
  
  sectionName = "cross1" ;
  Cross_1 = StringSubstr ( ReadIniString ( config_path , sectionName , "name" , "-" ) , 0 , 0 ) ;
   Print ( "init.3: Cross_1=" , Cross_1 ) ;
  sectionName = "cross2" ;
  Cross_2 = StringSubstr ( ReadIniString ( config_path , sectionName , "name" , "-" ) , 0 , 0 ) ;
   Print ( "init.3: Cross_2=" , Cross_2 ) ;
  sectionName = "cross3" ;
  Cross_3 = StringSubstr ( ReadIniString ( config_path , sectionName , "name" , "-" ) , 0 , 0 ) ;
   Print ( "init.3: Cross_3=" , Cross_3 ) ;
   Print ( "init.3: read complete" ) ;

   Print ( "init.4: Cross_1=" , Cross_1 ) ;
   Print ( "init.4: Cross_2=" , Cross_2 ) ;
   Print ( "init.4: Cross_3=" , Cross_3 ) ;

   return ( 0 ) ;
}


결과는 다음과 같습니다.

2009.04.10 14:31:42 example AUDUSD,H4: init.4: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.4: Cross_2=GBPUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.4: Cross_1=EURUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.3: read complete
2009.04.10 14:31:42 example AUDUSD,H4: init.3: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.3: Cross_2=GBPUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.3: Cross_1=EURUSD
2009.04.10 14:31:42 example AUDUSD,H4: -------------------------------
2009.04.10 14:31:42 example AUDUSD,H4: init.2: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.2: Cross_2=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.2: Cross_1=USDJPY

2009.04.10 14:31:42 example AUDUSD,H4: init.1: read complete
2009.04.10 14:31:42 example AUDUSD,H4: init.1: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.1: Cross_2=GBPUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.1: Cross_1=EURUSD


2. 문자열 배열을 반환했지만 ini에서 문자열 값을 읽는 대신

 string ReadIniString ( string FileName , string SectionName , string KeyName , 
                     string Default = "" )
   {
   string ReturnedString = "" ;
   int nValue = GetPrivateProfileStringA ( SectionName , KeyName , Default , 
                                          ReturnedString , 255 , FileName ) ;
   if ( nValue > 0 )
       return ( ReturnedString ) ;
   else 
       return ( Default ) ;
   }

내부에서 win api에서 아무 것도 호출하지 않는 테스트 함수를 대체했습니다.

 string CrossName [ ] ;
int     numCross = 0 ;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init ( )
{
   string sectionName = "common" ;
  
  numCross = ReadIniInteger ( config_path , sectionName , "numCross" , 0 ) ;
   ArrayResize ( CrossName , numCross ) ;
  for (int i=0; i<numCross; i++) CrossName[i] = "-";
  
   for ( int i = 0 ; i < numCross ; i + + )
   {
    sectionName = StringConcatenate ( "cross" , i + 1 ) ;
    CrossName [ i ] = someFunc ( i + 1 ) ;
     Print ( "init.1: CrossName[" , ( i + 1 ) , "]=" , CrossName [ i ] ) ;
   }
   Print ( "init.1: read complete" ) ;
  
   for ( i = 0 ; i < numCross ; i + + )
   {
     Print ( "init.2: CrossName[" , ( i + 1 ) , "]=" , CrossName [ i ] ) ;
   }
  

   Print ( "-------------------------------" ) ;
   for ( i = 0 ; i < numCross ; i + + )
   {
    sectionName = StringConcatenate ( "cross" , i + 1 ) ;
    CrossName [ i ] = StringSubstr ( someFunc ( i + 1 ) , 0 , 0 ) ;
     Print ( "init.3: CrossName[" , ( i + 1 ) , "]=" , CrossName [ i ] ) ;
   }
   Print ( "init.3: read complete" ) ;
  
   for ( i = 0 ; i < numCross ; i + + )
   {
     Print ( "init.4: CrossName[" , ( i + 1 ) , "]=" , CrossName [ i ] ) ;
   }

   return ( 0 ) ;
}
//+------------------------------------------------------------------+
string someFunc ( int val )
{
   string ReturnedString = "CROSS_" + val ;
   return ( ReturnedString ) ;
}
//+------------------------------------------------------------------+

결과

2009.04.10 14:41:12 AUDUSD,H4 예시: init.4: CrossName[3]=CROSS_3
2009.04.10 14:41:12 AUDUSD,H4 예시: init.4: CrossName[2]=CROSS_2
2009.04.10 14:41:12 AUDUSD,H4 예시: init.4: CrossName[1]=CROSS_1
2009.04.10 14:41:12 예시 AUDUSD,H4: init.3: 읽기 완료
2009.04.10 14:41:12 AUDUSD,H4 예시: init.3: CrossName[3]=CROSS_3
2009.04.10 14:41:12 AUDUSD,H4 예시: init.3: CrossName[2]=CROSS_2
2009.04.10 14:41:12 AUDUSD,H4 예시: init.3: CrossName[1]=CROSS_1
2009.04.10 14:41:12 AUDUSD,H4 예시: -------------------------------------------
2009.04.10 14:41:12 AUDUSD,H4 예시: init.2: CrossName[3]=CROSS_3
2009.04.10 14:41:12 AUDUSD,H4 예시: init.2: CrossName[2]=CROSS_2
2009.04.10 14:41:12 AUDUSD,H4 예시: init.2: CrossName[1]=CROSS_1
2009.04.10 14:41:12 예시 AUDUSD,H4: init.1: 읽기 완료
2009.04.10 14:41:12 AUDUSD,H4 예시: init.1: CrossName[3]=CROSS_3
2009.04.10 14:41:12 AUDUSD,H4 예시: init.1: CrossName[2]=CROSS_2
2009.04.10 14:41:12 AUDUSD,H4 예시: init.1: CrossName[1]=CROSS_1

걸림돌이 캐스트에서 가장 가능성이 있음을 보여주었습니다.

 LPTSTR l pReturnedString [out] 검색된 문자열을 수신하는 버퍼에 대한 포인터 win api function GetPrivateProfileString to mql4 string .
 
xruss >> :

어떻게 되어야 합니까? 논리적으로 나는 신호 생성 전에 ORDtype을 결정하려고 생각했습니다. 그렇지 않으면 거래 기준에서 고려되는 방법. 그리고 또 하나의 걸림돌 - 빈 기록이 있어도 위치가 열리지 않습니다((

나는 당신에게 개인적으로 대답했습니다 - 나는 그것이 더 생산적이라고 생각합니다.

 
Reshetov >> :

바퀴를 재발명하지 않고 미리 만들어진 Martingale 거래 전문가 고문 중 한 명으로 시작하여 이 모든 것이 이미 구현된 방법을 확인하는 것이 훨씬 쉽습니다.


예를 들어 Universum 3.0


감사합니다. 전적으로 동의합니다. 모든 것이 오랫동안 발명되었습니다.

 

테스터에서 Expert Advisor를 테스트 할 때 init() 함수를 실행합니다.


EA의 init() 함수 내에서 여러 외부(외부) 변수의 값을 정규화하고 싶습니다.

이 정규화된(새) 값을 사용하여 start()에서 표시기를 호출합니다.

이 정규화를 start()에 포함하고 싶지 않습니다.

Strategy Tester에서 Expert Advisor를 최적화하는 동안 외부 변수가 변경될 때마다 init() 함수가 실행됩니까?
 
begemot61 писал(а) >>

테스터에서 Expert Advisor를 테스트할 때 init() 함수를 실행합니다.


EA의 init() 함수 내에서 여러 외부(외부) 변수의 값을 정규화하고 싶습니다.

이 정규화된(새) 값을 사용하여 start()에서 표시기를 호출합니다.

이 정규화를 start()에 포함하고 싶지 않습니다.

Strategy Tester에서 Expert Advisor를 최적화하는 동안 외부 변수가 변경될 때마다 init() 함수가 실행됩니까?

그래 그럴거야

 

int start()
  {
  if (OrdersTotal() == 0 
  && TimeDayOfWeek(TimeCurrent()) == 5
  && TimeHour(TimeCurrent()) == 12
  && TimeMinute(TimeCurrent()) == 30
  && TimeSeconds(TimeCurrent()) >= 00)
  {
  Alert("Тра ляля");  
  OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"sell",999999,0,Red);
  }
   

왜 주문이 열리지 않는지 아무도 알려주지 않습니까? 나는 왜 그 생각을 하지 못했는가?
 
Dimoncheg писал(а) >>
왜 주문이 열리지 않는지 아무도 알려주지 않습니까? 나는 왜 그 생각을 하지 못했는가?

그래서, 이것은... 우리는 금요일까지 기다려야 합니다. 이 분 동안 진드기가 있으면 열릴 것입니다.

 
Roger >> :

그래서, 이것은... 우리는 금요일까지 기다려야 합니다. 이 분 동안 진드기가 있으면 열릴 것입니다.

그것이 내가 금요일이나 다른 요일에 하는 모든 일과 쓰레기입니다. 경고가 작동하고 주문이 열리지 않습니다.