Техническое задание на разработку индикатора. 1. Формируется массивы индикаторов PArray01[i2], …, PArray36[i2]. Параметры MaxBars, MinBars, Vix_shag, Kizm_4H, период индикаторов, Krez необходимо задать во входных параметрах. Размерность массивов PArrayNN[] необходимо устанавливать автоматически с учетом параметров MaxBars, MinBars. for ( i2=MaxBars; i2>= MinBars; i2-- ) {//2 //----------вычисляем изменение параметров PArray01[i2]=MathArctan(((iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2)- iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2+1))/Point)/Kizm_4H); PArray02[i2]=MathArctan(((iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2)-iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2+2))/Point)/Kizm_4H); PArray03[i2]=MathArctan(((iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2)-iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2+3))/Point)/Kizm_4H); PArray04[i2]=MathArctan(((iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2)-iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2+4))/Point)/Kizm_4H); PArray05[i2]=MathArctan(((iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2)-iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2+5))/Point)/Kizm_4H); PArray06[i2]=MathArctan(((iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2)-iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2+6))/Point)/Kizm_4H); PArray07[i2]=MathArctan(((iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2)-iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2+7))/Point)/Kizm_4H); PArray08[i2]=MathArctan(((iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2)-iMA(NULL,PERIOD_H4,2,0,MODE_EMA,PRICE_WEIGHTED,i2+8))/Point)/Kizm_4H); ///------- PArray09[i2]=(iStochastic(NULL,PERIOD_H4,P_2,3,3,MODE_EMA,1,MODE_MAIN,i2)-50)/50; PArray10[i2]=(iStochastic(NULL,PERIOD_H4,P_2,3,3,MODE_EMA,1,MODE_MAIN,i2+2)-50)/50; PArray11[i2]=(iStochastic(NULL,PERIOD_H4,P_2,3,3,MODE_EMA,1,MODE_MAIN,i2+4)-50)/50; PArray12[i2]=(iStochastic(NULL,PERIOD_H4,P_2,3,3,MODE_EMA,1,MODE_MAIN,i2+6)-50)/50; PArray13[i2]=(iStochastic(NULL,PERIOD_H4,P_2,3,3,MODE_EMA,1,MODE_MAIN,i2+8)-50)/50; PArray14[i2]=(iStochastic(NULL,PERIOD_H4,P_2,3,3,MODE_EMA,1,MODE_MAIN,i2+10)-50)/50; PArray15[i2]=(iStochastic(NULL,PERIOD_H4,P_2,3,3,MODE_EMA,1,MODE_MAIN,i2+12)-50)/50; PArray16[i2]=(iStochastic(NULL,PERIOD_H4,P_2,3,3,MODE_EMA,1,MODE_MAIN,i2+14)-50)/50; ///------------------ PArray17[i2]=(iMFI(NULL,PERIOD_H4,P_3,i2)-50)/50; PArray18[i2]=(iMFI(NULL,PERIOD_H4,P_3,i2+1)-50)/50; PArray19[i2]=(iMFI(NULL,PERIOD_H4,P_3,i2+2)-50)/50; PArray20[i2]=(iMFI(NULL,PERIOD_H4,P_3,i2+3)-50)/50; PArray21[i2]=(iMFI(NULL,PERIOD_H4,P_3,i2+4)-50)/50; PArray22[i2]=(iMFI(NULL,PERIOD_H4,P_3,i2+5)-50)/50; PArray23[i2]=(iMFI(NULL,PERIOD_H4,P_3,i2+6)-50)/50; PArray24[i2]=(iMFI(NULL,PERIOD_H4,P_3,i2+7)-50)/50; PArray25[i2]=(iMFI(NULL,PERIOD_H4,P_3,i2+8)-50)/50; ///------------------ PArray26[i2]=MathArctan((iATR(NULL,0,12,i2)-0.0035)/0.0035); PArray27[i2]=MathArctan((iATR(NULL,0,12,i2+1)-0.0035)/0.0035); PArray28[i2]=MathArctan((iATR(NULL,0,12,i2+2)-0.0035)/0.0035); PArray29[i2]=MathArctan((iATR(NULL,0,12,i2+3)-0.0035)/0.0035); PArray30[i2]=MathArctan((iATR(NULL,0,12,i2+4)-0.0035)/0.0035); PArray31[i2]=MathArctan((iATR(NULL,0,12,i2+5)-0.0035)/0.0035); PArray32[i2]=MathArctan((iATR(NULL,0,12,i2+6)-0.0035)/0.0035); PArray33[i2]=MathArctan((iATR(NULL,0,12,i2+7)-0.0035)/0.0035); PArray34[i2]=MathArctan((iATR(NULL,0,12,i2+8)-0.0035)/0.0035); //---вычисляем выходные параметры. Код нужно переписать. При вычислении PArray35[i2], на каждом последующем баре //--проверяем превысило ли значение (iHigh[v]- iClose[i])/ Point уровень Krez. Если превысила то присваиваем //---PArray35[i2]= 1 и выходим из цикла. Если превышения нет, проверяем на превышение (iLow[v]-iClose[i])/Point //----уровня (- Krez). Если превышение есть, оставляем PArray35[i2]=0 и выходим из цикла. PArray35[i2]=0; Hig=0; for (v1=i2-1; v1>=i2-Vix_shag; v1-- ) { hi=(iHigh(NULL,PERIOD_H4,v1)-iClose(NULL,PERIOD_H4,i2))/Point; if(hi> Krez)Hig=hi; } if(Hig>=Krez)PArray35[i2]=1; //---вычисляем выходные параметры. Код нужно переписать. При вычислении PArray35[i2], на каждом последующем баре //--проверяем превысило ли значение (iLow[v]-iClose[i])/Point уровень (- Krez). Если превысила то присваиваем //---PArray35[i2]= - 1 и выходим из цикла. Если превышения нет, проверяем на превышение //---(iHigh[v]- iClose[i])/Point уровень Krez. Если превышение есть, оставляем PArray35[i2]=0 и выходим из цикла. PArray36[i2]=0; Los=0; for (v1=i2-1; v1>=i2-Vix_shag; v1-- ) { lo=(iLow(NULL,PERIOD_H4,v1)-iClose(NULL,PERIOD_H4,i2))/Point; if(lo= MinBars; i-- ) {//4 CString=CString+PArray01[i]+";"; CString=CString+PArray02[i]+";"; CString=CString+PArray03[i]+";"; CString=CString+PArray04[i]+";"; CString=CString+PArray05[i]+";"; CString=CString+PArray06[i]+";"; CString=CString+PArray07[i]+";"; CString=CString+PArray08[i]+";"; CString=CString+PArray09[i]+";"; CString=CString+PArray10[i]+";"; CString=CString+PArray11[i]+";"; CString=CString+PArray12[i]+";"; CString=CString+PArray13[i]+";"; CString=CString+PArray14[i]+";"; CString=CString+PArray15[i]+";"; CString=CString+PArray16[i]+";"; CString=CString+PArray17[i]+";"; CString=CString+PArray18[i]+";"; CString=CString+PArray19[i]+";"; CString=CString+PArray20[i]+";"; CString=CString+PArray21[i]+";"; CString=CString+PArray22[i]+";"; CString=CString+PArray23[i]+";"; CString=CString+PArray24[i]+";"; CString=CString+PArray25[i]+";"; CString=CString+PArray26[i]+";"; CString=CString+PArray27[i]+";"; CString=CString+PArray28[i]+";"; CString=CString+PArray29[i]+";"; CString=CString+PArray30[i]+";"; CString=CString+PArray31[i]+";"; CString=CString+PArray32[i]+";"; CString=CString+PArray33[i]+";"; CString=CString+PArray34[i]+";"; CString=CString+PArray35[i]+";"; CString=CString+PArray36[i]; FileWrite(h1,CString); CString=""; }//4 FileClose(h1); Alert("Выгрузка файла Vigruzka ХХХХХХ завершена "); 3. Загружаем из csv файла «Kf.csv» массив коэффициентов К[i][s] размерностью i =8, s=34. (данные будут без заголовка) К[1][1]; К[1][2]; К[1][3];………………; К[1][34]; К[2][1]; К[2][2]; К[2][3];………………; К[2][34]; …………………………………………………………………. …………………………………………………………………. К[8][1]; К[8][2]; К[8][3];……….; К[8][34]; 4. Производим вычисление нового массива F[10][i] . MaxBars >= i >= MinBars F1[i]= К[1][1]*PArray01[i2]+ К[1][2]*PArray02[i2]+ К[1][3]*PArray03[i2]+....+ К[1][34]*PArray34[i2]; F2[i]= К[2][1]*PArray01[i2]+ К[2][2]*PArray02[i2]+ К[2][3]*PArray03[i2]+....+ К[2][34]*PArray34[i2]; …………….. ……………... F8[i]= К[8][1]*PArray01[i2]+ К[8][2]*PArray02[i2]+ К[8][3]*PArray03[i2]+....+ К[8][34]*PArray34[i2]; 5. Выгружаем данные массива F[] в файл csv. int init(){//1 x2="\\"; FilePatch2 = "Spravochnie_dannye"+x2+Symbol()+x2; FileName2 = FilePatch2+"_"+Symbol()+"Vigruzka_F ХХХХХХ"+".csv"; FirstLine2 = "F 1"+";"+"F 2"+";"+"F 3"+";"+"F 4"+";"+"F 5"+";"+"F 6"+";"+"F 7"+";"+"F 8"+";" +"Значение 1"+";"+"Значение -1"; h2 = FileOpen(FileName2,FILE_CSV|FILE_WRITE); FileWrite(h2,FirstLine2); for (i=MaxBars; i>= MinBars; i-- ) { CString=CString+F1[i]+";"; CString=CString+F2[i]+";"; CString=CString+F3[i]+";"; CString=CString+F4[i]+";"; CString=CString+F5[i]+";"; CString=CString+F6[i]+";"; CString=CString+F7[i]+";"; CString=CString+F8[i]+";"; CString=CString+PArray35[i]+";"; CString=CString+PArray36[i]; FileWrite(h2,CString); CString=""; } FileClose(h2); Alert("Выгрузка файла Vigruzka_F ХХХХХХ завершена "); 6. Строим графики для PArray01[i2], PArray09[i2], PArray17[i2], PArray26[i2], F1[i], F2[i], F3[i], F4[i], F5[i], F6[i], F7[i], F8[i].