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

 
Noterday :

개설 중인 포지션의 로트 크기를 계산하기 위해 Expert Advisor에 새 블록을 삽입했습니다. 의미는 다음과 같습니다.

1. 스탑은 매도 포지션으로 당일 고가에, 매수 포지션으로 당일 저가에 배치됩니다.

2. 주문 개시 조건이 발생하면 이 블록이 실행되기 시작하여 로트를 계산합니다. 그날의 고가/저가까지의 거리는 포인트로 계산되며, 원하는 로트를 찾기 위해 0.1부터 시작하여 로트를 순환합니다(정지가 트리거될 때 5%).

그러나 다음 줄이 로그에 나타납니다.

2011.01.30 16:59:47 TestGenerator: 일치하지 않는 데이터 오류(2011.01.13 14:45에서 볼륨 제한 1107 초과)

이 블록을 끄면 모든 것이 정상입니다. 내가 어디에서 잘못 되었습니까? 말해 주세요.

다음은 코드 자체입니다.

테스터의 메시지가 코드와 관련이 있을 가능성은 거의 없습니다.

Quotes Archive의 모든 기간을 다시 계산하려면 계속해서 시도하십시오.

메시지에는 1107권이 14시 45분에 도달했다고 나와 있는데, 이는 완전히 불가능하기 때문입니다. 경매는 24시까지 계속됐다.

그러나 이 오류는 완전히 무시할 수 있습니다.

 
Saltan :

포함 파일(*.mqh)을 컴파일하려고 할 때 '\end_of_program' 오류 - 정의된 함수가 표시되지 않습니다. 무엇이 잘못되었으며 어떻게 수정합니까?

extern 이중 랏 = 0.0;
외부 정수 백분율 = 0;
extern int 손절매 = 100;
외부 정수 TakeProfit = 40;
외부 정수 TrailngStop = 100;

정수 레벨_신규;
정수 Level_Old;


그것은 발생합니다 - 그리고 그것은 정상입니다. 예를 들어, 내 include Variables..mqh - 전문가의 외부 및 전역 변수 가 지정되었습니다... 컴파일할 때 '\end_of_program'이라고 표시됩니다. - 정의된 함수가 없습니다. 프로그램에 끝이 없는 것과 같은 함수는 다음과 같습니다. 정의되지는 않았지만 동시에 EA 자체를 컴파일하면 모든 것이 정상입니다. 오류 0개, 경고 0개입니다. (*.mqh) - 별도로 컴파일할 필요가 없습니다. Expert Advisor 자체를 컴파일할 때 컴파일러는 모든 포함을 함께 배치하고 오류가 있는지, 오류가 없는지 등을 결정합니다. :-))) 모든 것이 정상입니다. 자신을 컴파일 해보십시오 ...

추신 다른 인클루드를 컴파일할 때 컴파일러는 일부 전역 변수가 정의되지 않았다고 쓸 수 있습니다. 물론 완전히 다른 인클루드에 채워진 경우에는 정의하지 않아야 합니다. 나는 포함이 배치되는 순서에주의를 기울입니다 ... 변수가 하나에 정의되어 있지만 다른 변수에서 사용되는 경우 첫 번째 포함이 두 번째보다 먼저 텍스트에 배치되어야 합니다. 그렇지 않으면 컴파일 오류가 수신됩니다. 이러한 변수는 정의되지 않으며 일반적으로 모든 전역 변수는 가장 바깥쪽 상자에 정의됩니다. 또는 그가 이러한 변수를 사용하기만 하면 다른 어떤 것으로도 정의할 수 있습니다. 뭐 이런게... 혼돈스럽긴 하지만 분명해야 합니다. 노력하다.

 
DhP :

테스터의 메시지가 코드와 관련이 있을 가능성은 거의 없습니다.

Quotes Archive의 모든 기간을 다시 계산하려면 계속해서 시도하십시오.

메시지에는 1107권이 14시 45분에 도달했다고 나와 있는데, 이는 완전히 불가능하기 때문입니다. 경매는 24시까지 계속됐다.

그러나 이 오류는 완전히 무시할 수 있습니다.

글쎄요, 결국 제가 이 블록을 주석 처리했을 때 테스터에서는 모든 것이 정상이었습니다. 그래서 차단이 잘못된건지...
 
100yan :
질문이 아닙니다... 하지만 코드에서 TF의 현재 값을 결정하는 방법은 무엇입니까?

마침표() 가 도움이 될 것입니다
 
Sergey_Rogozin :

나는 TEXTBOOK의 표지를 모든면에서 보았지만 여전히 아무것도 이해하지 못했습니다 ...))))

어디에서나 그들이 다음과 같이 쓰는 것을 볼 수 있습니다.

추가 처리 및 Stop 설정을 위해 Price = OrderOpenPrice() 를 얻으려면 아래 철자가 정확합니까?

그것은 나를 위해 작동하지만 받아 들일 수 있습니까?

귀하의 라인은 첫 번째 라인과 동일합니다.

따라서 미결제 주문에 대한 모든 정보를 얻을 수 있으며,

단, 개봉 확정 시점에는 단 한 번.

보다 https://docs.mql4.com/en/trading/OrderSend

 
Noterday :
글쎄요, 결국 제가 이 블록을 주석 처리했을 때 테스터에서는 모든 것이 정상이었습니다. 그래서 차단이 잘못된건지...
     double DistanceToHighDay = MathAbs (HighDay-Ask)* 10000 ;
     double DistanceToLowDay  = MathAbs (Bid-LowDay)* 10000 ;

대부분의 경우 볼륨 측면에서 분과 일치하지 않는 그날의 데이터에 대한 액세스로 인해,

테스터는 이에 대해 경고합니다.
 
HighDay, LowDay 변수는 이 블록 뿐만 아니라 프로그램의 다른 곳에서도 사용하기 때문에 아무 상관이 없다고 생각합니다. 그리고 그 블록의 알고리즘이 올바르게 작성되었다고 생각하십니까?
 

어쩌면 누군가가 더 잘 할 수 있습니까?

1. 스탑은 매도 포지션으로 당일 고점에 놓입니다.

2. 다음으로, 현재 가격 에서 당일 고가까지의 거리를 포인트 단위로 계산합니다.

3. 이 거리가 0.1랏으로 $로 얼마인지 계산하고 보증금의 %로 얼마인지 계산합니다. 5% 미만이면 0.2로트 등으로 계산합니다. 5%를 초과할 때까지.

그러면 이것이 필요한 로트 크기가 됩니다.

어떤 이유로 내 코드가 작동하지 않습니다... 모든 것이 올바르게 작성된 것처럼 보이지만.

 

누가 알아?

"이전 지표 데이터"에 적용하는 Bollinger에 프로그래밍 방식으로 적용하는 방법은 무엇입니까? apply_price 필드에 무엇을 넣을까요?

고맙습니다

 

모두에게 좋은 하루. 질문: CheckEvents를 강제 실행하는 방법은 무엇입니까? 이벤트 파일(Komposter 제공)은 포함 디렉토리에 있습니다. EventsExpert.mq4에 예가 있습니다.

CheckEvents( MagicNumber );

         if ( eventBuyClosed_SL > 0 )
                 Alert ( Symbol (), ": Buy-позиция закрыта по СтопЛоссу!" );

하지만 경고는 필요하지 않습니다. StopLoss로 시장가 주문을 마감할 때 보류 중인 주문을 삭제해야 합니다.

CheckEvents( Magic== 0 );
    
   if (eventBuyClosed_SL > 0 )
   ??????????? 
        
   DELETE( "Buy Stop" );

경고 대신 무엇을 처방해야 합니까? 물론 이 기능이 이 작업에 적합하다면.