OnCalculate' function declared with wrong type or/and parameters

 

hello experts,
im verry struggling with this warnings 'OnCalculate' function declared with wrong type or/and parameters 

help me pls.
thanks everyone. 

here is my code  (if there is any problem other than this OnCalculate function please comment to help me too).


//+------------------------------------------------------------------+
//|                                              KeltnerStrategy.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
#include <Trade\Trade.mqh>
#include <Indicators\Indicators.mqh>
//--- Tham số của chỉ báo và các tham số giao dịch
input double lotSize = 0.1;  // Lot size for trading
input int slippage = 3;      // Slippage for orders
input double stopLoss = 50;  // Stop loss in points
input double takeProfit = 50; // Take profit in points
double Ask, Bid;

//--- Input của 2 đường EMA 10 và 200
input int emaPeriod1 = 10;   // Period of the first EMA (short)
input int emaPeriod2 = 200;  // Period of the second EMA (long)

double ema10Buffer[];  // dùng để lưu giá trị của ema10  
double ema200Buffer[]; // dùng để lưu giá trị của ema200

int emaHandle10, emaHandle200;  // handle: mã định danh

//--- input của dải keltner 
//Công Thức Kênh Keltner
//Đường Trung Bình (EMA): Đường trung bình động hàm số của giá đóng cửa.
//Đường Trên (Upper Band): EMA + (ATR * Multiplier).
//Đường Dưới (Lower Band): EMA - (ATR * Multiplier).
input int    emaPeriod = 50;          // EMA period - length keltner 
input int    atrPeriod = 50;          // ATR period -> thường giống với EMA 
input double multiplier = 1.5;        // Multiplier for ATR

double upperBandBuffer[];
double emaBuffer[];
double lowerBandBuffer[];
double atrBuffer[];

int emaHandle;
int atrHandle;



int OnInit() // hàm khởi tạo
  { 
     // Ask là giá hiện tại mà bạn có thể mua
     // Bid là giá hiện tại mà bạn có thể bán 
   Ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);
   Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);
   
// đoạn này của 2 đường EMA
     // Create handles for EMA indicators
     // hàm Symbol trả về tên của cặp tiền tệ/ tài sản bạn đang phân tích 
     // hàm Period trả về khung tgian mà bạn đang xem 
     // hàm Mode_ema cho biết bạn đang dùng chỉ báo dạng EMA -> không phải là SMA hay gì khác 
     // hàm price_close cho biết chỉ báo sẽ tính toán dựa trên giá đóng cửa của nến  ( bạn cx có thể dùng những hàm khác như price_open, price_high, price_low)
   emaHandle10 = iMA(Symbol(), Period(), emaPeriod1, 0, MODE_EMA, PRICE_CLOSE); 
   emaHandle200 = iMA(Symbol(), Period(), emaPeriod2, 0, MODE_EMA, PRICE_CLOSE);
 
  // sắp xếp thứ tự theo nến, nến gần nhất đang chạy sẽ là thứ tự 0, các nến trước đó có thứ tự tăng dần
   ArraySetAsSeries(ema10Buffer, true); 
   ArraySetAsSeries(ema200Buffer, true);
   
// dải keltner
  // Tạo handle cho EMA và ATR
   emaHandle = iMA(Symbol(), Period(), emaPeriod, 0, MODE_EMA, PRICE_CLOSE);
   atrHandle = iATR(Symbol(), Period(), atrPeriod);   
  // sắp xếp thứ tự theo nến
   ArraySetAsSeries(upperBandBuffer, true);
   ArraySetAsSeries(emaBuffer, true);
   ArraySetAsSeries(lowerBandBuffer, true);

   // gán các buffers cho các chỉ báo
   SetIndexBuffer(0, upperBandBuffer);
   SetIndexBuffer(1, emaBuffer);
   SetIndexBuffer(2, lowerBandBuffer);

   return(INIT_SUCCEEDED);
  }
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const long &spread[])  
  {
   // Kiểm tra số lượng nến đủ để tính toán
   if (rates_total < emaPeriod || rates_total < atrPeriod)
      return (0);
                 
   //sao chép dữ liệu vào buffer
   CopyBuffer(emaHandle10, 0, 0,rates_total,ema10Buffer);
   CopyBuffer(emaHandle200,0,0,rates_total,ema200Buffer);
   CopyBuffer(emaHandle, 0, 0, rates_total, emaBuffer);
   CopyBuffer(atrHandle, 0, 0, rates_total, atrBuffer);
   
   // Lấy giá trị mới nhất của EMA 10 và 200 vào buffer
   double ema10Value = ema10Buffer[0];
   double ema200Value = ema200Buffer[0];
   
   //lấy giá trị mới nhất của EMA và ATR
   double atr = atrBuffer[0]; 
   double ema = emaBuffer[0];
   
   // Tính dải trên và dải dưới của Keltner
   
   upperBandBuffer[0] = ema + atr * multiplier; // Tính dải trên
   lowerBandBuffer[0] = ema - atr * multiplier; // Tính dải dưới
   
   // lấy giá trị mới nhất của dải trên và dải dưới
   double lowerBand = lowerBandBuffer[0];
   double upperBand = upperBandBuffer[0];
   
Documentation on MQL5: Language Basics / Functions / Event Handling Functions
Documentation on MQL5: Language Basics / Functions / Event Handling Functions
  • www.mql5.com
The MQL5 language provides processing of some predefined events . Functions for handling these events must be defined in a MQL5 program; function...
 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const long &spread[])      <---   should be an int
Long Hoàng
:

hello experts,
im verry struggling with this warnings 'OnCalculate' function declared with wrong type or/and parameters 

help me pls.
thanks everyone. 

        

you expect anyone to read this?   use the code button </>  (alt-s) to post code  or attach it as a file....


 
Paul Anscombe #:

you expect anyone to read this?   use the code button </>  (alt-s) to post code  or attach it as a file....


Apparently you did it ;-)

 
Alain Verleyen #:

Apparently you did it ;-)

very true, but the error was always going to be in just those few lines :-)

 
Alain Verleyen #:

Apparently you did it ;-)

Paul Anscombe #:

you expect anyone to read this?   use the code button </>  (alt-s) to post code  or attach it as a file....


:)))) my bad 
thanks man 
 
After i fixed that error, this happened : 
 
Look carefully at example code in the documentation