mql5 - 마지막 거래 이후 일정 시간 후 수직선 - 페이지 2

 
Vladimir Karputov :

"마지막 거래"라는 용어를 명확히 하고 싶습니다.

현재 날짜 내의 마지막 거래를 찾아야 합니까? 아니면 지난 N일 동안?

마지막 24시간 내 거래 - 역사를 살펴볼 필요가 없습니다.

 
renatmt5 :

마지막 24시간 내 거래 - 역사를 살펴볼 필요가 없습니다.

다음과 같은 의미입니다.

표시기는 OBJ_VLINE 도움말에서 수직선을 생성, 이동 및 삭제하는 코드를 사용합니다. (지금까지는 표시기에서 선 생성만 작동함). 라인 이름은 입력 매개변수 " Vertical line name "에 지정됩니다.

마지막 거래 수직선 이동

수직선은 OnOnit()에서 생성됩니다 .

 //+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   VLineCreate( 0 ,InpVLineName);
//---
   return ( INIT_SUCCEEDED );
  }


부하를 최소화하기 위해 1분에 한 번씩 스토리를 폴링합니다. 이러한 목적을 위해 우리 프로그램의 전역 변수 영역(이 경우 표시기)에서 변수 ExtLastMove 를 선언합니다.

 //---
datetime ExtLastMove= 0 ;                   // "0" -> D'1970.01.01 00:00';

- 이 변수는 거래 내역에 대한 마지막 액세스 시간을 저장합니다.


OnCalculate()에서 현재 시간(모든 기호 TimeCurrent 에 대한 마지막 인용 시간)에서 저장된 ExtLastMove 시간을 빼고 차이가 60초 미만인 경우 종료 합니다.

 //---
   datetime time_current= TimeCurrent ();
   if (time_current-ExtLastMove< 60 ) // 60 seconds
       return (rates_total);
   ExtLastMove=time_current;

차이가 더 크면 ExtLastMove새 시간 을 씁니다.


거래 내역은 LastProfitForPeriod()에서 액세스할 수 있습니다.

여기에는 from과 to의 두 가지 날짜가 사용됩니다. "To"는 미래(현재 시간 + 1일)로 설정 되고 " from"은 현재 시간에서 하루를 뺀 값입니다.

   datetime from_date   = time_current- 60 * 60 * 24 ;   // time one day ago
   datetime to_date     = time_current+ 60 * 60 * 24 ;   // time from the future :)
   double    last_profit = LastProfitForPeriod(from_date,to_date);

   Comment ( "Last profit: " , DoubleToString (last_profit, 2 ));


지금은 그게 다야, 너무 많은 bukoffs...

 
Vladimir, 코드와 특히 코드 조각에 대한 의견에 감사드립니다!
나는 왜 우리가 미래를 노크하는 것과 같은 날짜를 사용해야 하는지 이해하지 못했습니다. 아마도 지금까지? 미래 에는 거래의 결과 가 결정되지 않는 것 같습니다 :) 아니면 미래 시제로 선을 긋기 위해 미래에 요즘이 필요한가요?
시리즈의 또 다른 질문입니다.
내가 이해하는 한, 우리는 거래에 대한 데이터로 배열을 로드하고 0 거래에서 마지막 거래까지 배열을 반복하면서 시간을 기록된 마지막 기록과 비교하고 deal_time이 나중이면 last_time 변수를 덮어씁니다. 아니면 끝에서 배열을 반복할 수 있습니까? 사실, 배열의 맨 마지막 요소는 우리가 데이터를 필요로 하는 마지막으로 마감된 거래가 될 것입니까?
아마도 논리적 오류가 있을 수 있습니다. 엄격하게 판단하지 마십시오. :)
 
for(uint i=0;i<total;i++)를 의미함 for(uint i=total;i>=0;i--)
 
그러나 일반적으로 사이클은 필요하지 않습니다. - 일련 번호 i=total 아래의 배열 요소로 즉시 전환합니다.
 
나는 왜 우리가 미래를 노크하는 것과 같은 날짜를 사용해야 하는지 이해하지 못했습니다.

그래서 필요합니다. 현재 시간 과 그 이전에 "from"을 얻도록 보장합니다.

아니면 끝에서 배열을 반복할 수 있습니까?

작업이 마지막 거래를 찾는 것이라면 어레이를 정렬하고 정확한 시간을 검색해야 합니다. 어떤 일이 일어날지 또는 코어의 내부 논리가 변경될지 절대 알 수 없으며 거래가 순서를 벗어나게 될 것입니다.

 
Vladimir Karputov :

그래서 필요합니다.현재 시간 과 그 이전에 "from"을 얻도록 보장합니다.

작업이 마지막 거래를 찾는 것이라면 어레이를 정렬하고 정확한 시간을 검색해야 합니다. 어떤 일이 일어날지 또는 코어의 내부 논리가 변경될지 절대 알 수 없으며 거래가 순서를 벗어나게 될 것입니다.

알겠습니다. 원칙적으로 24시간의 이력 제한을 고려하면 데이터를 정렬할 때 큰 로드는 분명히 없을 것입니다. :)

 
renatmt5 :

알겠습니다. 원칙적으로 24시간의 이력 제한을 고려하면 데이터를 정렬할 때 큰 로드는 분명히 없을 것입니다. :)

따라서 최종 터치가 남아 있습니다.받은 이익에 따라 라인을 이동하십시오.

이동 규칙이 무엇인지 상기시켜 주나요?

 
나는 last_time과 result 변수가 우리가 작업하고 있는 원하는 값이라는 것을 올바르게 이해했습니다. 그리고 결과 이름은 선이 미래로 이동(다시 그리기)되는 기간을 결정합니다. 그런 다음 마지막 거래에서 받은 데이터를 이미 고려하여 라인을 이동하려면 " 기간 동안 의 이익" 코드 블록을 "수직 라인 이동" 블록 앞에 배치해야 합니다.
이것이 맞습니까? 아니면 내가 뭔가를 혼동하고 있습니까?
 

여기에서 "before" 매개변수가 미래에 수행되어야 하는 이유에 대한 설명을 찾았습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

레나트 팻쿨린 , 2016.11.04 12:43

TimeCurrent()를 종료 날짜로 사용하지 마십시오. 모든 종료 거래가 캡처되도록 TimeCurrent()+86400을 사용하십시오.

TimeCurrent는 정확한 최신 시간이 아니라 "업데이트 중 마지막으로 알려진 서버 시간"으로 100% 정확한 시간이 아닙니다. 특히 초반에는요.