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

 
Fox_RM :

NewBar() 함수를 사용하여 새 막대에서 주문을 열려고 했습니다. 이것을 위해 사용해야합니까?

예를 들어 if (NewBar())i++; 이 같은.

NewBar는 눈치채지 못했습니다. 죄송합니다.

그런 다음 다음을 변경하십시오. 새 막대에서만 거래를 열면 매 틱마다 전체 지표를 계산할 필요가 없습니다.

따라서 거래를 열기 위한 조건을 확인하기 전에 표시기의 전체 계산을 이동하고 제한 막대가 아니라 필요한 만큼 계산합니다(제가 틀리지 않은 경우 20개).


따라서 전략은 다음과 같습니다.

1) 새로운 바? 아니 - 걷기

2) 예 - 필요한 모든 것을 고려합니다(MA, 표시기, 조건에 대한 기타 모든 것)

3) 조건 확인 - 금지 - 도보

4) 예 - _현재 가격_에서 시작합니다(각각 요청 또는 입찰).

 
ilunga :

NewBar는 눈치채지 못했습니다. 죄송합니다.

그런 다음 다음을 변경하십시오. 새 막대에서만 거래를 열면 매 틱마다 전체 지표를 계산할 필요가 없습니다.

따라서 거래를 여는 조건을 확인하기 전에 표시기의 전체 계산을 이동하고 제한 막대가 아니라 필요한 만큼 계산하십시오(제가 실수하지 않은 경우 20개).

맞습니다 20. 대충 어떻게 하는지 이해했습니다. 내 계산과 전문가용 20바 계산의 차이가 정확히 무엇인지 설명해주세요.

나는 단지 오류의 본질을 이해하고 싶을 뿐입니다.

 
Fox_RM :
모두 좋은 하루!
추적하기 위해 전문가용 지표의 코드를 다시 만들기로 결정했습니다.
그의 신호를 처리합니다.
오류를 컴파일할 때 0. 테스터에서도 오류 없이 실행되지만 둘 다

하나의 거래, 무엇이 잘못 되었습니까?

Z.Y. 나는 어리석은 실수가 많을 것이라고 확신합니다. 공백을 쏴주세요.

예를 들어 다음과 같이 "여기서 무엇을 춤추고 있습니까?"를 파악하는 것보다 자신의 방식으로 코드를 다시 작성하는 것이 더 쉽습니다.

   ArrayResize (MA1, Bars ); ArrayResize (MA2, Bars );

Expert Advisor의 지표에 사용된 기능이 어떻게 작동하는지 알지 못했습니다.

   int counted_bars= IndicatorCounted ();  

그러나 "차이가 없으면" 구성하는 주기는 다음과 같습니다.

   for (i= 0 ; i<=limit; i++) 

여기서 limit = Bars - counted_bars, 두 번째 틱에서 0과 같은 값을 취한 다음 코드에 따라 값이 할당됩니다 ... OPA - 그러나 이것은 일반적으로 프로그래밍에서 새로운 단어입니다.

   if (limit> 0 ) limit= 0 ;

...전체 전략을 위반하지 않는 경우 이 조건을 다음과 같이 작성하십시오.

   if (limit<= 0 ) limit= 1 ;
 
Fox_RM :

저것들. 이 조건을 사용하여 막대를 다시 계산하시겠습니까?

그러나 내 표시기에서 TP_UP 및 TP_DN 배열은 각 틱에서 계산됩니다. 따라서 먼저 계산해야 합니다.


반복 합니다. 포지션 개시 가격은 OP_BUY==Ask, OP_SELL==Bid입니다.

그리고 닫기[i]가 있습니다.

 
Fox_RM :

맞습니다 20. 대충 어떻게 하는지 이해했습니다. 내 계산과 전문가용 20바 계산의 차이가 정확히 무엇인지 설명해주세요.

나는 단지 오류의 본질을 이해하고 싶을 뿐입니다.

전체 지표의 계산에는 이와 같은 오류가 없습니다. 어느 것이 더 빠른지 생각해 보세요.

1) 틱마다 막대(약 10000) 막대를 셉니다.

2) 분당 1회 20개의 막대를 셉니다(또는 여러 개).

 
Fox_RM :
모두 좋은 하루!
추적하기 위해 전문가용 지표의 코드를 다시 만들기로 결정했습니다.
그의 신호를 처리합니다.
오류를 컴파일할 때 0. 테스터에서도 오류 없이 실행되지만 둘 다

하나의 거래, 무엇이 잘못 되었습니까?

Z.Y. 나는 어리석은 실수가 많을 것이라고 확신합니다. 공백을 쏴주세요.

기본은 아니지만 코드를 단순화하기 위해 이 구성은 다음과 같습니다.

   ArrayResize (TP_UP, 20 ); ArrayResize (TP_DN, 20 ); 
   ArrayResize (TP_UPMin, 20 ); ArrayResize (TP_DNPl, 20 );

차원이 있는 ALREADY 간단한 배열 선언으로 대체되어야 합니다.

 double delta,price,old_price,col_bar,sum_tick,sum_pip,TP_UP[20],TP_DN[20],TP_UPMin[20],TP_DNPl[20];
 
Fox_RM :

맞습니다 20. 대충 어떻게 하는지 이해했습니다. 내 계산과 전문가용 20바 계산의 차이가 정확히 무엇인지 설명해주세요.

나는 단지 오류의 본질을 이해하고 싶을 뿐입니다.

이것이 프로그래밍의 PRINCIPAL\FUNDAMENTAL 원칙입니다. 이해가 되지 않는 일은 하지 마십시오! :)))
 
Fox_RM :
그리고 도서관 업무와 관련된 또 다른 질문.
라이브러리 파일을 만들고 컴파일했는데 모든 것이 오류 없이 진행되었습니다.
함수를 표시기 코드로 가져오고 컴파일했는데 모든 것이 정상입니다.
표시기가 실행될 때 가져온 기능이 실행되지 않았습니다.

표시기 자체의 코드에서 모든 것이 이 기능에 대해 작동합니다. 다음은 라이브러리 코드입니다.

이것은 표시기 코드의 호출입니다.

 //+------------------------------------------------------------------+
//|                                                         lib1.mq4 |
//|                                         Copyright © 2012, Fox.RM |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Fox.RM"
#property link       "http://www.metaquotes.net"
#property library
//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
double Sredn( double & ArrSr[])
{
double a= 1 ,c,step= 1 / 20 ;
for ( int i= 0 ;i<= 20 ;i++)
{ if (ArrSr[i]== 0 ){a*= 1 ;} else {a*= MathAbs (ArrSr[i]);}}
c= MathPow (a, step);
   return (c);
}
//+------------------------------------------------------------------+
 
Zhunko :

바딤, 바로 보이지 않는 작은 물결선(&)을 넣으셨군요! .. :)))

작성자(작가의 공연에서)가 한 곳에서는 이 기능을 수행했지만 다른 곳에서는 수행하지 않은 방법이 궁금합니다! ;)

 
Fox_RM :

맞습니다 20. 대충 어떻게 하는지 이해했습니다. 내 계산과 전문가용 20바 계산의 차이가 정확히 무엇인지 설명해주세요.

나는 단지 오류의 본질을 이해하고 싶을 뿐입니다.

그건 그렇고, 나는 20 차원의 작업 배열을 선언한다는 것을 알았습니다.

   ArrayResize (TP_UP, 20 ); ArrayResize (TP_DN, 20 ); 
   ArrayResize (TP_UPMin, 20 ); ArrayResize (TP_DNPl, 20 );

그리고 라이브러리는 21개의 요소를 계산합니다.

 for ( int i= 0 ;i<= 20 ;i++)

루프가 1에서 시작해야 한다고 가정할 수 있습니다.

 for ( int i=1;i<= 20 ;i++)