//+--------------------------------------------------------------------------------+
//| PHONG.mq4 |
//| Bản quyền 2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+--------------------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property Indicator_color1 Blue // Lỗi: không nên khai báo lại
// Biến đầu vào
đầu vào int length = 3;
đầu vào double bull = -0,51;
đầu vào double bear = 0,43;
đầu vào int atr_length = 3;
// Bộ đệm chỉ báo
cviBuffer đôi[];
// Hàm tính toán SMA
SMA kép(double &source[], int chu kỳ, int shift = 0) {
tổng gấp đôi = 0;
for (int iSMA = shift; iSMA < Period + shift; iSMA++) { // Thay `iLoop` thành `iSMA`
tổng += nguồn[iSMA];
}
trả về tổng / kỳ;
}
// Hàm tính ATR
double ATR(int chu kỳ) {
atr đôi = 0;
for (int iATR = 1; iATR <= dấu chấm; iATR++) { // Thay `iLoop` thành `iATR`
atr += MathAbs(Cao[iATR] - Thấp[iATR]);
}
trả về atr / chu kỳ;
}
int OnInit() {
// Đặt bộ đệm
Đặt IndexBuffer(0, cviBuffer);
Đặt kiểu chỉ mục (0, ĐƯỜNG VẼ);
Đặt nhãn Index(0, "CVI");
trả về(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const ngày giờ &thời gian[],
const đôi &mở[],
const double &high[],
const double &low[],
const đôi &đóng[],
const dài &tick_volume[],
const dài & khối lượng[],
hằng số int &spread[]) {
// Đảm bảo chúng ta có đủ dữ liệu
nếu (rates_total < chiều dài + atr_length) {
trả về (0);
}
// Tính toán hl2
đôi hl2[];
ArraySetAsSeries(hl2, đúng);
for (int iHL2 = 0; iHL2 < rate_total; iHL2++) { // Thay `iLoop` thành `iHL2`
hl2[iHL2] = (cao[iHL2] + thấp[iHL2]) / 2;
}
// Tính toán ATR
gấp đôi vol[];
ArraySetAsSeries(vol, đúng);
for (int iVol = 0; iVol < rate_total; iVol++) { // Thay `iLoop` thành `iVol`
vol[iVol] = ATR(chiều dài atr);
}
// Tính toán CVI
for (int iCVI = rate_total - 1; iCVI >= 0; iCVI--) { // Thay `iLoop` thành `iCVI`
giá trị kép valC = SMA(hl2, chiều dài, iCVI);
double atr_val = vol[iCVI] * MathSqrt(chiều dài);
cviBuffer[iCVI] = (đóng[iCVI] - valC) / atr_val;
}
// Vẽ tín hiệu
for (int iSignal = rates_total - 1; iSignal >= 0; iSignal--) { // Thay `iLoop` thành `iSignal`
nếu (cviBuffer[iSignal] <= bull) {
nếu (iSignal < rates_total - 1 && cviBuffer[iSignal + 1] > bull) {
ObjectCreate(0, "bullSignal" + IntegerToString(iSignal), OBJ_LABEL, 0, thời gian[iSignal], thấp[iSignal] - 5 * Điểm);
ObjectSetInteger(0, "bullSignal" + IntegerToString(iSignal), OBJPROP_COLOR, clrLime);
// Thông báo đẩy
SendNotification("Tín hiệu tăng giá tại " + TimeToString(time[iSignal], TIME_DATE | TIME_MINUTES) + " vào " + Symbol());
// Cảnh báo màn hình
Alert("Tín hiệu tăng giá tại " + TimeToString(time[iSignal], TIME_DATE | TIME_MINUTES) + " vào " + Symbol());
}
}nếu (cviBuffer[iSignal] >= gấu) {
nếu (iSignal < rates_total - 1 && cviBuffer[iSignal + 1] < bear) {
ObjectCreate(0, "bearSignal" + IntegerToString(iSignal), OBJ_LABEL, 0, thời gian[iSignal], cao[iSignal] + 5 * Điểm);
ObjectSetInteger(0, "bearSignal" + IntegerToString(iSignal), OBJPROP_COLOR, clrRed);
// Thông báo đẩy
SendNotification("Tín hiệu giảm giá tại " + TimeToString(time[iSignal], TIME_DATE | TIME_MINUTES) + " vào " + Symbol());
// Cảnh báo màn hình
Alert("Tín hiệu giảm giá tại " + TimeToString(time[iSignal], TIME_DATE | TIME_MINUTES) + " vào " + Symbol());
}
}
}
trả về (tỷ giá_tổng);
}
//| PHONG.mq4 |
//| Bản quyền 2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+--------------------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property Indicator_color1 Blue // Lỗi: không nên khai báo lại
// Biến đầu vào
đầu vào int length = 3;
đầu vào double bull = -0,51;
đầu vào double bear = 0,43;
đầu vào int atr_length = 3;
// Bộ đệm chỉ báo
cviBuffer đôi[];
// Hàm tính toán SMA
SMA kép(double &source[], int chu kỳ, int shift = 0) {
tổng gấp đôi = 0;
for (int iSMA = shift; iSMA < Period + shift; iSMA++) { // Thay `iLoop` thành `iSMA`
tổng += nguồn[iSMA];
}
trả về tổng / kỳ;
}
// Hàm tính ATR
double ATR(int chu kỳ) {
atr đôi = 0;
for (int iATR = 1; iATR <= dấu chấm; iATR++) { // Thay `iLoop` thành `iATR`
atr += MathAbs(Cao[iATR] - Thấp[iATR]);
}
trả về atr / chu kỳ;
}
int OnInit() {
// Đặt bộ đệm
Đặt IndexBuffer(0, cviBuffer);
Đặt kiểu chỉ mục (0, ĐƯỜNG VẼ);
Đặt nhãn Index(0, "CVI");
trả về(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const ngày giờ &thời gian[],
const đôi &mở[],
const double &high[],
const double &low[],
const đôi &đóng[],
const dài &tick_volume[],
const dài & khối lượng[],
hằng số int &spread[]) {
// Đảm bảo chúng ta có đủ dữ liệu
nếu (rates_total < chiều dài + atr_length) {
trả về (0);
}
// Tính toán hl2
đôi hl2[];
ArraySetAsSeries(hl2, đúng);
for (int iHL2 = 0; iHL2 < rate_total; iHL2++) { // Thay `iLoop` thành `iHL2`
hl2[iHL2] = (cao[iHL2] + thấp[iHL2]) / 2;
}
// Tính toán ATR
gấp đôi vol[];
ArraySetAsSeries(vol, đúng);
for (int iVol = 0; iVol < rate_total; iVol++) { // Thay `iLoop` thành `iVol`
vol[iVol] = ATR(chiều dài atr);
}
// Tính toán CVI
for (int iCVI = rate_total - 1; iCVI >= 0; iCVI--) { // Thay `iLoop` thành `iCVI`
giá trị kép valC = SMA(hl2, chiều dài, iCVI);
double atr_val = vol[iCVI] * MathSqrt(chiều dài);
cviBuffer[iCVI] = (đóng[iCVI] - valC) / atr_val;
}
// Vẽ tín hiệu
for (int iSignal = rates_total - 1; iSignal >= 0; iSignal--) { // Thay `iLoop` thành `iSignal`
nếu (cviBuffer[iSignal] <= bull) {
nếu (iSignal < rates_total - 1 && cviBuffer[iSignal + 1] > bull) {
ObjectCreate(0, "bullSignal" + IntegerToString(iSignal), OBJ_LABEL, 0, thời gian[iSignal], thấp[iSignal] - 5 * Điểm);
ObjectSetInteger(0, "bullSignal" + IntegerToString(iSignal), OBJPROP_COLOR, clrLime);
// Thông báo đẩy
SendNotification("Tín hiệu tăng giá tại " + TimeToString(time[iSignal], TIME_DATE | TIME_MINUTES) + " vào " + Symbol());
// Cảnh báo màn hình
Alert("Tín hiệu tăng giá tại " + TimeToString(time[iSignal], TIME_DATE | TIME_MINUTES) + " vào " + Symbol());
}
}nếu (cviBuffer[iSignal] >= gấu) {
nếu (iSignal < rates_total - 1 && cviBuffer[iSignal + 1] < bear) {
ObjectCreate(0, "bearSignal" + IntegerToString(iSignal), OBJ_LABEL, 0, thời gian[iSignal], cao[iSignal] + 5 * Điểm);
ObjectSetInteger(0, "bearSignal" + IntegerToString(iSignal), OBJPROP_COLOR, clrRed);
// Thông báo đẩy
SendNotification("Tín hiệu giảm giá tại " + TimeToString(time[iSignal], TIME_DATE | TIME_MINUTES) + " vào " + Symbol());
// Cảnh báo màn hình
Alert("Tín hiệu giảm giá tại " + TimeToString(time[iSignal], TIME_DATE | TIME_MINUTES) + " vào " + Symbol());
}
}
}
trả về (tỷ giá_tổng);
}