Скачать MetaTrader 5

Сбежавшему из MQL5 - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Делись ссылками на форуме. Теперь они имеют Rich Content!
Mihail Marchukajtes
3435
Mihail Marchukajtes 2015.03.16 16:31  
Я так думаю что проблема в формуле. Хотя написана она правильно.... Вроде как.....
Mihail Marchukajtes
3435
Mihail Marchukajtes 2015.03.16 18:37  

Ктонибуть может подсказать что не так с формулой???

Zscore=sqrt((Nobchee * (Rscore - 0.5) - XZscore) / ((XZscore * (XZscore - Nobchee)) / (Nobchee -1)));
Mihail Marchukajtes
3435
Mihail Marchukajtes 2015.03.20 16:55  

Спасибо всем кто откликнулся.... Написал индикатора, правда теперь незенаю правильно аль нет, да и куда их теперь заусунть :-) так или иначе всем спасибо!

#property copyright "nikelodeon"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers   4
#property indicator_type1     DRAW_LINE   // тип графического построения - линия
#property indicator_color1    clrGreen    // цвет линии
#property indicator_style1    STYLE_SOLID // стиль линии
#property indicator_width1    2           // толщина линии
#property indicator_plots     4
double Buffer0[];
double Buffer1[];
double Buffer2[];
double Buffer3[];
double Zscore;
   
double Nprof,Nloose,SredP,SredP1,SredL,SredL1,GrosProf,GrosLoose,Sred,Sred1,Sred2,LastMO,LastZscore;
double Nobchee,XZscore,MO;
double Prof_Handle,Rscore_Handle,ProfitFactor,LastPF;

int OnInit()
  {
   SetIndexBuffer(0,Buffer0,INDICATOR_DATA);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   SetIndexBuffer(1,Buffer1,INDICATOR_DATA);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
   SetIndexBuffer(2,Buffer2,INDICATOR_DATA);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);
   SetIndexBuffer(3,Buffer3,INDICATOR_DATA);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0.0);
  //Prof_Handle=iCustom(NULL, 0, "TDSEQUENTA v2015 Fileswrire",5,8,12,7,3,3,3,1);
   //Rscore=iCustom(NULL, 0, "TDSEQUENTA v2015 Fileswrire",5,8,12,7,3,3,3,8);
      
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(
                const int rates_total,       // размер входных таймсерий
                const int prev_calculated,   // обработано баров на предыдущем вызове
                const datetime& time[],      // Time
                const double& open[],        // Open
                const double& high[],        // High
                const double& low[],         // Low
                const double& close[],       // Close
                const long& tick_volume[],   // Tick Volume
                const long& volume[],        // Real Volume
                const int &spread[]          // Spread
                )
 { 
   int i;

   if(prev_calculated==0) // первый расчёт
     {
     
     
      for(i=rates_total-1; i>0; i--)
        {
       double  Profit=(iCustom(NULL, 0, "TDSEQUENTA v2015 Fileswrire",5,8,12,7,3,3,3,1,i)); 
       double  Rscore=iCustom(NULL, 0, "TDSEQUENTA v2015 Fileswrire",5,8,12,7,3,3,3,8,i); 
        
       if (Profit>0)  {Nprof=Nprof+1;
                                                      Sred=Sred+Profit;
                                                      SredP1=SredP1+Profit;
                                                      SredP=SredP1/Nprof;
                                                      GrosProf=GrosProf+Profit;
                                                     } 
                                                     
       if (Profit<0)  { Nloose=Nloose+1;
                                                      Sred=Sred+Profit;
                                                      SredL1=SredL1+(Profit*-1);                                                    
                                                      SredL=SredL1/Nloose;
                                                      GrosLoose=GrosLoose+(Profit*-1);
                                                     } 
                                                     
       Nobchee=Nprof+Nloose;
       XZscore=2*Nprof*Nloose;
       if (((Nprof+Nloose)!=0)&&(SredL!=0)) MO=(1+(SredP/SredL))*(Nprof/(Nprof+Nloose))-1; //MO
      //////////стандартное отклонение//////////
      //if (Nobchee>0)Sred1=Sred1+((Profit-(Sred/Nobchee))*(Profit-(Sred/Nobchee)));
     //if (Nobchee>0) Sred2=sqrt(Sred1/Nobchee);
    // if (Sred2>0) Buffer0[i]=MO/Sred2;
       
       
       if (GrosLoose>0) ProfitFactor=GrosProf/GrosLoose; //ProfitFactor
      // Buffer1[i]=ProfitFactor;
       if ((Nobchee>2)&&(XZscore>5)) Zscore=(Nobchee * (Rscore - 0.5) - XZscore) /sqrt (XZscore * (XZscore - Nobchee) / (Nobchee -1)); // Zscore
      // Buffer2[i]=Zscore;
        Buffer0[i]=(LastMO-MO)*100;
        Buffer1[i]=LastZscore-Zscore;
        LastPF=ProfitFactor;
        LastMO=MO;
        LastZscore=Zscore;
        } 
       
     }
 return(rates_total);    
     }
//--- OnCalculate done. Return new prev_calculated.
   //return(0);
  //+------------------------------------------------------------------+
Dmitiry Ananiev
6584
Dmitiry Ananiev 2015.03.22 16:26  

Если надо вычесть один массив из другого и компилятор ругается, то надо сделать это поэлементно. что-то типа : 

int Buf0[20],Buf1[20], Buf2[20];

for  (int i = 0; i<20;i++) { Buf0[i] =  Buf1[i]-Buf2[i];}  
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий