기준 지표를 다시 그리다?! - 페이지 3

 
Rosh, USDCHF 막대가 나중에 시작된다는 사실 때문에 오류가 발생하는지 이해하려고 합니다. 이를 추적하기 위해 MA를 제거하고(방해만 됨) Close[1] 및 Open[1]을 추가로 도입했습니다. 즉, Open[1]이 항상 정확하며 이것이 문제인 경우 불일치는 Open[1]이 아니라 Open[0]에 있습니다. 지금 확인 중입니다. 내가 놓친 게 무엇입니까?
 
글쎄, 나는 GBPJPY에 새로운 막대 가 나타나는 순간 이전의 변경되지 않은 USDCHF 차트 데이터를 참조하고 따라서 알고리즘이 비뚤어지게 계산한다는 것을 보여주는 2개의 사진을 붙였습니다. 네이티브 "차트"에 걸면 한 가지 경우에만 올바르게 계산되지만 작업은 그 반대입니다.
 
동의한다. 그러나 Open[1]을 사용한 테스트에서 오류가 발생하지 않는 것으로 나타나는 경우에만. 이 경우 예, MT에 버그가 없음을 확신합니다. 약간 ... 과묵하거나 뭔가가 있습니다.

또한 문제는 한계를 우회하는 방법을 찾는 것입니다. 예를 들어 USDCHF의 데이터가 나타날 때까지 지표가 EURUSD에서 다시 그리는 것을 방지합니다. 현재 테스트 중입니다

동안(nPos > 1 || (nPos == 1 && 시간[0] <= iTime("USDCHF", 0, 0)))



그러나 그것은 모두 MT가 IndicatorCounted를 계산하는 방법에 달려 있습니다. 틱 도착 시간까지 - 작동하지 않을 경우, 막대를 다시 그리는 경우 - 작동할 것입니다. 우리는 볼 것이다.

 
현재 시간은 모스크바 시간 11-56 또는 서버 시간 9-56입니다.
오픈[1] EURUSD H1 은 1.2755와 같습니다.
열기[1] USDCHF H1은 1.2443과 같습니다.

Frank에 따르면 Evre 에는 새로운 시계 표시줄이 있습니다. 아직 변경된 사항은 없습니다. 당신의 알고리즘은 무엇을 할 것인가?
 
동의한다. 그러나 Open[1]을 사용한 тестирование 에서 오류가 발생하지 않는 것으로 나타나는 경우에만. 이 경우 예, MT에 버그가 없다고 확신합니다. 약간 ... 과묵하거나 뭔가가 있습니다.

또한 문제는 한계를 우회하는 방법을 찾는 것입니다. 예를 들어 USDCHF의 데이터가 나타날 때까지 지표가 EURUSD에서 다시 그리는 것을 방지합니다. 현재 테스트 중입니다

동안(nPos > 1 || (nPos == 1 && 시간[0] <= iTime("USDCHF", 0, 0)))



그러나 그것은 모두 MT가 IndicatorCounted를 계산하는 방법에 달려 있습니다. 틱 도착 시간까지 - 작동하지 않을 경우, 막대를 다시 그리는 경우 - 작동할 것입니다. 우리는 볼 것이다.




그만, 그만. 여기에 다음과 같이 씁니다.
코드에서 볼 수 있듯이 지표는 차트에 첨부된 통화에 의존하지 않습니다. 항상 USDCHF에서 작동합니다. 제 경우에는 AUDUSD와 EURUSD 라는 두 개의 차트에 지표를 첨부 했지만 어느 쪽이든 가능하다고 생각합니다. 우리는 며칠 동안 떠납니다. 그리고 우리는 그래프가 다르다는 것을 알 수 있습니다. 같은 지표. 실시간. 같은 MT. 우리는 강제로 다시 그립니다(후크 해제 - 부착) - 그들은 동일해집니다. 몇 시간 동안.

즉, 우리는 온라인 작업에 대해 이야기하고 있으며 이제 테스터로 뛰어 들었습니다. 난 할 수 없어.
 
현재 시간은 모스크바 시간 11-56 또는 서버 시간 9-56입니다.
오픈[1] EURUSD H1은 1.2755와 같습니다.
열기[1] USDCHF H1은 1.2443과 같습니다.

Frank에 따르면 Evre 에는 새로운 시계 표시줄이 있습니다. 아직 아무것도 변경되지 않았습니다 . 당신의 알고리즘은 무엇을 할 것인가?



그래, 너가 맞아. 번호가 아닌 막대의 시간을 볼 필요가 있습니다.
 

즉, 우리는 온라인 작업에 대해 이야기하고 있으며 이제 테스터로 뛰어 들었습니다. 난 할 수 없어.


테스터가 없습니다. 온라인에서만 가능합니다.
 
삭제
 
친애하는 Rosh, 다음 상황이 어떻게 가능한지 설명해 주시겠습니까?
다음은 편집한 표시기입니다. 어느 것이 빠지는지 확인하기 위해 막대 목록의 두 번째 파일에 출력했습니다.

//+------------------------------------------------------------------+
//|                                             RedrawIndicators.mq4 |
//|                                                           Satori |
//|                             http://www.metaquotes.ru/forum/7790/ |
//+------------------------------------------------------------------+
#property copyright "Satori"
#property link      "http://www.metaquotes.ru/forum/7790/"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
extern int       BarsCount=0;   //кол-во считаемых баров, если 0 - то все
extern string    Currency1="EURUSD";
extern string    Currency2="GBPUSD";

int handle,handle2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexLabel(0,Currency1);

   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexLabel(1,Currency2);

   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);

   handle= FileOpen("TestFile.csv",FILE_CSV|FILE_WRITE,';');
   handle2= FileOpen("TestFile2.csv",FILE_CSV|FILE_WRITE,';');
  if(handle<1 || handle2<1 )
   {
    Print("Файл не обнаружен, последняя ошибка ", GetLastError());
    return(false);
   }
   else
   {
   FileWrite (handle,"index",Symbol(),"index",Currency1,"index",Currency2);
   FileWrite (handle2,"index",Currency1,Currency2,Symbol());
   }

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   FileClose(handle);
   FileClose(handle2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int i;
   int test1,test2;
   datetime tt1,tt2,TimeMain;
   BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period()))));
   Print (Bars," ",iBars(Currency1,Period())," ",iBars(Currency2,Period()));
   Print (BarsCount);
   
   for (i=0;i<BarsCount-counted_bars;i++)
      {
       TimeMain=Time[i];
       test1=iBarShift(Currency1,Period(),TimeMain);
       test2=iBarShift(Currency2,Period(),TimeMain);
       
       ExtMapBuffer1[i]=iTime(Currency1,Period(),test1);
       ExtMapBuffer2[i]=iTime(Currency2,Period(),test2);

       ExtMapBuffer3[i]=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);
       tt1=Time[i]-ExtMapBuffer1[i];
       tt2=Time[i]-ExtMapBuffer2[i];
       if (ExtMapBuffer3[i]!=0 || tt1!=0 || tt2!=0) 
         {
         if (FileWrite (handle,
         i,TimeToStr(Time[i]),iBarShift(Currency1,Period(),TimeMain),TimeToStr(ExtMapBuffer1[i]),iBarShift(Currency2,Period(),TimeMain),TimeToStr(ExtMapBuffer2[i])
          )<=0) Print("нифига не пишет!!");
         }
        FileFlush(handle);
        if (FileWrite (handle2,i,
         TimeToStr(iTime(Currency1,Period(),test1)),
         TimeToStr(iTime(Currency2,Period(),test2)),
         TimeToStr(Time[i])
          )<=0) Print("нифига не пишет!!");
        FileFlush(handle2);

      }//----
   return(0);
  }
//+------------------------------------------------------------------+



Alpari(MIG, FIBO)가 아닌 다른 두 DC의 견적에 EURGBP 4H에서 실행합니다.
두 그림 모두 거의 동일합니다. MIG'에서 예를 보여 드리겠습니다.
지수 EURGBP 지수 EURUSD 지수 GBPUSD
2006년 10월 15일 0:00 AM 2006년 10월 29일 11:00 PM 2006년 10월 29일 11:00 PM
46 23.10.2006 0:00 47 22.10.2006 23:00 47 2006.10.22 23:00
77 2006년 10월 16일 0:00 78 2006년 10월 15일 23:00 78 2006년 10월 15일 23:00
108 09.10.2006 0:00 109 08.10.2006 23:00 109 08.10.2006 23:00
139 02.10.2006 0:00 139 02.10.2006 0:00 140 01.10.2006 23:00

예를 들어 46-47 바
두 번째 파일에서:
45 2006년 10월 23일 4:00 2006년 10월 23일 4:00 2006년 10월 23일 4:00
46 2006년 2월 10일 23:00 2006년 10월 22일 23:00 2006년 10월 23일 0:00
47 2006.10.22 23:00 2006.10.22 23:00 2006.10.22 23:00
48 2006.10.20 20:00 2006.10.20 20:00 2006.10.20 20:00

모든 것이 괜찮은 것 같습니다... 그러나 그것은 문제가 아닙니다. 막대 10/23/2006 00:00은 세 통화 모두의 역사에 존재합니다! 저것들. 차트에도 있고 시세 아카이브에도 있습니다.
그러나 지표에는 없는 것으로 보인다.
마지막으로 트릭 - 이 막대에 수직선 을 넣으려고 하면 다음 막대로 이동합니다. :o) 세로선으로 아무리 강조를 해도 잘 안되네요.



 
그림의 형태로 복잡하게 만들지 않겠습니까? 스크린샷. 마음에 열을 배열하는 것은 어렵습니다.