[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 285

 
gyfto :

그래서. 마치듯이. 다음은 두 번째 양초에 포장하는 재설계된 틱 피커입니다.

그것은:

그것은되었다:

코드에 대한 참고 사항.

1. CPU 시간을 절약하기 위해 가상 양초를 선택할 때 대소문자를 바꾸지 않고 대신 선택 항목이 있는 섹션을 주석 처리했습니다.

2. 현지 시간(오프라인, 즉)으로 작업하기 위해 염두에 두지 않았습니다. 루프 " while (time== TimeLocal ()){ //1초가 지날 때까지 ", FileWriteDouble 에 MarketInfo 가 있어야 한다고 생각합니다. 거기에서 더 논리적인 것이 무엇인지 말씀해 주시면 감사하겠습니다.

3. 작가의 디자인

처음으로 init()의 맨 끝에 선언했습니다.

4. init() 동적 배열의 시작 부분에서

사용된 변수 대신.

5. 최적화를 위해 이론적으로 WinAPI 파일 기능을 사용하고 44바이트 블록(MarketInfo 구조의 길이 또는 .hst의 길이)에 한 번에 기록을 쓸 수 있습니다.

6. Time[] 셀에 쓰기 위한 작성자의 시간 모델링을 완전히 제거했습니다. 같은 이유로 기본 while 루프에는 TimeLocal()이 없고 TimeCurrent()만 있습니다.

7. 코드를 최적화하기 위해 또 무엇을 제안하시겠습니까?

단락 4에서 지표를 만든 다음 다음 조치가 명확하지 않다는 것을 이해해야합니다.

 ArrayResize (bid, 1 ); //урезаем и обнуляем использованные массивы
ArrayResize (ask, 1 );

ArrayInitialize() 가 적절할 가능성이 높습니까?!

그리고 대부분 지표 배열 사용을 중단해야 합니다.

 
TarasBY :

대부분 ArrayInitialize()가 적합합니다?!

ArrayInitialize(요청, EMPTY_VALUE ); 말입니까? 생각하지 않았다. 내가 자르기 시작한 이유, 나는 그러한 경우를 두려워했습니다.

(a, b, c)//초당 3틱 후 Ask의 값(굉장하지만 가정해 봅시다).

ArrayInitialize(ask, 0);//(0, 0, 0)

FileWriteDouble (hand1e, Ask[ ArraySize (ask) -1 ], DOUBLE_VALUE); //닫다[]

- 0은 Close 셀에 들어갈 것이기 때문에 사이즈를 재선언하여 이런 일이 발생하지 않도록 합니다. ArrayInitialize 필요(요청, EMPTY_VALUE); 실행 확인.

타라스BY :

지시자 배열의 사용을 포기할 필요가 있습니다.

그들은 역동적이고 나는 그것에 빠졌습니다. 더 적은 명령, 더 적은 프로세서 주기. 바로 거기에 이론적으로 가능한 모든 우물에서 500밀리초의 처리가 필요합니다.

 
수동으로 거래 창을 호출하여 어드바이저에서 보내기 주문과 닫기 주문을 대체 할 수 있는지 누가 알겠습니까? 이 창을 통해 시장에 진입하십시오. 이것은 사용을 허용하지 않는 브로커에게 필요합니다. 고문
 
gyfto :

ArrayInitialize(요청, EMPTY_VALUE); 말입니까? 생각하지 않았다. 내가 자르기 시작한 이유, 나는 그러한 경우를 두려워했습니다.

(a, b, c)//초당 3틱 후 Ask의 값(굉장하지만 가정해 봅시다).

ArrayInitialize(ask, 0);//(0, 0, 0)

FileWriteDouble (hand1e, Ask[ ArraySize (ask) -1 ], DOUBLE_VALUE); //닫다[]

- 0은 Close 셀에 들어갈 것이기 때문에 사이즈를 재선언하여 이런 일이 발생하지 않도록 합니다. ArrayInitialize 필요(요청, EMPTY_VALUE); 실행 확인.


그들은 역동적이고 나는 그것에 빠졌습니다. 더 적은 명령, 더 적은 프로세서 주기. 바로 거기에 이론적으로 가능한 모든 우물에서 500밀리초의 처리가 필요합니다.

나는 그것에 대해 전혀 이야기하고 있지 않습니다. 무언가가 당신이 표시기 배열을 줄일 수 없을 것이라고 말해줍니다. 또한 이러한 배열에 빈 셀이 있는 경우 0 또는 EMPTY_VALUE 값이 있는 모든 것이 있으며 다음 계산에서 얻을 수 있는 값은 다음과 같습니다.

bid[ ArrayMaximum (bid)];
ask[ ArrayMinimum (ask)];
그리고 일반적인 논리에 따르면: 저는 전체 틱 컬렉션을 한 주기로 실행하고 시간을 별도로 제어하고 "새 막대"에 대한 시간이 지나면 파일에 작성하여 0으로 만들고 잘라냅니다. 작업 배열.
 
ex_kalibur :
수동으로 거래 창을 호출하여 어드바이저에서 보내기 주문과 닫기 주문을 대체 할 수 있는지 누가 알겠습니까? 이 창을 통해 시장에 진입하십시오. 이것은 사용을 허용하지 않는 브로커에게 필요합니다. 고문
Expert Advisor의 "속성" 창 -> "일반" 탭 -> "자동 거래" -> "수동 확인" 상자에 체크 - 다른 방법은 모르겠습니다.
 
TarasBY :

그리고 일반적인 논리에 따르면: 나는 틱의 전체 컬렉션을 한 주기로 실행하고 시간을 별도로 제어하고 "새 막대"에 대한 시간이 지나면 파일에 쓰고 0으로 설정하고 잘라냅니다. 작업 배열.


이상하다.. 있구나.. 시간이 틱 수집 주기 자체에서 제어되고, 틱의 복사본이 몇 번이나 그려질 때까지 작업 배열이 잘리지 않는다는 것뿐입니다. 초에서 1을 뺀 틱. 1초가 지나고 - 새 틱이 그려지고, 2 - 이전 틱과 새 틱의 복사본, 3 - 이전 틱과 새 틱의 복사본 2개 등 이전 눈금의 복사본 대신 닫기 수준에서 대시를 그릴 수 있습니다. 이 옵션은 코드에서 주석 처리됩니다.
 
gyfto :

이상하다.. 가지고 있다.. 시간이 틱 수집 주기 자체에서 제어되고, 틱의 복사본이 몇 번이나 그려질 때까지 작업 배열이 잘리지 않는다는 것뿐입니다. 초에서 1을 뺀 틱입니다. 1초가 지나고 - 새 틱이 그려지고, 2 - 이전 틱과 새 틱의 복사본, 3 - 이전 틱과 새 틱의 복사본 2개 등 이전 눈금의 복사본 대신 닫기 수준에서 대시를 그릴 수 있습니다. 이 옵션은 코드에서 주석 처리됩니다.

우리는 다른 주기에 대해 이야기하고 있습니다. 나는 이것에 대해 이야기하고 있습니다 :

     while (! IsStopped () && IsExpertEnabled())
    {
         //---- Сбор тиков
    }
 
누군가 소수점 뒤의 0을 제거하는 방법을 말해 줄 수 있습니까? 어떤 이유로 소수점 이하 4자리가 있습니다. 다음은 코드입니다. 문자열 l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3);
 
Demon2057 :
누군가 소수점 뒤의 0을 제거하는 방법을 말해 줄 수 있습니까? 어떤 이유로 소수점 이하 4자리가 있습니다. 다음은 코드입니다. 문자열 l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3);
https://docs.mql4.com/ru/strings/StringSubstr
 

내가 뭘 잘못하고 있는지 말해줘...

0.20130429164459 형식의 날짜를 포함하려면 double 유형의 변수가 필요합니다(2013.04.29 16:44:59를 의미).

고문 코드의 일부:

 #include <stdlib.mqh>
bool once= false ;
int start()
  {
   if (once== false )
     {
     double DTM; // дата и время в формате 0,20130429164459
     int YY=TimeYear(   TimeCurrent ());   // Year
     int MN=TimeMonth(   TimeCurrent ());   // Month         
     int DD=TimeDay(     TimeCurrent ());   // Day
     int HH=TimeHour(   TimeCurrent ());   // Hour         
     int MM=TimeMinute( TimeCurrent ());   // Minute
     int SS=TimeSeconds( TimeCurrent ());   // Second
    DTM = YY* 0.0001 +MN* 0.000001 +DD* 0.00000001 +HH* 0.0000000001 +MM* 0.000000000001 +SS;
    
   Alert ( "Значение переменной DTM с 06 знаками равно " , DoubleToStrMorePrecision(DTM, 6 ));
   Alert ( "Значение переменной DTM с 07 знаками равно " , DoubleToStrMorePrecision(DTM, 7 ));
   Alert ( "Значение переменной DTM с 08 знаками равно " , DoubleToStrMorePrecision(DTM, 8 ));
   Alert ( "Значение переменной DTM с 09 знаками равно " , DoubleToStrMorePrecision(DTM, 9 ));
   Alert ( "Значение переменной DTM с 10 знаками равно " , DoubleToStrMorePrecision(DTM, 10 ));
   Alert ( "Значение переменной DTM с 11 знаками равно " , DoubleToStrMorePrecision(DTM, 11 ));
   Alert ( "Значение переменной DTM с 12 знаками равно " , DoubleToStrMorePrecision(DTM, 12 ));
   Alert ( "Значение переменной DTM с 13 знаками равно " , DoubleToStrMorePrecision(DTM, 13 ));
   Alert ( "Значение переменной DTM с 14 знаками равно " , DoubleToStrMorePrecision(DTM, 14 ));
   Alert ( "Значение переменной DTM с 15 знаками равно " , DoubleToStrMorePrecision(DTM, 15 ));
   once= true ;
      }
   return ( 0 );
  }

Precision 12,13 및 14에 대한 이벤트 로그가 올바른 결과를 제공하지 않습니다. 사진 참조


사유: