for (int i=start; i { 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] 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, для того, чтобы сигнал звучал только при появлении первого сигнала.