여기서는 대략 다음과 같이 - https://www.mql5.com/ko/code/183. 요점은 다른 심볼의 데이터 복사가 한 번에 모두 수행되는 것이 아니라 한 번에 한 막대씩 수행된다는 것입니다. 이러한 복사 중에 다른 기호에서 막대는 표시기가 표시되는 차트 막대의 시간과 정확히 일치하는 막대가 복사됩니다. 해당 막대가 없는 경우 이전 막대에서 복사합니다(예: MQL4의 iBarShift() 함수). 이 인디케이터에서는 한 번에 하나의 막대가 복사되지만 상관 관계의 경우 상관 관계 기간에 해당하는 숫자를 복사해야 할 수도 있습니다. 한 번에 하나의 막대를 복사하여 인디케이터 버퍼에 넣는 다른 방법을 사용할 수 있습니다. 버퍼를 사용하면 가능한 한 빨리 모든 작업을 수행할 수 있습니다(물론 메모리를 더 많이 사용해야 하지만). 몇 가지 정적 변수를 사용하여 추가 버퍼 없이도 할 수 있습니다.... 설명이 길어 아마 기사를 써야 할 것 같습니다:)
double GetPrice( string Symb, int time )
{
double Price;
Price = iClose(Symb, Period(), iBarShift(Symb, Period(), time));
return(Price);
}
int GetNextTime( int CurrTime )
{
staticint Pos[TWO_SYMBOLS];
int i, MinTime, Tmp = -1;
for (i = 0; i < TWO_SYMBOLS; i++)
{
Pos[i] = iBarShift(Symbols[i], Period(), CurrTime) - 1;
if (Pos[i] >= 0)
Tmp = i;
}
if (Tmp < 0)
return(Time[0]);
MinTime = iTime(Symbols[Tmp], Period(), Pos[Tmp]);
i = Tmp - 1;
while (i >= 0)
{
if (Pos[i] >= 0)
{
Tmp = iTime(Symbols[i], Period(), Pos[i]);
if (Tmp < MinTime)
MinTime = Tmp;
}
i--;
}
return(MinTime);
}
void GetBaseMatrix()
{
int i, NextTime;
NextTime = GetNextTime(CurrTime);
while (NextTime < Time[0])
{
CurrTime = NextTime;
for (i = 0; i < TWO_SYMBOLS; i++)
BaseMatrix[i][MatrixRows + Shifts[i]] = MathLog(GetPrice(Symbols[i], CurrTime));
Times[MatrixRows] = CurrTime;
MatrixRows++;
NextTime = GetNextTime(CurrTime);
}
return;
}
즉, 모든 것이 아주 간단합니다. 또 다른 한 가지는 가격 BP의 고전적인 기압(상수 시간 이산화) 표현이 유일한 것은 아니며 항상 정확하지는 않다는 것입니다. 때로는 다른 시간 차원의 가격 BP를 동기화하는 것이 매우 유용할 때가 있습니다. 즉, 고전적 시간의 관점에서 비선형적인 왜곡을 도입하는 것입니다. 이에 따라 상관관계는 두 고전적 VR의 비선형적 상호관계를 보여줍니다.
각 지표에 대한 알고리즘 최적화는 다릅니다. 예를 들어 상관 관계를 사용하는 다양한 방법에 대해 저는 이것과이것을했습니다.
전체 기록에 대해 미리 계산된 지표 값을 메모리에서 읽는 것은 제 계산기에서만 수행되었습니다. 즉, 나는 전혀 아름답 지 않은 내 자신의 솔루션 만 사용하기 때문에 보편적 인 메커니즘이 없습니다. 그러나 나는 모든 것을 개선하기위한 것이기 때문에 MT5 테스터의 최적화 프로그램의 경우 몇 배의 가속 (내 계산기에서 사용한 경험), 즉 효율성 측면에서 Cloud를 능가하기 때문에 이러한 보편적 인 메커니즘을 갖는 것이 좋을 것입니다.
좋아요, 어제 우리는 조금 흥분했고, 당신도 저처럼 "국경수비대의 날"을 축하한 것 같아요.
저도 마지막 바에 의해 동기화되는 이 방법을 사용하기 때문에 올바른 바 동기화에 대한 링크를 알려주시겠습니까?
아직 만나지 못했기 때문에 링크를 제공하지는 않겠지만 방법을 설명하겠습니다.
이 방법은 다른 TF의 동기화에도 사용할 수 있지만 다른 기기의 동기화에 관한 것입니다.
저는이 문제를 꽤 오랫동안 다루어 왔으며 SD조차도 제가 확인한이 방법의 버그에 대한 버그 수정을했습니다.
동기화 문제는 악기마다 막대 수가 다르다는 사실과 관련이 있습니다. 거의 동일하다는 것은 잘못된 기준이며 모든 것이 정확해야합니다. 바에서 바까지. 그렇지 않으면 동기화의 의미가 사라집니다.
이 문제의 두 번째 측면은 현재 상품에 막대가 없는 경우 막대를 표시하는 방법입니다.
이 방법의 본질은 간단합니다. 기기의 데이터는 시간별로 엄격하게 요청됩니다.
시간 샘플은 인디케이터 시간[]의 표준 버퍼에서 가져옵니다. 따라서 항상 다른 상품의 막대와 동시에 나온 막대를 마주하고 있다는 것을 확실히 알 수 있습니다.
다시 말하지만, 현재 상품에 해당 막대가 없으면 요청하지 않습니다. 그리고 요청된 상품에 샘플과 같은 막대가 없는 경우 카운트에 0이 표시되며 프로그램 논리에 따라 이 예외를 정상적으로 처리할 수 있습니다.
(여기에서) 임의의 수의 FI에 대한 동기화 구현(MQL4에서):
두 개의 기호에 대한 유추(여기에서):
즉, 모든 것이 아주 간단합니다. 또 다른 한 가지는 가격 BP의 고전적인 기압(상수 시간 이산화) 표현이 유일한 것은 아니며 항상 정확하지는 않다는 것입니다. 때로는 다른 시간 차원의 가격 BP를 동기화하는 것이 매우 유용할 때가 있습니다. 즉, 고전적 시간의 관점에서 비선형적인 왜곡을 도입하는 것입니다. 이에 따라 상관관계는 두 고전적 VR의 비선형적 상호관계를 보여줍니다.도와주셔서 감사합니다!
동기화가 그렇게 복잡하다고 생각하지 못했습니다.
나는 그것을 알아 내고이 표시기에서 직접 막대를 동기화하려고 노력할 것입니다.
정보를 제공해 주셔서 감사합니다!
표시기를 약간 수정했습니다. 이제 역사의 나쁜 부분은 건너뛸 수 있을 것입니다.
이제 시작했으니 오류를 확인해 주세요 :)
모든 지표에 대한 알고리즘 최적화의 필요성에 대해 다시 한 번 말씀드리겠습니다. 또한 메모리 (파일)에서 지표 값을 계산하는 내장 메커니즘을 통해 테스터 최적화 중에 지표가 동일한 것을 계산하지 않고 거기에서 기성품 값을 가져옵니다.
각 지표에 대한 알고리즘 최적화는 다릅니다. 예를 들어 상관 관계를 사용하는 다양한 방법에 대해 저는 이것과 이것을했습니다.
전체 기록에 대해 미리 계산된 지표 값을 메모리에서 읽는 것은 제 계산기에서만 수행되었습니다. 즉, 나는 전혀 아름답 지 않은 내 자신의 솔루션 만 사용하기 때문에 보편적 인 메커니즘이 없습니다. 그러나 나는 모든 것을 개선하기위한 것이기 때문에 MT5 테스터의 최적화 프로그램의 경우 몇 배의 가속 (내 계산기에서 사용한 경험), 즉 효율성 측면에서 Cloud를 능가하기 때문에 이러한 보편적 인 메커니즘을 갖는 것이 좋을 것입니다.
안녕하세요
때때로 저는 다른 사람의 코드를 왜곡하는 데 시간을 보냅니다. 일반적으로 시간 부족과 기술 부족으로 인해 불완전하거나 불완전한 프로그램의 결과입니다.
이번에는이 멋진 지표를 왜곡하려고 시도하고 다음과 같이 시도했습니다 :
- 점선이 아닌 선만 그리기
- 다음과 같은 많은 기호를 추가하려면
- 시각적 변형: 각 통화쌍 상관관계에 대한 컬러 선 7개의 선의 평균인 굵은 선 1개((A+B+C+D+E+F+G)/7)
- 시각적 변형 없음: 위 공식의 결과인 1줄만 ((A+B+C+D+D+E+F+G)/7)
원래 상관관계 표시기를 7개(또는 8개) 추가하는 것과 거의 비슷하지만 모두 합산하여 7줄 + 1(평균) 버전과 1줄(평균만)인 다른 버전과 같이 평균만 합산합니다.
이런 식으로요:
여러 가지 이유로 왜곡된 코드가 완전히 논리적인 오류로 인해 원하는 작업을 수행하지 못합니다.
주된 문제는 코드의 버퍼, 동기화 및 재귀 들여쓰기 부분입니다:
if(bars1>bars2) { minBars=bars2; bars2=bars1-bars2; etc...+ 및 기타 논리적 오류입니다.
변수 값을 추적하는 경우에 도움이 되도록 일부 Print() 함수를 추가하고 코드가 논리적으로 실패하는 부분을 찾기 위해 반환 0 명령어를 주석 처리했습니다.
코드 및 파일