торговая стратегия на базе Волновой теории Эллиота - страница 64

 

Я совершенно согласен с Rosh'ем. Приток лучше всего ассоциируется с дельтой, а Close[] - с накопленным в водохранилище объемом. Однако, как мне кажется, поскольку Close[] есть сумма нарастающим итогом от дельты, то эти два ряда связаны весьма тесно. Поэтому и коэффициенты Херста для них должны как-то корелировать. Впрочем, на мое мнение здесь вряд ли стоит полагаться. Все, что я говорю основано лишь на моем общем понимании. Вот когда я поработаю с этим руками, я смогу сформировать более обоснованное мнение.


И я постепенно склоняюсь к этому взгляду. Остается кое-что уточнить, а именно. Предположим, рассуждая по аналогии, Close[] – уровень воды в водохранилище. Мы не имеем возможности измерять точный приток (дожди, многочисленные речки и т.д.), а будем оценивать приток, по уровню.

Когда уровень воды увеличивается, все понятно – притоком будет положительная разность. А если начали наблюдение в засушливое лето и как следствие – отрицательные значения изменения уровня. Ведь уменьшение уровня не означает, что не было притока, просто утекло больше, чем притекло. Средний приток должен равняться объему, ежегодно спускаемому из водохранилища. Опять всплывает некоторая цикличность.

Хочу уточнить, что правильнее брать с методологической точки зрения в качестве притока для моего случая:
-Только разность
- Разность по модулю
- только положительную разность

Интуитивно понимаю, что главное – это правильно определить приток.

Так же сомневаюсь, что между Close[] и Close[i]-Close[i+1] существует корреляция. Я когда-то пытался ее найти методами ЦОС (в качестве теста, тогда как раз отлаживал функции для определения корреляции и автокорреляции сигналов), результат расчета – никак не связаны. Это, в общем, видно невооруженным глазом, если смотреть на форму сигнала. Но это методы ЦОС, возможно, что в данном случае их не логично использовать.

Так же, нельзя только по Close[i]-Close[i+1] воссоздать первоначальный ряд - необходимая информация как раз и теряется, а расчет Херста выполняется, фактически, по отличному от первоначального ряду.
 

Хочу уточнить, что правильнее брать с методологической точки зрения в качестве притока для моего случая:
-Только разность
- Разность по модулю
- только положительную разность

Интуитивно понимаю, что главное – это правильно определить приток.

Так же сомневаюсь, что между Close[] и Close[i]-Close[i+1] существует корреляция.
...
Так же, нельзя только по Close[i]-Close[i+1] воссоздать первоначальный ряд - необходимая информация как раз и теряется, а расчет Херста выполняется, фактически, по отличному от первоначального ряду.


Я бы взял только разность. И еще - взялся за гуж - не говрои , что не дюж :)

http://forex.kbpauk.ru/showflat.php/Cat/0/Number/120077/an/0/page/0#Post120077
 

Действительно, я использую совершенно другие подходы. Хотя спектральный анализ случайных рядов - это, мне кажется, очень интересное направление. Однако, слишком сложное для меня. И слишком далекое от моей специальности, чтобы браться за это сейчас.


Да и я не профессиональный «цифровик». Три месяца тому назад натолкнулся на статью, расхваливающую использование ЦОС в трейдинге. Мне это показалось интересным, и я решил сделать для себя базовый набор цифровых фильтров. Сказано – сделано. Пошел в книжный магазин, выбрал две самые толстые книги и купил. После прочтения первых 200 страниц первой попавшейся под руку книги, закрыл ее и, бормоча матерные выражения, полез снимать запылившийся двухтомник матанализа.

Мне было интересно не купить готовый продукт (денег вполне на это хватает), а сделать свой, предполагая, что изучая эту область – появятся новые идеи. Так и случилось. В течение 3 месяцев, не отвлекаясь от основной работы, получил, что хотел – индикаторы на основе ЦОС и кучу идей.

Но совершенство, оно же не знает границ…. :о))) Хочется уточнить у профессионалов (так быстрее получиться или сам докопаюсь, но позже) некоторые тонкости по имеющимся фильтрам и написать действительно адаптивный фильтр.

Из того, что предлагают – ни у кого их нет, в смысле нет адаптивных фильтров.

PS: И до спектров скоро доберусь :о))))
 

...
Я бы взял только разность.
...


Я вот так же думаю. Уж больно правильные данные получаются, ну … почти правильные.
 
Да и я не профессиональный «цифровик»
......
– индикаторы на основе ЦОС и кучу идей.
......
Из того, что предлагают – ни у кого их нет, в смысле нет адаптивных фильтров.
PS: И до спектров скоро доберусь :о))))

Вот и я, верю в ЦОС и "не профессиональный «цифровик»"
Использую вот это:
"Пакет для технического анализа методами цифровой фильтрации
Разработана благодаря Keny (Олег, Красноярск, unclekenny@yandex.ru) и
Goodman (Зябрев Илья, Москва, info@goodman.ru)
Помощь при тестировании - Цыганков Андрей gypsy@mail.ru, Елизаров Олег TOPpoint@yandex.ru
Распространяется бесплатно в соответствии с принципами "AS-IS".
Пожалуйста о всех замечаниях и ошибках в работе сообщайте автору."
и есть одна нереализованная идея, как оптимизировать фильтры налету:
Собственно ничего нового. Это делается руками сотни раз, а вот как это автоматизировать? -
Я говорю о FATL SATL (FATL-SATL, FATL SATL CD ...) и подгонке их параметров
вручную с использованием спектрального анализатора(входит в пакет).
Нужна библиотека, производящая спектр анализ, дающая на выходе периоды
максимальной плотности сигнала(временного ряда). Анализируя эти данные
для разных фрагментов временного ряда можно пытаться предположить периоды, фазы, взвешенные ко-ты(амплитуды) гармонических составляющих(как? пока не знаю)
Чем больше гармонических составляющих можно определить тем с большей вероятностью можно прогнозировать развитие ряда. Все.
Еше. При сильном расхождении прогноза с реальностью, можно предположить реакцию
рынка на сильную новость. Теперь все.

Не програмист и не математик. :)
Эта ветка мне явно не позубам. Уже которую неделю грызу. :(
 
Vladislav, у меня возник вопрос по индикатору Мюррея. Я это уже давно заметил при использовании Вашего индикатора у себя в эксперте (самая последняя новая версия), что время от времени существуют дни, в которые новая версия индикатора не показывает корректно уровни, в то время как старая версия такого недостатка лишена. И я чтобы обойти этот сбой в такой момент времени просто пользуюсь последними корректно расчитанными значениями уровней. Раньше я списывал это просто на некое несовершенство тестера МТ4, но вот сегодня как раз возникла та самая ситуация, которую я наблюдаю уже давно у себя в эксперте при тестах на истории (то есть тестер не ошибался указывая на возможность такой ситуации! :o). Посмотрите, пожалуйста, скриншоты https://c.mql5.com/mql4/forum/2006/06/Murrey_new_and_old.zip
Два скриншота сделанные при единственном отличии в установке версии расчёта (OldVersion: true и false)
Видно, что старая версия показывает привычные уровни, в то время как новая при тех же параметрах получает сбой - "слипшиеся" уровни Мюррея. Вы могли бы как-то прокомментировать эту ситуацию? Действительно ли "слипшиеся" уровни Мюррея в новой версии индикатора являются лишь техническим сбоем, или же они несут более глубокий смысл? Например сегодня никаких уровней Мюррея просто не может существовать в виду сильнейшего движения и нужно просто подождать когда они например в понедельник корректно расчитаются и можно будет принимать решение о входе в рынок? А сегодня например, если не успел войти ещё вчера, то лучше оставаться вне рынка? Хотелось бы услышать Ваше мнение по этому поводу.

PS: А вот сейчас с приходом нового бара и новая версия стала показывать те же самые уровни Мюррея, что и старая. Наверное это скорее всего какая-то техническая ошибка новой версии расчёта уровней Мюррея.

PPS: Пришли ещё парочка баров и уровни в новой версии расчёта снова слиплись.
 
Пакет для технического анализа методами цифровой фильтрации

где можно посмотреть такой?
гугл молчит
 
Vladislav, у меня возник вопрос по индикатору Мюррея.
...............................................
PS: А вот сейчас с приходом нового бара и новая версия стала показывать те же самые уровни Мюррея, что и старая. Наверное это скорее всего какая-то техническая ошибка новой версии расчёта уровней Мюррея.

PPS: Пришли ещё парочка баров и уровни в новой версии расчёта снова слиплись.


Странно - понаблюдаю - конечно же такого быть не должно. Нужно смотреть инициализвацию массивов проверю.
Вообще-то у меня такого нет, но я не использую это как отдельный индикатор - просто встроил код в эксперта.

ЗЫ Нашел еще одно место, где была описка. Вы были правы - ошибка техническая. Вот правленный код :

i//+------------------------------------------------------------------+
//|                                                   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;
int CurPeriod=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
//---- indicators
   CurPeriod=Period();
   if(MMPeriod>CurPeriod)
      NewPeriod   = P*MathCeil(MMPeriod/CurPeriod);
   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) ) {
   CurPeriod=Period();
   if(MMPeriod>CurPeriod)
      NewPeriod   = P*MathCeil(MMPeriod/CurPeriod);
   else NewPeriod = P;
   
  //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);
      if(extr_bn_Lo>=0){
         bn_Lo = extr_bn_Lo;
         //Print("MMLevls : 1 bn_Lo = ",bn_Lo);
         for(int k=0;k<1;k++){
            if(Low[k]<Low[extr_bn_Lo]) {
               bn_Lo = k;
               break;
               }
            }
         //Print("MMLevls : 2 bn_Lo = ",bn_Lo);
         } 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_Hi = 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){

   //Print("MMLevls : Low[",bn_Lo,"] = ",Low[bn_Lo]," High[",bn_Hi,"] = ",High[bn_Hi]);
 
   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);
  }
//+------------------------------------------------------------------+ 



Удачи и попутных трендов.



 
ЗЫ Нашел еще одно место, где была описка. Вы были правы - ошибка техническая. Вот правленный код :

Действительно исправление ещё одной ошибки устранило проблему, так как только первоначальный вариант добавки кода в самом начале start() проблему не решал и я уже было собирался Вам высылать котировки и скриншоты для воспроизведения проблемы на Вашем компьютере. Но теперь это уже не нужно поскольку проблема Вами полностью устранена судя по моим наблюдениям работы самого последнего правленного кода. Буду переносить новый исправленный код в моего эксперта.

Большое Вам спасибо за оперативное решение проблемы!!!
 
Demax, Генератор цифровых методов - http://fx.qrz.ru/
Есть ещё платный от Финваре. не пробовал
Причина обращения: