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

 

질문입니다. 지금 최적화하는 방법은 무엇입니까? 고문의 골격은 이제 다음과 같습니다.

init(){
         //если файл истории не существовал, формируем заголовок
}

start(){
         //ловим тики
         //смотрим, сколько прошло секунд с последнего вызова start():
                 //если 1 или больше, то---(блок свеч)---
                         //запоминаем, сколько прошло секунд
                         //---(блок выбора режима)---
                         //формируем RateInfo - столько раз, сколько прошло секунд
                 //если 0, то---(блок теней)---
                         //редактируем RateInfo - столько раз, сколько прошло секунд в прошлый раз
}

//---(блок выбора режима)---
//флаги в экстерне - все бычьи, все медвежьи или любые
//если все бычьи, то в close всегда ask
//если все медвежьи, то в close всегда bid
//Если любые, то
         //если текущий бид меньше предыдущего, то медвежья
         //в любом другом случае бычья

변수에 가깝게 이동하고 불필요하게 된 두 번째 FileSeek 블록 제거, 양초 스타일 선택 추가(모두 강세, 모두 약세, 모두), 다음 요청 또는 입찰가가 이전 고가 및 저가보다 크거나 작을 경우 그림자 추가 , 헤더의 플래그로 활성화된 인쇄와 함께 추적을 추가하고 줄 번호에 대한 링크가 있는 모든 주석을 완전히 제거하고 포럼에서 코드를 읽을 수 있도록 시도했습니다. 줄 번호도 인쇄합니다.

지금 시청:

상단에 틱 타임프레임, 하단에 초. 그림자(꼬리)는 1초에 두 개의 진드기가 포착되고 입찰 또는 매도가 이전 것과 다른 경우입니다. 티크는 시계처럼 작동합니다. 1초는 늦습니다. 즉, 틱 사이의 최소 시간 간격보다 틱 처리에 더 많은 시간이 소요됩니다. 그래서 코드를 최적화하는 방법을 묻는 것입니다. 나는 코드를 첨부하고 있습니다 - 나는 모든 주석을 완전히 제거했음을 반복합니다. 작동 방식을 확인해야 하는 경우 - 어드바이저로 잠시 매달린 다음 독립 실행형에서 찾아 'sec'+기기 이름을 엽니다.

파일:
hhi.jt.mq4  29 kb
 
david2 :
Expert Advisor에서 이러한 기능을 구현하는 방법은 무엇입니까? TP 또는 SL이 베이 주문에 대해 트리거되면 모든 베이 주문이 마감되어야 합니다.

프로그래밍 경험이 있다면 힌트:

1. 매수 주문을 연 후 매수 주문 건수를 센다.

2. 전역 변수 에 숫자 저장

3. 다음 틱에서 매수 주문이 이전 매수보다 적은 조건을 확인하고 모든 매수 주문을 마감합니다.

코드 베이스에는 오픈 포지션 유형별 주문 수와 선택한 유형(구매 또는 판매)의 클로징 포지션을 설명하는 기능이 있습니다.

Kim의 많은 유용한 기능

 

변수의 유형 변환에 대해.
이중 K 계수 값을 라인 설명에 텍스트로 기록했습니다(K=0.573).
코드를 실행하는 동안 계수 K의 값이 여러 번 변경되었습니다.
이제 행 설명 문자열 ObjectDescription(문자열 이름)을 추출한 후 이중 Z 변수에 작성된 값 K=0.573을 곱하고 싶습니다.
MQL에서 0.573을 다시 얻기 위해 string 유형 의 변수를 double 유형의 변수로 변환할 수 있습니까? 가능하면 링크를 제공하십시오.
감사합니다. 쉬.

 
Shurkin :

MQL에서 0.573을 다시 얻기 위해 string 유형의 변수를 double 유형의 변수로 변환할 수 있습니까? 가능하시면 링크 부탁드립니다.
.

https://docs.mql4.com/ru/convert/StrToDouble
 
08:05:30 초.TF AUDUSD,M1: 15
08:05:31 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:35 Tick.tf AUDUSD,M1: 0
08:05:38 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:40 Tick.tf AUDUSD,M1: 0
08:05:41 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:43 Tick.tf AUDUSD,M1: 0
08:05:51 Sec.TF AUDUSD,M1: 15062
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:55 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:57 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 16
08:05:59 Tick.tf AUDUSD,M1: 0
08:06:00 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:09 Sec.TF AUDUSD,M1: 10156
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:17 Tick.tf AUDUSD,M1: 0
08:06:18 Tick.tf AUDUSD,M1: 0
08:06:26 Sec.TF AUDUSD,M1: 5078
08:06:27 Tick.tf AUDUSD,M1: 0
08:06:28 Tick.tf AUDUSD,M1: 0
08:06:30 Tick.tf AUDUSD,M1: 31

08:06:32 Sec.TF AUDUSD,M1: 15

두 코드(tick 및 second timeframes)에서 콕킹된 밀리초 타이머 가 있는 로그의 일부입니다. 지금까지 생각나는 것은 사이클을 완전히 제거하는 것입니다. 마지막 틱 이후 몇 초가 지났는지에 관계없이 초당 하나 이상의 틱 - 항상 하나의 촛불입니다. 둘째가 있었다면 등등 초당 틱 - 그림자가 있는 양초. 그러나 "구멍"이 있는 두 번째 TF가 있을 것이며 High[15]에 따르면 15초 전에 더 이상 Ask 값을 사용하지 않는다고 가정합니다...

 
hoz :

나는 스스로에게 함수를 작성해 달라고 부탁했다. 결론은 N- 촛불이 특정 방향으로 롤백할 때 양초의 수를 계산하는 것이 필요하다는 것입니다. 하지만. 이를 위한 몇 가지 조건이 있거나 시간이 지남에 따라 목록이 있을 것입니다.

예를 들어 추세가 아래쪽으로 향하고 있다고 가정해 보겠습니다. 롤백이 시작되었습니다. 나는 5개의 양초가 지나갔고 각 양초가 강세였고, 예를 들어 각 양초의 크기가 지정된 i_sizeOfCurrBar 및 다른 것보다 큰 경우를 원합니다. 조건에 따라 지속적으로 강세 막대의 수를 표시하고 함수에서 일부 결과를 반환합니다.

그것을 쓰는 가장 좋은 방법은 무엇입니까? 현재 저는 글을 쓰기 시작했습니다. 여기에서 막대의 주기를 실행하고 고정된 막대 수가 아니라 막대로 역사의 깊이에서 보기를 제한해야 한다는 것을 이해합니다. 조건에 관심을 가져주세요.

내가 가진 것은 다음과 같습니다.

현재로서는 끝에서 두 번째 막대에서 검색한 다음 인덱스 6이 있는 막대, 즉 연속 5개 바. 하지만 연속적으로 모두가 아니라 강세인 막대만 계산하려면 EA가 필요합니다. 어떻게 하면 더 잘 구현될까요?

크기별로 올바르게 필터링했습니다.

글쎄, 모든 것이 이미 작성되면 카운터 아래에서 이미 nht, etvsvb 매개 변수를 사용하여 연속 막대 수를 계산하고 그러한 막대가 충분하면 일종의 막대가 반환됩니다. 함수 값.

항상 그렇듯이 원본: "뒤에서" 막대를 계산합니다...

 for ( int i= Bars - 1 ; i>= Bars - 6 ; i--)
 
Zhunko :

여러 가지 방법이 있습니다.

1. 전역 변수 를 통해 .

2. 파일 을 통해 .

3. iCustom()을 통해 .

4. 전역 그래픽 변수 를 통해 .

5. 매핑 . 한 터미널에서 다른 터미널로 데이터를 전송할 수 있습니다. 또는 한 터미널에서 MT4 전역 변수의 제한 없이 한 창에서 다른 창으로 데이터를 전송합니다.


다음 중 가장 빠르게 작동하는 것은 무엇입니까?
 
gyfto :

다음 중 가장 빠르게 작동하는 것은 무엇입니까?
5. 매핑.
 
hoz :
인쇄물에는 1과 2의 값이 있습니다. 이것은 도대체 무엇입니까?
 Print ( "i = " , i, "; up = " , cnt, "; cnt = " , cnt);

그냥 부주의. 일반적으로 로컬 bool은 4바이트이므로 0과 1만 값을 취해야 하는 것은 아닙니다. C ++ 부울 - 예, 1바이트입니다. 나는 개인적으로 여러 선택을 해야 하는 경우 switch()의 이진 산술에서 bool을 사용합니다. 항상 0 또는 1이 되기를 바랍니다.))) 다음과 같습니다.

 bool f1, f2, f3, f4 //флаги

switch ( 8 *f4+ 4 *f3+ 2 *f2+f1){
   case 0 :
   ...
   case 15 :
} //без default
 
gyfto :

질문입니다. 지금 최적화하는 방법은 무엇입니까? 고문의 골격은 이제 다음과 같습니다.

변수에 가깝게 이동하고 불필요하게 된 두 번째 FileSeek 블록 제거, 양초 스타일 선택 추가(모두 강세, 모두 약세, 모두), 다음 요청 또는 입찰가가 이전 고가 및 저가보다 크거나 작을 경우 그림자 추가 , 헤더의 플래그로 활성화된 인쇄와 함께 추적을 추가하고 줄 번호에 대한 링크가 있는 모든 주석을 완전히 제거하고 포럼에서 코드를 읽을 수 있도록 시도했습니다. 줄 번호도 인쇄합니다.

이제 시청:

상단에 틱 타임프레임, 하단에 초. 그림자(꼬리)는 1초에 두 개의 진드기가 포착되고 입찰 또는 매도가 이전 것과 다른 경우입니다. 티크는 시계처럼 작동합니다. 1초는 늦습니다. 즉, 틱 사이의 최소 시간 간격보다 틱 처리에 더 많은 시간이 소요됩니다. 그래서 코드를 최적화하는 방법을 묻는 것입니다. 나는 코드를 첨부하고 있습니다 - 나는 모든 주석을 완전히 제거했음을 반복합니다. 작동 방식을 확인해야 하는 경우 - 어드바이저로 잠시 매달린 다음 독립 실행형에서 찾아 'sec'+기기 이름을 엽니다.

나는 논리를 많이 탐구하지 않았지만 뭔가가 나에게 추가 계산이 있음을 알려줍니다. 1년 반 전에 나는 천문분의 시작 부분에 명료한 컷이 있는 M1 양초 형성과 인용문 수집으로 같은 유형의 작업을 해결했습니다.
관심이 있는 경우 순전히 코드(파일) 최적화에 대한 몇 가지 사항을 확인할 수 있습니다. 사실, 최적화에 대해 진지하다면 코드 의 실행 시간 을 측정해야 합니다. ;)
파일:
hhi.jt_c_.mq4  23 kb