47 lines
2.0 KiB
Plaintext
47 lines
2.0 KiB
Plaintext
//+------------------------------------------------------------------+
|
|
//| Handles.mqh |
|
|
//| Tạo / giải phóng handle RSI, EMA9/WMA45 trên RSI, EMA200(close). |
|
|
//| EMA200 chỉ CopyBuffer — không ChartIndicatorAdd. |
|
|
//+------------------------------------------------------------------+
|
|
#ifndef RSIMOM_HANDLES_MQH
|
|
#define RSIMOM_HANDLES_MQH
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Tạo tất cả indicator handle. Trả về true nếu thành công. |
|
|
//+------------------------------------------------------------------+
|
|
bool Handles_CreateAll()
|
|
{
|
|
// RSI(close)
|
|
h_RSI = iRSI(_Symbol, _Period, InpRSIPeriod, PRICE_CLOSE);
|
|
if (h_RSI == INVALID_HANDLE)
|
|
{ Print("[RsiMom] Không tạo được handle RSI"); return false; }
|
|
|
|
// EMA9 và WMA45 tính trên dữ liệu của h_RSI (buffer 0 của RSI)
|
|
h_EMA9 = iMA(_Symbol, _Period, InpEMA9Period, 0, MODE_EMA, h_RSI);
|
|
if (h_EMA9 == INVALID_HANDLE)
|
|
{ Print("[RsiMom] Không tạo được handle EMA9(RSI)"); return false; }
|
|
|
|
h_WMA45 = iMA(_Symbol, _Period, InpWMA45Period, 0, MODE_LWMA, h_RSI);
|
|
if (h_WMA45 == INVALID_HANDLE)
|
|
{ Print("[RsiMom] Không tạo được handle WMA45(RSI)"); return false; }
|
|
|
|
h_EMA200 = iMA(_Symbol, _Period, InpEMATrendPeriod, 0, MODE_EMA, PRICE_CLOSE);
|
|
if (h_EMA200 == INVALID_HANDLE)
|
|
{ Print("[RsiMom] Không tạo được handle EMA200"); return false; }
|
|
|
|
return true;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Giải phóng tất cả indicator handle |
|
|
//+------------------------------------------------------------------+
|
|
void Handles_ReleaseAll()
|
|
{
|
|
if (h_RSI != INVALID_HANDLE) IndicatorRelease(h_RSI);
|
|
if (h_EMA9 != INVALID_HANDLE) IndicatorRelease(h_EMA9);
|
|
if (h_WMA45 != INVALID_HANDLE) IndicatorRelease(h_WMA45);
|
|
if (h_EMA200 != INVALID_HANDLE) IndicatorRelease(h_EMA200);
|
|
}
|
|
|
|
#endif // RSIMOM_HANDLES_MQH
|