기고글 토론 "MQL4에서 MQL5로 이전하기" - 페이지 3

[삭제]  

입력 매개 변수의 사양에 따라 서로 다른 유형의 데이터를 반환하는 함수 집합으로 double MarketInfo(문자열 기호, int 유형)를 마이그레이션할 것을 제안합니다.


예를 들어, 다음 함수는 다음과 같습니다:

int MarketInfoInt(문자열 symbol, int type);

문자열 MarketInfoStr(문자열 symbol, int type)....

한때 함수의 참조와 결과에 대해 개발자와 의사 소통을했지만 그들은 그것을 거부했습니다 (유감입니다).


PS

이를 바탕으로 현재 가장 좋은 솔루션은 필요한 모든 기능이 포함될 MarketInfo 라이브러리라고 생각합니다.

그건 그렇고, 이것은 정확히 내가 내 라이브러리에서 한 일입니다 :)

 
Interesting:

제 생각에는 마이그레이션 환경에서 TF를 처리하려면 두 가지 기능이 필요합니다:

1. 초 수를 TF로 변환합니다(예: ENUM_TIMEFRAMES SecondToPeriod (int 값));

2. 기간을 초로 변환합니다 - 예를 들어 int PeriodToSecond(ENUM_TIMEFRAMES Value).


처음에 마이그레이션 모듈에서 성공적으로 수행했습니다(DLL 옵션도 있습니다).


PS

MQL4를 최대한 준수하기 위해 개인적으로 비표준 기간에 대한 모든 비표준을 제거했습니다.



기능은 훌륭하고 유용하지만 실행....

나는 이렇게 할 것입니다.

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void FixTF(int &tf)
  {
   switch(tf)
     {
      case 0: tf = 0;break;
      case 1: tf = PERIOD_M1;break;
      case 5: tf = PERIOD_M5;break;
      case 15: tf = PERIOD_M15;break;
      case 30: tf = PERIOD_M30;break;
      case 60: tf = PERIOD_H1;break;
      case 240: tf= PERIOD_H4;break;
      case 1440: tf=PERIOD_D1;break;
      case 10080: tf = PERIOD_W1;break;
      case 43200: tf = PERIOD_MN1;break;
      default: tf=0;break;
     }
  }
//+------------------------------------------------------------------+



모든 함수에서 배열의 크기를 정의하기 만하면됩니다.

의 크기를 정의하기만 하면 됩니다.

 
CoreWinTT:

기능은 훌륭하고 유용하지만 실행..... 이단입니다.

당신의 일??

어디 휴식!!!!!! 슬픔 프로그래머!!!!


어떻게 리턴이 브레이크보다 더 나쁘나요?
 
사과드립니다.
 
CoreWinTT:

모든 함수에서
배열의 크기를 단순히 az'buki vedi로 정의하기만 하면 됩니다.

항상 그런 것은 아니므로 시계열 및 인디케이터에 대한 액세스 섹션을 참조하세요:

시계열 및 지표로 작업하기 위한 함수. 시계열은 시계열 요소의 인덱싱이 배열의 끝에서 시작(가장 최근 데이터부터 가장 오래된 데이터까지)으로 수행된다는 점에서 일반 배열과 다릅니다. 복사 함수는 필요한 크기의 배열-값 수신자를 독립적으로 할당하므로 시계열 및 인디케이터의 값을 복사할 때는 동적 배열만 사용하는 것이 좋습니다.

이 규칙에는 중요한 예외가있습니다 . 예를 들어 전문가 조언자에서 OnTick() 을 호출할 때마다 또는 지표에서 OnCalculate( )를 호출할 때마다 시계열 및 지표 값을 자주 복사해야 하는 경우 동적 배열의 메모리 할당 작업에추가 시간이 필요하고 이는 전문가 조언자의 테스트 및 최적화에 영향을 주므로 이 경우 정적으로 분산된 배열을 사용하는 것이 좋습니다.

 
Rosh:

항상 그런 것은 아니므로 시계열 및 지표에 대한 액세스를 참조하세요:


제 실습에서 알 수 있듯이 하지 않는 것보다는 하는 것이 좋습니다.

그렇지 않으면 데이터 액세스 오류가 나타납니다.

특히 전역 배열의 경우 더욱 그렇습니다.


첫째, 지정된 크기의 배열에서는 인덱싱이 정적이며 반전 배열의 이러한 위험한 순간이 없기 때문입니다.

둘째, 배열을 위한 공간이 더 적게 할당됩니다.

셋째, 배열 액세스 오류가 발생할 확률이 여러 번 감소합니다.

그렇기 때문에 배열 크기를 결정하는 함수가 필요하다고 생각합니다.

 
CoreWinTT:

이 기능은 훌륭하고 유용하지만 실행은 다음과 같습니다....

나는 이렇게 할 것입니다.

문서가 수정되었습니다:

  • TFMigrate() 함수를 원래 형태로 복원했습니다.
  • 섹션 18에서 함수를 변경했습니다.
 
레퍼런스 매뉴얼에 iMAOnArray(...) 함수 추가
 
iMAOnArray 함수 수정. MODE_SMA 모드에서 계산 시간이 크게 단축되었습니다.
[삭제]  

이 디자인의 기능에 대해 많이 의심하기 시작했습니다. 블록의 로직을 이해하려고 아무리 노력해도 이해할 수 없었습니다(그리고 열심히 노력했습니다)....

int iBarShiftMQL4(string symbol,
                  int tf,
                  datetime time,
                  bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
      return(ArraySize(Arr)-1);
   else return(-1);
  }