포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 364

 
bercut0077 :
좋은 오후입니다. 표시기가 있지만 테스터에서 예를 들어 연초부터 3월까지 일정 기간이 지나면 작동하다가 신호 제공을 중지하지만 장기간(AuthorizedSSBODynamicBreakoutBoxFinalEdition) 테스트해야 합니다. 이 제한 사항은 코드에서 꿰맬 수 있습니다. 최소한 팁이 어디 있는지 알려주십시오. 어떤 연산자가 정의합니까?
그는 때때로 결함이 있습니다. 상자 그리기를 중지합니다. 제한은 어디에도 없습니다. 틱별로 틱을 테스트합니다. 때로는 도움이 됩니다.
 
Sepulca :
표시기의 소스 코드가 있습니까? 그렇지 않은 경우 저자를 찾으십시오))))

나는 출처를 가지고 있습니다. 거기에서 악마가 다리를 부러 뜨릴 것입니다.
 
아니, 시도조차 하지 않을 것이다. 여기에서 때때로 다른 사람의 코드는 말할 것도 없고 코드에서 길을 잃기도 합니다.))))
 

MQL4 및 5에 대해 검증된 전문가 생성자를 알려주십시오. 그렇지 않으면 시간이 거의 없습니다. 때로는 하나의 아이디어를 확인하거나 누군가를 도와야 하고, 마침내 로봇의 기초를 만들고 직접 추가해야 합니다...

감사합니다, 미리 감사드립니다! =)

 
vadynik :

나는 함수를 쓴다

그러나 OrderOpenPrice () 가 반올림된 가격을 소수점 이하 네 자리 다섯 자리까지 반환하는 이유는 무엇입니까?


 int i, k= OrdersTotal ();

   for (i=k- 1 ; i>= 0 ; i--) 
   {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
     {                
       if (( OrderType ()== OP_BUY )&&( OrderOpenPrice ()>= Ask - 350 * Point )&&( OrderMagicNumber ()==Magic)||( OrderType ()== OP_BUY )&&( OrderOpenPrice ()<= Ask + 250 * Point )&&( OrderMagicNumber ()==Magic))
         {
           double o= OrderOpenPrice ();
           Print (o);
           OrderClose ( OrderTicket (), OrderLots (), Bid , 50 ,Blue); 
         
      }
    }
  }
이것을 시도하고 OrderOpenPrice ()가 실제로 반환하는 것을 확인하십시오. 아마도 그 이유는 Digits 매개변수를 사용하여 함수를 정규화 하고 인쇄물에서 실제가 아닌 것을 볼 수 있기 때문일 수 있습니다.
 
vadynik :

나는 함수를 쓴다

그러나 OrderOpenPrice () 가 반올림된 가격을 소수점 이하 네 자리 다섯 자리까지 반환하는 이유는 무엇입니까?

Print는 반올림된 가격을 반환하지 않으며 이 경우 기본 소수점 이하 자릿수만 인쇄합니다.
일반적으로 모든 것이 정확하고 forex는 Digits 보다 낮은 소수점 이하 자릿수에서는 작동하지 않습니다. 일반적으로 EURSD의 예에 들어가면 일반적으로 소수점 이하 네 자리에 불과하며 소수점 이하 다섯 번째 자리도 의 개념입니다. DC.

그러나 귀하의 경우에는 다음과 같이 하는 것이 좋습니다. Print(DoubleToStr(OrderOpenPrice(),Digits));

 
Ekburg :

이것을 시도하고 OrderOpenPrice ()가 실제로 반환하는 것을 확인하십시오. 아마도 그 이유는 Digits 매개변수를 사용하여 함수를 정규화 하고 인쇄물에서 실제가 아닌 것을 볼 수 있기 때문일 수 있습니다.

정규화 없이는 동일 합니다. 개시 가격 에서 포인트를 빼야 합니다. 그렇다면 가격은 올바른 가격으로 작성되지만 IF에는 유형 불일치가 있습니다(
 Print ( DoubleToStr ( OrderOpenPrice (), Digits ));
 
vadynik :

정규화 없이는 동일합니다. 개시 가격에서 포인트를 빼야 합니다. 그렇다면 가격은 올바른 가격으로 작성되지만 IF에는 유형 불일치가 있습니다(

4자에 대해 계산하고 정확성이 중요하다면 계산하십시오. 그런 다음 계산의 세부 사항으로 인해 계산 중에 변경되지 않기 때문에 이전의 마지막 문자 값과 함께 해당 위치로 되돌립니다.
 
Ekburg :

4자에 대해 계산하고 정확성이 중요하다면 계산하십시오. 그런 다음 계산의 세부 사항으로 인해 계산 중에 변경되지 않기 때문에 이전의 마지막 문자 값과 함께 해당 위치로 되돌립니다.
정규화는 Ordersend, orderclose 등에서만 필요합니다. 글쎄, 인쇄물에서 실제 값을 비교할 때 소수점 이하 자릿수를 표시하십시오 . 그러나 Print(some_double_value) 를 쓰면 원칙적으로 소수점 이하 네 자리가 표시됩니다. 그러므로 쓰는 것이 좋다.
 Print ( DoubleToStr ( OrderOpenPrice (), Digits ));

이미 언급했듯이 I. 먼저 double을 주어진 소수점 이하 자릿수가 있는 문자열로 변환한 다음 Print....를 사용하여 로그에 출력합니다.
 
그리고 포인트가 계산되면 포인트와 혼동하지 마십시오. SPREAD=Ask-Bid 포인트를 두 배로 늘리거나 SPREAD=(Ask-Bid)/Point 포인트를 두 배라고 가정해 보겠습니다.