Rosh, USDCHF 막대가 나중에 시작된다는 사실 때문에 오류가 발생하는지 이해하려고 합니다. 이를 추적하기 위해 MA를 제거하고(방해만 됨) Close[1] 및 Open[1]을 추가로 도입했습니다. 즉, Open[1]이 항상 정확하며 이것이 문제인 경우 불일치는 Open[1]이 아니라 Open[0]에 있습니다. 지금 확인 중입니다. 내가 놓친 게 무엇입니까?
글쎄, 나는 GBPJPY에 새로운 막대 가 나타나는 순간 이전의 변경되지 않은 USDCHF 차트 데이터를 참조하고 따라서 알고리즘이 비뚤어지게 계산한다는 것을 보여주는 2개의 사진을 붙였습니다. 네이티브 "차트"에 걸면 한 가지 경우에만 올바르게 계산되지만 작업은 그 반대입니다.
그러나 그것은 모두 MT가 IndicatorCounted를 계산하는 방법에 달려 있습니다. 틱 도착 시간까지 - 작동하지 않을 경우, 막대를 다시 그리는 경우 - 작동할 것입니다. 우리는 볼 것이다.
그만, 그만. 여기에 다음과 같이 씁니다.
코드에서 볼 수 있듯이 지표는 차트에 첨부된 통화에 의존하지 않습니다. 항상 USDCHF에서 작동합니다. 제 경우에는 AUDUSD와 EURUSD 라는 두 개의 차트에 지표를 첨부 했지만 어느 쪽이든 가능하다고 생각합니다. 우리는 며칠 동안 떠납니다. 그리고 우리는 그래프가 다르다는 것을 알 수 있습니다. 같은 지표. 실시간. 같은 MT. 우리는 강제로 다시 그립니다(후크 해제 - 부착) - 그들은 동일해집니다. 몇 시간 동안.
즉, 우리는 온라인 작업에 대해 이야기하고 있으며 이제 테스터로 뛰어 들었습니다. 난 할 수 없어.
친애하는 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) 세로선으로 아무리 강조를 해도 잘 안되네요.
또한 문제는 한계를 우회하는 방법을 찾는 것입니다. 예를 들어 USDCHF의 데이터가 나타날 때까지 지표가 EURUSD에서 다시 그리는 것을 방지합니다. 현재 테스트 중입니다
그러나 그것은 모두 MT가 IndicatorCounted를 계산하는 방법에 달려 있습니다. 틱 도착 시간까지 - 작동하지 않을 경우, 막대를 다시 그리는 경우 - 작동할 것입니다. 우리는 볼 것이다.
오픈[1] EURUSD H1 은 1.2755와 같습니다.
열기[1] USDCHF H1은 1.2443과 같습니다.
Frank에 따르면 Evre 에는 새로운 시계 표시줄이 있습니다. 아직 변경된 사항은 없습니다. 당신의 알고리즘은 무엇을 할 것인가?
또한 문제는 한계를 우회하는 방법을 찾는 것입니다. 예를 들어 USDCHF의 데이터가 나타날 때까지 지표가 EURUSD에서 다시 그리는 것을 방지합니다. 현재 테스트 중입니다
그러나 그것은 모두 MT가 IndicatorCounted를 계산하는 방법에 달려 있습니다. 틱 도착 시간까지 - 작동하지 않을 경우, 막대를 다시 그리는 경우 - 작동할 것입니다. 우리는 볼 것이다.
그만, 그만. 여기에 다음과 같이 씁니다.
즉, 우리는 온라인 작업에 대해 이야기하고 있으며 이제 테스터로 뛰어 들었습니다. 난 할 수 없어.
오픈[1] EURUSD H1은 1.2755와 같습니다.
열기[1] USDCHF H1은 1.2443과 같습니다.
Frank에 따르면 Evre 에는 새로운 시계 표시줄이 있습니다. 아직 아무것도 변경되지 않았습니다 . 당신의 알고리즘은 무엇을 할 것인가?
그래, 너가 맞아. 번호가 아닌 막대의 시간을 볼 필요가 있습니다.
즉, 우리는 온라인 작업에 대해 이야기하고 있으며 이제 테스터로 뛰어 들었습니다. 난 할 수 없어.
테스터가 없습니다. 온라인에서만 가능합니다.
다음은 편집한 표시기입니다. 어느 것이 빠지는지 확인하기 위해 막대 목록의 두 번째 파일에 출력했습니다.
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) 세로선으로 아무리 강조를 해도 잘 안되네요.