Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5 - страница 24
if (!ObjectCreate (0,«Buy»+i, OBJ_ARROW,0,time [i-1],high [i-1]))
{
return (false);
}
ObjectSetInteger (0,«Buy»+i, OBJPROP_COLOR, clrGreen);
ObjectSetInteger (0,«Buy»+i, OBJPROP_ARROWCODE,233);
ObjectSetInteger (0,«Buy»+i, OBJPROP_WIDTH,2);
ObjectSetInteger (0,«Buy»+i, OBJPROP_ANCHOR, ANCHOR_UPPER);
ObjectSetInteger (0,«Buy»+i, OBJPROP_HIDDEN, true);
ObjectSetString (0,«Buy»+i, OBJPROP_TOOLTIP, close [i-1]);
}
if (start!=1) {
if (close [i-1]> open [i-1] &&close [i-1]> EMA34HBuffer [i-1] &&close [i-1]> EMA34LBuffer [i-1] &&low [i-1]> EMA125Buffer [i-1] &&low [i-1]> PSARBuffer [i-1] &&EMA125Buffer [i-1] countBuy++; if (countBuy==1) PlaySound («chime. wav») } else { countBuy=0; } if (close [i-1] countSell++; if (countSell==1) PlaySound («chime. wav»); } else { countSell=0; } } if (close [i-1] if (!ObjectCreate (0,«Sell»+i, OBJ_ARROW,0,time [i-1],low [i-1])) { return (false); } ObjectSetInteger (0,«Sell»+i, OBJPROP_COLOR, clrRed); ObjectSetInteger (0,«Sell»+i, OBJPROP_ARROWCODE,234); ObjectSetInteger (0,«Sell»+i, OBJPROP_WIDTH,2); ObjectSetInteger (0,«Sell»+i, OBJPROP_ANCHOR, ANCHOR_LOWER); ObjectSetInteger (0,«Sell»+i, OBJPROP_HIDDEN, true); ObjectSetString (0,«Sell»+i, OBJPROP_TOOLTIP, close [i-1]); } } bars_calculated=calculated; // – - return value of prev_calculated for next call return (rates_total); } //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – + bool FillArrayFromPSARBuffer (double &sar_buffer [], // индикаторный буфер значений Parabolic SAR int ind_handle, // хэндл индикатора iSAR int amount // количество копируемых значений ) { ResetLastError (); if (CopyBuffer (ind_handle,0,0,amount, sar_buffer) <0) { return (false); } return (true); } //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – + bool FillArrayFromMABuffer (double &values [], // индикаторный буфер значений Moving Average int shift, // смещение int ind_handle, // хэндл индикатора iMA int amount // количество копируемых значений ) { ResetLastError (); if (CopyBuffer (ind_handle,0, -shift, amount, values) <0) { return (false); } return (true); } void OnDeinit (const int reason) { ObjectsDeleteAll (0, -1, -1); } Здесь добавлены счетчики сигналов на продажу и покупку countBuy, countSell, для того, чтобы сигнал звучал только при появлении первого сигнала.
Функция OnChartEvent
Функция OnChartEvent является функцией обратного вызова, которая вызывается при взаимодействии пользователя с графиком символа и событиях, связанных с графическими объектами графика символа.
void OnChartEvent (const int id, // идентификатор события
const long& lparam, // параметр события типа long
const double& dparam, // параметр события типа double
const string& sparam // параметр события типа string
);
В качестве примера использования функции OnChartEvent рассмотрим наш индикатор Impulse keeper и добавим в него функциональность, позволяющую посмотреть значения используемых индикаторов при клике на сигнале покупки или продажи индикатора.