Solomon
Active Member
- 282
- 295
Mình đang viết code xác định High và Low của 1 cấu trúc và lưu vào Array. Có đoạn code xác định như sau hình như sử dụng trên MQL5, đọc hoài mà không hiểu được cái logic của nó là ntn. Nhờ các bác giúp đỡ giải ngố giúp ạ. Em cảm ơn.
int LocalExtremeBar(int length, int Start, double d){ // d=direction= +1 or -1
if (d > 0) return( LocalExtremeArray(High, length, Start, d) );
return( LocalExtremeArray(Low, length, Start, d) );
}
int LocalExtremeArray(double arr[], int length, int iStart, double d){
while(true){
int iPrev = iStart; iStart = ArrayExtrema(arr, length, iStart, d);
if (iStart == iPrev) return iStart;
}
//NOTREACHED
}
int ArrayExtrema(double arr[], int length, int iStart, double d){
int iExtreme = iStart; double value = arr[iExtreme];
int iLimit = MathMin(iStart + length, ArraySize(arr));
for(iStart++; iStart<iLimit; iStart++) if((arr[iStart]-value) *d>= 0.){
iExtreme = iStart; value = arr[iExtreme]; } // largest index (>=)
return iExtreme;
}
int LocalExtremeBar(int length, int Start, double d){ // d=direction= +1 or -1
if (d > 0) return( LocalExtremeArray(High, length, Start, d) );
return( LocalExtremeArray(Low, length, Start, d) );
}
int LocalExtremeArray(double arr[], int length, int iStart, double d){
while(true){
int iPrev = iStart; iStart = ArrayExtrema(arr, length, iStart, d);
if (iStart == iPrev) return iStart;
}
//NOTREACHED
}
int ArrayExtrema(double arr[], int length, int iStart, double d){
int iExtreme = iStart; double value = arr[iExtreme];
int iLimit = MathMin(iStart + length, ArraySize(arr));
for(iStart++; iStart<iLimit; iStart++) if((arr[iStart]-value) *d>= 0.){
iExtreme = iStart; value = arr[iExtreme]; } // largest index (>=)
return iExtreme;
}
Giới thiệu sách Trading hay
Khám phá Nghệ thuật Giao dịch Tiền tệ Chuyên nghiệp
Sách được viết bởi FX Trader chuyên nghiệp, có gần 30 năm giao dịch Forex cho các ngân hàng lớn thế giới như Citi, Nomura hay HSBC, đồng thời từng trading cho quỹ đầu cơ có vốn hàng chục triệu đô la
Bài viết liên quan