Абдулхаким
Почетный гражданин
в циклекак сделать отрисовку на указанное количество дней назад
C-подобный:
for(int it=0; it<days; it++)
C-подобный:
iTime(NULL,i,it)
в циклекак сделать отрисовку на указанное количество дней назад
for(int it=0; it<days; it++)
iTime(NULL,i,it)
название линии сделай такимно не прорисовывает на все указанные дни
"Ind_"+TimeToString(iTime(NULL,0,LastBar),TIME_DATE)
name = name + TimeDayOfYear(LastBar);
name += string(TimeDayOfYear(time1));
допустим будет считать раз в сутки, сколько секунд на это понадобится ?просто получиться если так делать до будут пересчитываться все старые данные, а это нагружает работу терминала и скорость работы индикатора.
если считать конкретно один день, то секунду я думаю.допустим будет считать раз в сутки, сколько секунд на это понадобится ?
ограничь переменной, чтобы расчёт был раз в сутки и при инициализации,Удаляя вручную уровни , возвращает сразу на место , тестил на 20 днях.
double indikator[75][31];//Значения разных индикаторов
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void OnTick()
{
uo(indikator);
Comment(indikator[0][1]);
}
//+------------------------------------------------------------------+
void uo(double &gh[75][31])
{
for(int i = 0; i < ArrayRange(gh, 1); i++)
{
gh[0][i] = iFractals(_Symbol,PERIOD_CURRENT,MODE_UPPER,i);//Фрактал вверх
gh[1][i] = iFractals(_Symbol,PERIOD_CURRENT,MODE_LOWER,i);//Фрактал вниз
gh[2][i] = iAC(_Symbol,PERIOD_CURRENT,i);//Accelerator/Decelerator.
gh[3][i] = iAO(_Symbol,PERIOD_CURRENT,i);//Awesome Oscillator.
gh[4][i] = iMomentum(_Symbol,PERIOD_CURRENT,31,PRICE_CLOSE,i);//Индикатор Моментум
gh[5][i] = iRVI(_Symbol,PERIOD_CURRENT,31,MODE_CLOSE,i);//Relative Vigor Index.
gh[6][i] = iStochastic(_Symbol,PERIOD_CURRENT,5,3,3,MODE_LWMA,0,0,i);//Stochastic Oscillator.Low/High.MODE_MAIN
gh[7][i] = iStochastic(_Symbol,PERIOD_CURRENT,5,3,3,MODE_LWMA,0,1,i);//Stochastic Oscillator.Low/High.MODE_SIGNAL
gh[8][i] = iStochastic(_Symbol,PERIOD_CURRENT,5,3,3,MODE_LWMA,1,0,i);//Stochastic Oscillator.Close/Close.MODE_MAIN
gh[9][i] = iStochastic(_Symbol,PERIOD_CURRENT,5,3,3,MODE_LWMA,1,1,i);//Stochastic Oscillator.Close/Close.MODE_SIGNAL
gh[10][i] = iBullsPower(_Symbol,PERIOD_CURRENT,31,PRICE_CLOSE,i);//Сила быков
gh[11][i] = iBearsPower(_Symbol,PERIOD_CURRENT,31,PRICE_CLOSE,i);//Сила медведей
gh[12][i] = iADX(_Symbol,PERIOD_CURRENT,31,PRICE_CLOSE,0,i);//Average Directional Movement Index.MODE_MAIN
gh[13][i] = iADX(_Symbol,PERIOD_CURRENT,31,PRICE_CLOSE,1,i);//Average Directional Movement Index.MODE_PLUSDI
gh[14][i] = iADX(_Symbol,PERIOD_CURRENT,31,PRICE_CLOSE,2,i);//Average Directional Movement Index.MODE_MINUSDI
gh[15][i] = iATR(_Symbol,PERIOD_CURRENT,31,i);//Average True Range
gh[16][i] = iAlligator(_Symbol,PERIOD_CURRENT,13,8,5,5,5,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORJAW,i);//Челюсти алигатора
gh[17][i] = iAlligator(_Symbol,PERIOD_CURRENT,13,8,5,5,5,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORLIPS,i);//Губы алигатора
gh[18][i] = iAlligator(_Symbol,PERIOD_CURRENT,13,8,5,5,5,3,MODE_LWMA,PRICE_CLOSE,MODE_GATORTEETH,i);//Зубы алигатора
gh[19][i] = iCCI(_Symbol,PERIOD_CURRENT,31,PRICE_CLOSE,i);//Commodity Channel Index
gh[20][i] = iDeMarker(_Symbol,PERIOD_CURRENT,31,i);//Демаркер
gh[21][i] = iForce(_Symbol,PERIOD_CURRENT,31,MODE_LWMA,PRICE_CLOSE,i);//Force Index
gh[22][i] = iMACD(_Symbol,PERIOD_CURRENT,12,26,6,PRICE_CLOSE,MODE_MAIN,i);//MACD.MODE_MAIN
gh[23][i] = iMACD(_Symbol,PERIOD_CURRENT,12,26,6,PRICE_CLOSE,MODE_SIGNAL,i);//MACD.MODE_SIGNAL
gh[24][i] = iMFI(_Symbol,PERIOD_CURRENT,31,i);//Money Flow Index
gh[25][i] = iOBV(_Symbol,PERIOD_CURRENT,PRICE_CLOSE,i);//On Balance Volume
gh[26][i] = iSAR(_Symbol,PERIOD_CURRENT,0.02,0.2,i);//ParabolicSar
gh[27][i] = iRSI(_Symbol,PERIOD_CURRENT,31,PRICE_CLOSE,i);//Relative Strength Index
gh[28][i] = iIchimoku(_Symbol,PERIOD_CURRENT,9,26,52,1,i);//Ichimoku Kinko Hyo.MODE_TENKANSEN
gh[29][i] = iIchimoku(_Symbol,PERIOD_CURRENT,9,1,52,2,i);//Ichimoku Kinko Hyo.MODE_KIJUNSEN
gh[30][i] = iIchimoku(_Symbol,PERIOD_CURRENT,9,26,52,3,i);//Ichimoku Kinko Hyo.MODE_SENKOUSPANA
gh[31][i] = iIchimoku(_Symbol,PERIOD_CURRENT,9,26,52,4,i);//Ichimoku Kinko Hyo.MODE_SENKOUSPANB
gh[32][i] = iIchimoku(_Symbol,PERIOD_CURRENT,9,26,52,5,i);//Ichimoku Kinko Hyo.MODE_CHIKOUSPAN
gh[33][i] = iAD(_Symbol,PERIOD_CURRENT,i);//Accumulation/Distribution.
gh[34][i] = iStdDev(_Symbol,PERIOD_CURRENT,31,0,MODE_LWMA,PRICE_CLOSE,i);//Стандартное отклонение
gh[35][i] = iStdDev(_Symbol,PERIOD_CURRENT,61,0,MODE_LWMA,PRICE_CLOSE,i);//Стандартное отклонение 2
gh[36][i] = iMA(NULL,PERIOD_CURRENT,18,0,MODE_LWMA,PRICE_CLOSE,i);//Скользящие средння с периодом 18
gh[37][i] = iMA(NULL,PERIOD_CURRENT,36,0,MODE_LWMA,PRICE_CLOSE,i);//Скользящие средння с периодом 36
gh[38][i] = iMA(NULL,PERIOD_CURRENT,200,0,MODE_LWMA,PRICE_CLOSE,i);//Скользящие средння с периодом 200
gh[39][i] = iEnvelopes(_Symbol,PERIOD_CURRENT,14,MODE_LWMA,0,PRICE_CLOSE,0.10,0,i);
gh[40][i] = iEnvelopes(_Symbol,PERIOD_CURRENT,14,MODE_LWMA,0,PRICE_CLOSE,0.10,1,i);
gh[41][i] = iEnvelopes(_Symbol,PERIOD_CURRENT,14,MODE_LWMA,0,PRICE_CLOSE,0.10,2,i);
gh[42][i] = iBWMFI(_Symbol,PERIOD_CURRENT,i);//
gh[43][i] = iBands(_Symbol,PERIOD_CURRENT,31,2,0,PRICE_CLOSE,0,i);//Bands MODE_MAIN
gh[44][i] = iBands(_Symbol,PERIOD_CURRENT,31,2,0,PRICE_CLOSE,1,i);//Bands MODE_UPPER
gh[45][i] = iBands(_Symbol,PERIOD_CURRENT,31,2,0,PRICE_CLOSE,2,i);//BandsMODE_LOWEER
gh[46][i] = iCustom(_Symbol,0,"ZigZag",MODE_HIGH,0);//ZiqZagUp
gh[47][i] = iCustom(_Symbol,0,"ZigZag",MODE_LOW,0);//ZiqZagDw
gh[48][i] = High[i];//Высокая цена
gh[49][i] = Low [i];//Низкая цена
gh[50][i] = Open[i];//Цена открытия
gh[51][i] = Close[i];//Цена закрытия
gh[52][i] = gh[36][i]-gh[37][i];//Разница МА с периодом 18 и 36
gh[53][i] = gh[22][i]-gh[23][i];//Разница MACD
gh[54][i] = gh[13][i]-gh[14][i];//+DI - (-DI) ADX
gh[55][i] = gh[50][i]-gh[51][i];//Тело свечи
gh[56][i] = gh[48][i]-gh[49][i];//Высота свечи
gh[57][i] = gh[48][i]-gh[50][i];//Верхняя тень черной свечи
gh[58][i] = gh[48][i]-gh[51][i];//Верхняя тень белой свечи
gh[59][i] = gh[51][i]-gh[49][i];//Нижняя тень черной свечи
gh[60][i] = gh[50][i]-gh[49][i];//Нижняя тень белой свечи
gh[61][i] = gh[26][2]-gh[26][1];//Разность САР 2х дней рядом с текущим
gh[62][i] = gh[26][i]-gh[16][i];//САР-челюсти аолигатора
gh[63][i] = gh[26][i]-gh[17][i];//САР-губы алигатора
gh[64][i] = gh[26][i]-gh[18][i];//САР-зубы алигатора
gh[65][i] = gh[38][i]-gh[26][i];//MA(200)-САР
gh[66][i] = gh[30][i]-gh[31][i];//ИшиА-ИшиБ
gh[67][i] = gh[29][i]-gh[26][i];//Кейжин-САР
gh[68][i] = gh[22][i]-gh[23][i];//MACD(m)-MACD(s)
gh[69][i] = gh[43][i]-gh[26][i];//BandsU-САР
gh[70][i] = gh[44][i]-gh[26][i];//BandsN-САР
gh[71][i] = gh[12][i]-gh[13][i];//ADX-(+DL);
gh[72][i] = gh[0][i]-gh[26][i];//fractkUp-Sar
gh[73][i] = gh[1][i]-gh[26][i];//fractkDw-Sar
gh[74][i] = gh[34][i]-gh[35][i];//SD из разность т31-т61
}
}
//+------------------------------------------------------------------+
постоянно пересчитывать не предлагаютак будет намного точнее и быстрее чем постоянно пересчитывать данные
datetime lastday = iTime(NULL,PERIOD_D1,0);
if(Last < lastday){
// тут код
Last = lastday;
}
данные берутся из рисующего индикатора (пересчитывает свои старые данные) ?делал вручную. если пересчитывать и перерисовывать многие уровни теряют смысл.
string name = "Ind_"+TimeToString(iTime(NULL,0,LastBar),TIME_DATE);
if(ObjectFind(0,name) < 0){
double Ind1 = iCustom(Symbol(),0,Indicatr,0,LastBar);
if (LastBar != iBarShift(Symbol(), 0, iTime(NULL,i,it+1))-M){
Line(name,Time[LastBar],Ind1,Time[LastBar]+(PERIOD_D1*60)-M,Ind1,clrBlue,STYLE_SOLID,2,false,false,false);
}
}
с таким условием уже не должен трогать нанесённые уровниИндикатор рисует
if(ObjectFind(0,name) < 0)
логику iCustom не знаю, видимо получает все значения буфера и потом выдаёт запрашиваемоеИндикатор рисует
в OnDeinit перед удалением линий нужно такое условиес таким условием уже не должен трогать нанесённые уровни
void OnDeinit(const int reason){
if(reason == REASON_REMOVE){
// тут удалять
}
}