엘리엇 파동 이론에 기반한 거래 전략 - 페이지 46

 
일반적으로 이러한 사소한 프로그래밍은 이 스레드에서 논의할 가치가 전혀 없다고 생각합니다.


감사합니다... 책에서 관련 장을 찾았습니다. 그건 그렇고, 누군가가 어느 정도의 고대 코드에서 오류를 발견하면 내 코를 찌르면 감사 할 것입니다 ... 갑자기 놓쳤습니다. :-)

추신: 질문을 줄이도록 노력하겠습니다. :-)
 
제가 현재 가지고 있는 코드에서는 예상 시간을 저장하는 특별한 함수를 호출하지 않고 분산을 계산하고,
if(크기-2!=0) 분산=분산/(크기-2);
일반적으로 이러한 사소한 프로그래밍은 이 스레드에서 논의할 가치가 전혀 없다고 생각합니다.


그들은 서있다, 그들은 서있다.
if(size-2!=0)을 확인해야 할 필요성을 이해하지 못하기 때문에 이것이 바로 시간입니다.
그리고 표본 추정치의 사용을 어렴풋이 기억하고 disper=disper/(size-2) (disper=disper/(size) 대신)에 대해 강력하게 주장하지는 않겠지만 공식을 날카롭게 하는 것은 의미가 없다고 확신합니다( 즉, 이 경우에는 그들 사이에 차이가 없음)은 2입니다.
 
... 나는 공식을 날카롭게하는 것이 의미가 없다고 확신합니다 (즉,이 경우 둘 사이에는 차이가 없습니다). 이것은 두 가지입니다.


나는 수학자로 밝혀지지 않았지만 크기가 무한대에 이르면 분산은 0이 되는 경향이 있는 것 같습니다. 따라서 400개 막대의 샘플을 평가하면 1 또는 2를 뺍니다. 그들에게서, 아니면 최종 결과를 위해 아무 것도 빼지 않으면 큰 영향을 미치지 않을 것입니다 ... 그럼에도 불구하고 공식은 공식이며 삼촌이 스마트 북에 "N-2"를 썼다면 개인적으로 나는 경향이 있습니다. 그의 조언을 따르기 위해 ... :-)
 
if(size-2!=0)을 확인해야 할 필요성을 이해하지 못하기 때문에 이것이 바로 시간입니다.
그리고 표본 추정치의 사용을 어렴풋이 기억하고 disper=disper/(size-2) (disper=disper/(size) 대신)에 대해 강력하게 주장하지는 않겠지만 공식을 날카롭게 하는 것은 의미가 없다고 확신합니다( 즉, 이 경우에는 그들 사이에 차이가 없음)은 2입니다.

물론 원칙적으로 이 조건은 완전히 중복됩니다.
코드를 작성하는 동안 처음에 이 작업을 수행한 것뿐입니다. 샘플이 분명히 더 크기 때문에 0이 될 수 없기 때문에 나누기 전에 검사를 제거했습니다. 그러나 코드가 개발되면서 때때로 0으로 나누기 오류가 발생하기 시작했습니다. 동시에 MT4에는 디버거가 없기 때문에 이 0이 나타난 위치를 찾기가 어려웠습니다. 그리고 내가 모든 나눗셈에 대해 0으로 나눗셈을 확인하는 조건을 도입하기 전까지, 나는 여전히 내가 어떤 특정 나눗셈에 0을 가지고 있는지 이해할 수 없었습니다! 물론 앞으로는 이 추가 검사를 제거할 수 있습니다. 대부분의 시간이 몇 가지 중복 코드 안정성 검사가 아니라 계산 자체에 소비되기 때문에 이것이 계산 시간에 어떤 이득을 줄지는 의심스럽습니다.

이 공식에서 우리 작업에 대한 근본적인 차이는 없으며 이는 눈에 띄는 방식으로 최종 이익에 거의 반영되지 않습니다. 그러나 수학에 따라야 하는 방식에 따라 모든 것을 완전히 수행하지 않는 이유는 무엇입니까? 결국, Vladislava 시스템에서 우리는 주관성에서 벗어나 수학적 방법을 기반으로 현재 시장 상황에 대한 가장 객관적인 평가를 얻으려고합니다.
 
나는 수학자로 밝혀지지 않았지만 크기가 무한대에 가까워지면 분산은 0이되는 경향이 있습니다 ...

네가 옳아! 그러나 그의 진술의 첫 부분에서만 ;o)))
 

Vladislav, 나타난 새로운 정보에 비추어 Murray 표시기 코드를 수정하시겠습니까? 우리는 새 버전을 기다리고 있습니다; o)!


그래서 지금은 차이점이 명확하게 보입니다. 첫 번째 매개변수를 true로 설정하고 이전 알고리즘에 따라 옥타브를 얻습니다. 즉, 극한값을 찾기 위한 내장 함수를 사용합니다.
false로 설정하면(기본값) IMHO를 얻습니다. 차이점은 다음과 같습니다. 샘플을 결정하기 위해 주어진 영역에서 가장 큰 높음 및 가장 작은 낮음과 같은 극단적인 극단이 결정됩니다. 이렇게 하면 최소한의 확률로 완료된 추세의 일부를 캡처할 수 있습니다. 그런 다음 마지막 막대의 최고/최저 값과 비교됩니다. 즉, 지정된 범위의 한쪽에만 있습니다. 추세에 있는 경우 설정된 수준을 쉽게 돌파할 수 있으며 옥타브를 다시 작성해야 합니다. 제 시간에.
//+------------------------------------------------------------------+
//|                                                   MMLevls_VG.mq4 |
//|                       Copyright © 2006, Vladislav Goshkov (VG).  |
//|                                           4vg@mail.ru            |
//|                                       Many thanks to Tim Kruzel  |
//+------------------------------------------------------------------+
#property copyright "Vladislav Goshkov (VG)."
#property link      "4vg@mail.ru"

#property indicator_chart_window

// ============================================================================================
// * Линии 8/8 и 0/8 (Окончательное сопротивление).
// * Эти линии самые сильные и оказывают сильнейшие сопротивления и поддержку.
// ============================================================================================
//* Линия 7/8  (Слабая, место для остановки и разворота). Weak, Stall and Reverse
//* Эта линия слаба. Если цена зашла слишком далеко и слишком быстро и если она остановилась около этой линии, 
//* значит она развернется быстро вниз. Если цена не остановилась около этой линии, она продолжит движение вверх к 8/8.
// ============================================================================================
//* Линия 1/8  (Слабая, место для остановки и разворота). Weak, Stall and Reverse
//* Эта линия слаба. Если цена зашла слишком далеко и слишком быстро и если она остановилась около этой линии, 
//* значит она развернется быстро вверх. Если цена не остановилась около этой линии, она продолжит движение вниз к 0/8.
// ============================================================================================
//* Линии 6/8 и 2/8 (Вращение, разворот). Pivot, Reverse
//* Эти две линии уступают в своей силе только 4/8 в своей способности полностью развернуть ценовое движение.
// ============================================================================================
//* Линия 5/8 (Верх торгового диапазона). Top of Trading Range
//* Цены всех рынков тратят 40% времени, на движение между 5/8 и 3/8 линиями. 
//* Если цена двигается около линии 5/8 и остается около нее в течении 10-12 дней, рынок сказал что следует 
//* продавать в этой «премиальной зоне», что и делают некоторые люди, но если цена сохраняет тенденцию оставаться 
//* выше 5/8, то она и останется выше нее. Если, однако, цена падает ниже 5/8, то она скорее всего продолжит 
//* падать далее до следующего уровня сопротивления.
// ============================================================================================
//* Линия 3/8 (Дно торгового диапазона). Bottom of Trading Range
//* Если цены ниже этой лини и двигаются вверх, то цене будет сложно пробить этот уровень. 
//* Если пробивают вверх эту линию и остаются выше нее в течении 10-12 дней, значит цены останутся выше этой линии 
//* и потратят 40% времени двигаясь между этой линией и 5/8 линией.
// ============================================================================================
//* Линия 4/8 (Главная линия сопротивления/поддержки). Major Support/Resistance
//* Эта линия обеспечивает наибольшее сопротивление/поддержку. Этот уровень является лучшим для новой покупки или продажи. 
//* Если цена находится выше 4/8, то это сильный уровень поддержки. Если цена находится ниже 4/8, то это прекрасный уровень 
//* сопротивления.
// ============================================================================================
extern bool OldVersion = false;
extern int P = 90;
extern int MMPeriod = 1440;
extern int StepBack = 0;

extern color  mml_clr_m_2_8 = White;       // [-2]/8
extern color  mml_clr_m_1_8 = White;       // [-1]/8
extern color  mml_clr_0_8   = Aqua;        //  [0]/8
extern color  mml_clr_1_8   = Yellow;      //  [1]/8
extern color  mml_clr_2_8   = Red;         //  [2]/8
extern color  mml_clr_3_8   = Green;       //  [3]/8
extern color  mml_clr_4_8   = Blue;        //  [4]/8
extern color  mml_clr_5_8   = Green;       //  [5]/8
extern color  mml_clr_6_8   = Red;         //  [6]/8
extern color  mml_clr_7_8   = Yellow;      //  [7]/8
extern color  mml_clr_8_8   = Aqua;        //  [8]/8
extern color  mml_clr_p_1_8 = White;       // [+1]/8
extern color  mml_clr_p_2_8 = White;       // [+2]/8

extern int    mml_wdth_m_2_8 = 2;        // [-2]/8
extern int    mml_wdth_m_1_8 = 1;        // [-1]/8
extern int    mml_wdth_0_8   = 2;        //  [0]/8
extern int    mml_wdth_1_8   = 1;        //  [1]/8
extern int    mml_wdth_2_8   = 1;        //  [2]/8
extern int    mml_wdth_3_8   = 1;        //  [3]/8
extern int    mml_wdth_4_8   = 2;        //  [4]/8
extern int    mml_wdth_5_8   = 1;        //  [5]/8
extern int    mml_wdth_6_8   = 1;        //  [6]/8
extern int    mml_wdth_7_8   = 1;        //  [7]/8
extern int    mml_wdth_8_8   = 2;        //  [8]/8
extern int    mml_wdth_p_1_8 = 1;        // [+1]/8
extern int    mml_wdth_p_2_8 = 2;        // [+2]/8

extern color  MarkColor   = Blue;
extern int    MarkNumber  = 217;


double  dmml = 0,
        dvtl = 0,
        sum  = 0,
        v1 = 0,
        v2 = 0,
        mn = 0,
        mx = 0,
        x1 = 0,
        x2 = 0,
        x3 = 0,
        x4 = 0,
        x5 = 0,
        x6 = 0,
        y1 = 0,
        y2 = 0,
        y3 = 0,
        y4 = 0,
        y5 = 0,
        y6 = 0,
        octave = 0,
        fractal = 0,
        range   = 0,
        finalH  = 0,
        finalL  = 0,
        mml[13];

string  ln_txt[13],        
        buff_str = "";
        
int     
        bn_Lo   = -1,
        bn_Hi   = -1,
        extr_bn_Lo  = -1,
        extr_bn_Hi  = -1,
        OctLinesCnt = 13,
        mml_thk = 8,
        mml_clr[13],
        mml_wdth[13],
        mml_shft = 35,
        nT = 0,
        nB = 0,
        nP = 0,
        nDigits = 0,
        i = 0;
int NewPeriod=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
//---- indicators
   if(MMPeriod>0)
      NewPeriod   = P*MathCeil(MMPeriod/Period());
   else NewPeriod = P;
   
   ln_txt[0]  = "[-2/8]P";// "extremely overshoot [-2/8]";// [-2/8]
   ln_txt[1]  = "[-1/8]P";// "overshoot [-1/8]";// [-1/8]
   ln_txt[2]  = "[0/8]P";// "Ultimate Support - extremely oversold [0/8]";// [0/8]
   ln_txt[3]  = "[1/8]P";// "Weak, Stall and Reverse - [1/8]";// [1/8]
   ln_txt[4]  = "[2/8]P";// "Pivot, Reverse - major [2/8]";// [2/8]
   ln_txt[5]  = "[3/8]P";// "Bottom of Trading Range - [3/8], if 10-12 bars then 40% Time. BUY Premium Zone";//[3/8]
   ln_txt[6]  = "[4/8]P";// "Major Support/Resistance Pivotal Point [4/8]- Best New BUY or SELL level";// [4/8]
   ln_txt[7]  = "[5/8]P";// "Top of Trading Range - [5/8], if 10-12 bars then 40% Time. SELL Premium Zone";//[5/8]
   ln_txt[8]  = "[6/8]P";// "Pivot, Reverse - major [6/8]";// [6/8]
   ln_txt[9]  = "[7/8]P";// "Weak, Stall and Reverse - [7/8]";// [7/8]
   ln_txt[10] = "[8/8]P";// "Ultimate Resistance - extremely overbought [8/8]";// [8/8]
   ln_txt[11] = "[+1/8]P";// "overshoot [+1/8]";// [+1/8]
   ln_txt[12] = "[+2/8]P";// "extremely overshoot [+2/8]";// [+2/8]

   //mml_shft = 3;
   mml_thk  = 3;

   // Начальная установка цветов уровней октав и толщины линий
   mml_clr[0]  = mml_clr_m_2_8;   mml_wdth[0] = mml_wdth_m_2_8; // [-2]/8
   mml_clr[1]  = mml_clr_m_1_8;   mml_wdth[1] = mml_wdth_m_1_8; // [-1]/8
   mml_clr[2]  = mml_clr_0_8;     mml_wdth[2] = mml_wdth_0_8;   //  [0]/8
   mml_clr[3]  = mml_clr_1_8;     mml_wdth[3] = mml_wdth_1_8;   //  [1]/8
   mml_clr[4]  = mml_clr_2_8;     mml_wdth[4] = mml_wdth_2_8;   //  [2]/8
   mml_clr[5]  = mml_clr_3_8;     mml_wdth[5] = mml_wdth_3_8;   //  [3]/8
   mml_clr[6]  = mml_clr_4_8;     mml_wdth[6] = mml_wdth_4_8;   //  [4]/8
   mml_clr[7]  = mml_clr_5_8;     mml_wdth[7] = mml_wdth_5_8;   //  [5]/8
   mml_clr[8]  = mml_clr_6_8;     mml_wdth[8] = mml_wdth_6_8;   //  [6]/8
   mml_clr[9]  = mml_clr_7_8;     mml_wdth[9] = mml_wdth_7_8;   //  [7]/8
   mml_clr[10] = mml_clr_8_8;     mml_wdth[10]= mml_wdth_8_8;   //  [8]/8
   mml_clr[11] = mml_clr_p_1_8;   mml_wdth[11]= mml_wdth_p_1_8; // [+1]/8
   mml_clr[12] = mml_clr_p_2_8;   mml_wdth[12]= mml_wdth_p_2_8; // [+2]/8
   
   
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
//---- TODO: add your code here
Comment(" ");   
for(i=0;i<OctLinesCnt;i++) {
    buff_str = "mml"+i;
    ObjectDelete(buff_str);
    buff_str = "mml_txt"+i;
    ObjectDelete(buff_str);
    }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

//=========================================================================
int FindeExtrHi_bn(int n_bg, int n_nd ){

int    ext_bn = -1;
double ext_Hi = -10000000000000000000.0;
int    k = 0;
int    stop_bn = -1;
int    start_bn = -1;
int    cur_bn = n_bg;
    //Print(" FindeExtrHi_bn : n_bg = ", n_bg," n_nd = ", n_nd);
    if(n_bg<n_nd){
       start_bn = n_bg+1;
       stop_bn  = n_nd; 
       //Print(" FindeExtrHi_bn (n_bg<n_nd): start_bn = ", start_bn," stop_bn = ", stop_bn);
       for(int j=start_bn;j<stop_bn;j++){
          if( (High[j]>High[j+1])&&(High[j]>High[j-1])&&(High[j]>ext_Hi) ){
             ext_bn = j;
	          ext_Hi = High[j];
	          }
	       }//for(int j=start_bn;j<stop_bn;j++){
       }//if(n_bg<n_nd){


    if(n_bg>n_nd){
       start_bn = n_bg;
       stop_bn  = n_nd+1; 
       //Print(" FindeExtrHi_bn (n_bg>n_nd): start_bn = ", start_bn," stop_bn = ", stop_bn);
       for( j=start_bn;j>stop_bn;j--){
          if( (High[j]>High[j+1])&&(High[j]>High[j-1])&&(High[j]>ext_Hi) ){
             ext_bn = j;
	          ext_Hi = High[j];
	          }
          }//for(int j=start_bn;j>stop_bn;j--){
       }//if(n_bg>n_nd){
   
   //Print(" FindeExtrHi_bn:=> ext_bn = ",ext_bn);
   return(ext_bn);
   }

//=========================================================================
int FindeExtrLo_bn(int n_bg, int n_nd ){

int    ext_bn = -1;
double ext_Lo = 10000000000000000000.0;
int    stop_bn = -1;
int    start_bn = -1;
int    cur_bn = n_bg;


    //Print(" FindeExtrLo_bn : n_bg = ", n_bg," n_nd = ", n_nd);

    if(n_bg<n_nd){
       start_bn = n_bg+1;
       stop_bn  = n_nd; 
       //Print(" FindeExtrLo_bn (n_bg<n_nd): start_bn = ", start_bn," stop_bn = ", stop_bn);
       for(int j=start_bn;j<stop_bn;j++){
          if( (Low[j]<Low[j+1])&&(Low[j]<Low[j-1])&&(Low[j]<ext_Lo) ){
             ext_bn = j;
	          ext_Lo = Low[j];
	          }
	       }//for(int j=start_bn;j<stop_bn;j++){
       }//if(n_bg<n_nd){


    if(n_bg>n_nd){
       start_bn = n_bg;
       stop_bn  = n_nd+1; 
       //Print(" FindeExtrLo_bn (n_bg>n_nd): start_bn = ", start_bn," stop_bn = ", stop_bn);
       for( j=start_bn;j>stop_bn;j--){
          if( (Low[j]<Low[j+1])&&(Low[j]<Low[j-1])&&(Low[j]<ext_Lo) ){
             ext_bn = j;
	          ext_Lo = Low[j];
	          }
          }//for(int j=start_bn;j>stop_bn;j--){
       }//if(n_bg>n_nd){
   //Print(" FindeExtrLo_bn:=> ext_bn = ",ext_bn);
   return(ext_bn);
   }

int start() {
//---- TODO: add your code here

if( (nT!=Time[0])||(nP!=Period())||(nB!=Bars) ) {
   
  //price
  //Print("MMLevls : NewPeriod = ",NewPeriod);
   if(OldVersion){
      bn_Lo = Lowest(NULL,0,MODE_LOW,NewPeriod,StepBack);
      bn_Hi = Highest(NULL,0,MODE_HIGH,NewPeriod,StepBack);
   } else {//  if(OldVersion){
      extr_bn_Lo = FindeExtrLo_bn(NewPeriod+StepBack,StepBack);
      extr_bn_Hi = FindeExtrHi_bn(NewPeriod+StepBack,StepBack);
      //Print("MMLevls : NewPeriod = ",NewPeriod," extr_bn_Lo = ",extr_bn_Lo ," extr_bn_Hi = ",extr_bn_Hi);
      //Print("MMLevls : NewPeriod = ",NewPeriod," High[extr_bn_Lo] = ",High[extr_bn_Lo] ," extr_bn_Hi = ",extr_bn_Hi);
      if(extr_bn_Lo>=0){
         bn_Lo = extr_bn_Lo;
         for(int k=0;k<1;k++){
            if(Low[k]<Low[extr_bn_Lo]) {
               bn_Lo = k;
               break;
               }
            }
         } else bn_Lo = Lowest(NULL,0,MODE_LOW,NewPeriod,StepBack);
      if(extr_bn_Hi>=0){
         bn_Hi = extr_bn_Hi;
         for(k=0;k<1;k++){
            if(High[k]>High[extr_bn_Hi]) {//ошибка была здесь
               bn_Lo = k;
               break;
               } 
            }
         } else  bn_Hi = Highest(NULL,0,MODE_HIGH,NewPeriod,StepBack);
      // Пусть будет на всякий случай :).
      if(High[bn_Hi]<Low[bn_Lo]){
         //Print("MM ??? HiLo :High[",bn_Hi,"] = ",High[bn_Hi]," Low",bn_Lo,"] = ",Low[bn_Lo]);
         bn_Lo = Lowest(NULL,0,MODE_LOW,NewPeriod,StepBack);
         bn_Hi = Highest(NULL,0,MODE_HIGH,NewPeriod,StepBack);
         }

      }//} else {//  if(OldVersion){

   v1 = Low[bn_Lo];
   v2 = High[bn_Hi];

//determine fractal.....
   if( v2<=250000 && v2>25000 )
   fractal=100000;
   else
     if( v2<=25000 && v2>2500 )
     fractal=10000;
     else
       if( v2<=2500 && v2>250 )
       fractal=1000;
       else
         if( v2<=250 && v2>25 )
         fractal=100;
         else
           if( v2<=25 && v2>12.5 )
           fractal=12.5;
           else
             if( v2<=12.5 && v2>6.25)
             fractal=12.5;
             else
               if( v2<=6.25 && v2>3.125 )
               fractal=6.25;
               else
                 if( v2<=3.125 && v2>1.5625 )
                 fractal=3.125;
                 else
                   if( v2<=1.5625 && v2>0.390625 )
                   fractal=1.5625;
                   else
                     if( v2<=0.390625 && v2>0)
                     fractal=0.1953125;
      
   range=(v2-v1);
   //Print(" v2 = ",v2," v1 = ",v1," range = ",range );
   sum=MathFloor(MathLog(fractal/range)/MathLog(2));
   octave=fractal*(MathPow(0.5,sum));
   mn=MathFloor(v1/octave)*octave;
   if( (mn+octave)>v2 )
   mx=mn+octave; 
   else
     mx=mn+(2*octave);


// calculating xx
//x2
    if( (v1>=(3*(mx-mn)/16+mn)) && (v2<=(9*(mx-mn)/16+mn)) )
    x2=mn+(mx-mn)/2; 
    else x2=0;
//x1
    if( (v1>=(mn-(mx-mn)/8))&& (v2<=(5*(mx-mn)/8+mn)) && (x2==0) )
    x1=mn+(mx-mn)/2; 
    else x1=0;

//x4
    if( (v1>=(mn+7*(mx-mn)/16))&& (v2<=(13*(mx-mn)/16+mn)) )
    x4=mn+3*(mx-mn)/4; 
    else x4=0;

//x5
    if( (v1>=(mn+3*(mx-mn)/8))&& (v2<=(9*(mx-mn)/8+mn))&& (x4==0) )
    x5=mx; 
    else  x5=0;

//x3
    if( (v1>=(mn+(mx-mn)/8))&& (v2<=(7*(mx-mn)/8+mn))&& (x1==0) && (x2==0) && (x4==0) && (x5==0) )
    x3=mn+3*(mx-mn)/4; 
    else x3=0;

//x6
    if( (x1+x2+x3+x4+x5) ==0 )
    x6=mx; 
    else x6=0;

     finalH = x1+x2+x3+x4+x5+x6;
// calculating yy
//y1
    if( x1>0 )
    y1=mn; 
    else y1=0;

//y2
    if( x2>0 )
    y2=mn+(mx-mn)/4; 
    else y2=0;

//y3
    if( x3>0 )
    y3=mn+(mx-mn)/4; 
    else y3=0;

//y4
    if( x4>0 )
    y4=mn+(mx-mn)/2; 
    else y4=0;

//y5
    if( x5>0 )
    y5=mn+(mx-mn)/2; 
    else y5=0;

//y6
    if( (finalH>0) && ((y1+y2+y3+y4+y5)==0) )
    y6=mn; 
    else y6=0;

    finalL = y1+y2+y3+y4+y5+y6;

    for( i=0; i<OctLinesCnt; i++) {
         mml[i] = 0;
         }
         
   dmml = (finalH-finalL)/8;
   //Print("MMLevls : NewPeriod = ",NewPeriod," dmml = ",dmml," finalL = ",finalL);
   mml[0] =(finalL-dmml*2); //-2/8
   for( i=1; i<OctLinesCnt; i++) {
        mml[i] = mml[i-1] + dmml;
        }
   for( i=0; i<OctLinesCnt; i++ ){
        buff_str = "mml"+i;
        if(ObjectFind(buff_str) == -1) {
           ObjectCreate(buff_str, OBJ_HLINE, 0, Time[0], mml[i]);
           ObjectSet(buff_str, OBJPROP_STYLE, STYLE_SOLID);
           ObjectSet(buff_str, OBJPROP_COLOR, mml_clr[i]);
           ObjectSet(buff_str, OBJPROP_WIDTH, mml_wdth[i]);
           ObjectMove(buff_str, 0, Time[0],  mml[i]);
           }
        else {
           ObjectMove(buff_str, 0, Time[0],  mml[i]);
           }
             
        buff_str = "mml_txt"+i;
        if(ObjectFind(buff_str) == -1) {
           ObjectCreate(buff_str, OBJ_TEXT, 0, Time[mml_shft], mml_shft);
           ObjectSetText(buff_str, ln_txt[i], 8, "Arial", mml_clr[i]);
           ObjectMove(buff_str, 0, Time[mml_shft],  mml[i]);
           }
        else {
           ObjectMove(buff_str, 0, Time[mml_shft],  mml[i]);
           }
        } // for( i=1; i<=OctLinesCnt; i++ ){

   string buff_str = "LR_LatestCulcBar";
   if(ObjectFind(buff_str) == -1) {
      ObjectCreate(buff_str, OBJ_ARROW,0, Time[StepBack], Low[StepBack]-2*Point );
      ObjectSet(buff_str, OBJPROP_ARROWCODE, MarkNumber);
      ObjectSet(buff_str, OBJPROP_COLOR, MarkColor);
      }
   else {
      ObjectMove(buff_str, 0, Time[StepBack], Low[StepBack]-2*Point );
      }

   nT = Time[0];
   nB = Bars;
   nP = Period();
   }//if( (nT!=Time[0])||(nP!=Period())||(nB!=Bars) ) {
 
//---- End Of Program
  return(0);
  }
//+------------------------------------------------------------------+ 




행운을 빕니다.
실수가 있다고 위협했습니다. 코드가 다시 로드되었습니다. 이제 그 차이가 눈에 띄지 않습니다. :).

 
Так как я не понимаю необходимость проверки if(size-2!=0) - это раз.
И хотя я смутно вспоминаю использование оценок по выборке и не буду сильно спорить против disper=disper/(size-2) (вместо disper=disper/(size)) , уверен, что нет смысла затачивать форумулу(то есть, разницы между ними нет в данном случае) - это два.

물론 원칙적으로 이 조건은 완전히 중복됩니다.
코드를 작성하는 동안 처음에 이 작업을 수행한 것뿐입니다. 샘플이 분명히 더 크기 때문에 0이 될 수 없기 때문에 나누기 전에 검사를 제거했습니다. 그러나 코드가 개발되면서 때때로 0으로 나누기 오류가 발생하기 시작했습니다. 동시에 MT4에는 디버거가 없기 때문에 이 0이 나타난 위치를 찾기가 어려웠습니다. 그리고 내가 모든 나눗셈에 대해 0으로 나눗셈을 확인하는 조건을 도입하기 전까지, 나는 여전히 내가 어떤 특정 나눗셈에 0을 가지고 있는지 이해할 수 없었습니다! 물론 앞으로는 이 추가 검사를 제거할 수 있습니다. 대부분의 시간이 몇 가지 중복 코드 안정성 검사가 아니라 계산 자체에 소비되기 때문에 이것이 계산 시간에 어떤 이득을 줄지는 의심스럽습니다.

이 공식에서 우리 작업에 대한 근본적인 차이는 없으며 이는 눈에 띄는 방식으로 최종 이익에 거의 반영되지 않습니다. 그러나 수학에 따라야 하는 방식에 따라 모든 것을 완전히 수행하지 않는 이유는 무엇입니까? 결국, Vladislava 시스템에서 우리는 주관성에서 벗어나 수학적 방법을 기반으로 현재 시장 상황에 대한 가장 객관적인 평가를 얻으려고합니다.


실제로 오류는 무시할 수 있기 때문에 차이가 전혀 없지만 모든 사람은 물론 자신의 방식으로 계산할 수 있습니다.

 
그래서 - 지금은 차이가 명확하게 보입니다 - 첫 번째 매개변수를 false로 설정 - 이전 알고리즘에 따라 옥타브를 얻습니다. 즉, 극한값을 찾기 위한 내장 함수를 사용합니다.
실제 설치(기본값) - IMHO를 얻습니다.

실제로 표시기 작동의 차이가 이제 눈에 보입니다.
수정해주셔서 감사합니다! 이제 "모든 수준이 일일 기간으로 축소됨"이라는 문구가 수정된 지표에서 완전히 구현되었을 것입니다.
 
블라디슬라프,
제발, 이 상황이 얼마나 정확합니까? USDCAD H4, 오프셋 40.
https://c.mql5.com/mql4/forum/2006/06/new_indicator.zip
가격이 지표의 가장 낮은 선 아래로 1.5자리 하락한 것을 볼 수 있습니다. 이래서는 안되는 것 같죠?
 
블라디슬라프,
제발, 이 상황이 얼마나 정확합니까? USDCAD H4, 오프셋 40.
https://c.mql5.com/mql4/forum/2006/06/new_indicator.zip
가격이 지표의 가장 낮은 선 아래로 1.5자리 하락한 것을 볼 수 있습니다. 이래서는 안되는 것 같죠?


안된다. 죄송합니다. 범위의 오른쪽 가장자리와 비교할 때 오타가 발생하여 오류가 발생했습니다. 나는 고쳤다. 이제 차이점이 그렇게 눈에 띄지 않습니다. :). 거기에서 극한의 높은 막대 번호 대신 극한의 낮은 막대 번호가 최고로 사용되었습니다. 나는 역사를 통해 자세히 운전하기 시작했을 때 알게되었습니다.
코드를 전송하겠습니다.

행운을 빕니다.

위협이 다시 로드되었습니다.