эксперт на базе Волновой теории Эллиота - страница 12

 
Yurixx:
Integer:
Yurixx:


Представьте себе простую ТС, построенную на нормированном осцилляторе. На максимуме - продаем, на минимуме - покупаем. Таким образом, достаточно лишь вО время идентифицировать экстремум, чтобы успешно торговать. Просто, не правда ли ? И достаточно определенно. Сможете быстро (не надо очень быстро) сделать эту задачу ? Или хотя бы просто ее сделать ?


Могу и очень и быстро.


Отлично ! Тогда киньте на EURUSD, М1 индикатор RSI(14,Close) и решите задачу об идентификации без запаздывания экстремумов RSI.

Амплитуда изменения RSI между соседними экстремумами должна быть не менее 25.


Сформулируйте задачу точно и полностью. Если теоретически она решаема то практически тоже. После правильной постановки задачи они все решаются (причем и вы сами сможете). В этой задаче критерием идентификации экстремума является откат значения на 25 единиц, тоесть идентификация по такому критерию без запаздывания и теоретически не решается. Если определиться с критерием - более 25 слева и более 5, но менее 10 справа, то запаздывание будет меньше, но ложных сигналов больше.

 
//+------------------------------------------------------------------+
//|                                                     toYurixx.mq4 |
//|                                                                * |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "*"
#property link      "*"
 
#property indicator_separate_window
#property indicator_maximum 100
#property indicator_minimum 0
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 DeepSkyBlue
#property indicator_color3 Red
//---- input parameters
extern int       RightMore=5;
extern int       RightLess=10;
extern int       LeftMore=25;
 
 
//---- buffers
double rsi[];
double u[];
double l[];
 
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,rsi);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,159);
   SetIndexBuffer(1,u);
   SetIndexEmptyValue(1,0.0);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexArrow(2,159);
   SetIndexBuffer(2,l);
   SetIndexEmptyValue(2,0.0);
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    limit=Bars-IndicatorCounted();
      for(int i=0;i<limit;i++){
         rsi[i]=iRSI(NULL,0,14,0,i);
      }
      ArrayInitialize(u,EMPTY_VALUE);
      ArrayInitialize(l,EMPTY_VALUE);      
      for(i=Bars-1;i>=0;i--){
         double max=rsi[i];
         int maxb;
         for(int j=i;j<Bars;j++){
               if(rsi[j]>max){
                  max=rsi[j];
                  maxb=j;
               }
               if(max-rsi[i]>RightLess){
                  break;//не состоялся
               }
               if(max-rsi[j]>LeftMore){
                     if(max-rsi[i]>RightMore){//нашли
                        u[maxb]=rsi[maxb];
                     }
                  break;
               }
         }
         
         max=rsi[i];
         for(j=i;j<Bars;j++){
               if(rsi[j]<max){
                  max=rsi[j];
                  maxb=j;
               }
               if(rsi[i]-max>RightLess){
                  break;//не состоялся
               }
               if(rsi[j]-max>LeftMore){
                     if(rsi[i]-max>RightMore){//нашли
                        l[maxb]=rsi[maxb];
                     }
                  break;
               }
         }         
         
      }
      
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Итого 23.06.2007 01:45 - 23.06.2007 01:08 = 37 минут ушло на решение этой задачи, но я еще и коф попил за это время. Еще следовало бы ввести критерий по количеству баров слева от экстремума и справа.

 
Integer:
Yurixx:


Отлично ! Тогда киньте на EURUSD, М1 индикатор RSI(14,Close) и решите задачу об идентификации без запаздывания экстремумов RSI.

Амплитуда изменения RSI между соседними экстремумами должна быть не менее 25.


Сформулируйте задачу точно и полностью. Если теоретически она решаема то практически тоже. После правильной постановки задачи они все решаются (причем и вы сами сможете). В этой задаче критерием идентификации экстремума является откат значения на 25 единиц, тоесть идентификация по такому критерию без запаздывания и теоретически не решается. Если определиться с критерием - более 25 слева и более 5, но менее 10 справа, то запаздывание будет меньше, но ложных сигналов больше.


Спасибо, конечно, за код, но это, как вы и сами понимаете, не решение и не та задача.

Я может слишком лаконично выразился, но это на самом деле вполне корректная постановка. Можно и длиннее. Требуется процедура идентификации локального экстремума, работающая не на истории, а в режиме реального времени. Под идентификацией подразумевается определение, после завершения бара, того, является ли соответствующая точка графика индикатора точкой локального экстремума. Под локальным экстремумом подразумевается экстремум имеющий как справа, так и слева изменение значения индикатора не менее, чем на 25.0

Поскольку на момент завершения бара предстоящее изменение индикатора справа от предполагаемой точки экстремума неизвестно, то речь идет об оптимальном прогнозировании поведения индикатора. Это прогнозирование не является экстраполяцией, поскольку сами значения индикатора справа от точки экстремума интереса не представляют. Единственным условием является условие экстремума, т.е. что значения индикатора изменятся на обусловленную величину. Оптимальность прогнозирования понимается в статистическом смысле, то есть прогноз должен иметь достаточно высокую достоверность.

Формально это все выглядит иначе, но ничего нового для вас я не сказал. Все это уже есть в трех словах "идентификация без запаздывания".

Хочу обратить ваше внимание на то, что элементарный скрипт по поиску экстремумов с заданными свойствами на софрмированнной истории можно было бы написать и лаконичнее, и проще. Вложенные циклы - это дорогое излишество, на больших массивах это будет сильно тормозить. Все это можно сделать за один проход, т.е. на каждом новом баре обсчитывать только одно новое значение, вообще без циклов. А поскольку вы свой скрипт оформили как индикатор, то на каждом новом баре вы будете считать цикл в цикле по всей предыдущей истории - увеличение расчетного времени в Bars*Bars/2 раз. И, если уж вы используете цикл в цикле, то начинать цикл по j со значения j=i не имеет смысла.

Я не разбирался с вашим кодом в деталях и не смотрел его на графике, но кажется мне, что он содержит одну существенную ошибку - меняет свой собственный результат. Если, к примеру, для некоторого i данная точка является точкой экстремума, то при переходе к (i+1) или далее она может перестать быть таковой. Впрочем, это результат наложенного вами условия: больше 5, меньше 10.

Для почти всей истории это значения не имеет. Но для правого края - имеет и при том существенное. Тот экстремум, который идентифицирует ваш скрипт слева от нулевого бара, на следующем баре может исчезнуть. А это не есть хорошо. :-))

 
Yurixx:


1. Спасибо, конечно, за код, но это, как вы и сами понимаете, не решение и не та задача.

Я может слишком лаконично выразился, но это на самом деле вполне корректная постановка. Можно и длиннее. Требуется процедура идентификации локального экстремума, работающая не на истории, а в режиме реального времени. Под идентификацией подразумевается определение, после завершения бара, того, является ли соответствующая точка графика индикатора точкой локального экстремума. Под локальным экстремумом подразумевается экстремум имеющий как справа, так и слева изменение значения индикатора не менее, чем на 25.0

Поскольку на момент завершения бара предстоящее изменение индикатора справа от предполагаемой точки экстремума неизвестно, то речь идет об оптимальном прогнозировании поведения индикатора. Это прогнозирование не является экстраполяцией, поскольку сами значения индикатора справа от точки экстремума интереса не представляют. Единственным условием является условие экстремума, т.е. что значения индикатора изменятся на обусловленную величину. Оптимальность прогнозирования понимается в статистическом смысле, то есть прогноз должен иметь достаточно высокую достоверность.

Формально это все выглядит иначе, но ничего нового для вас я не сказал. Все это уже есть в трех словах "идентификация без запаздывания".

2. Хочу обратить ваше внимание на то, что элементарный скрипт по поиску экстремумов с заданными свойствами на софрмированнной истории можно было бы написать и лаконичнее, и проще. Вложенные циклы - это дорогое излишество, на больших массивах это будет сильно тормозить. Все это можно сделать за один проход, т.е. на каждом новом баре обсчитывать только одно новое значение, вообще без циклов. А поскольку вы свой скрипт оформили как индикатор, то на каждом новом баре вы будете считать цикл в цикле по всей предыдущей истории - увеличение расчетного времени в Bars*Bars/2 раз. И, если уж вы используете цикл в цикле, то начинать цикл по j со значения j=i не имеет смысла.

3. Я не разбирался с вашим кодом в деталях и не смотрел его на графике, но кажется мне, что он содержит одну существенную ошибку - меняет свой собственный результат. Если, к примеру, для некоторого i данная точка является точкой экстремума, то при переходе к (i+1) или далее она может перестать быть таковой. Впрочем, это результат наложенного вами условия: больше 5, меньше 10.

Для почти всей истории это значения не имеет. Но для правого края - имеет и при том существенное. Тот экстремум, который идентифицирует ваш скрипт слева от нулевого бара, на следующем баре может исчезнуть. А это не есть хорошо. :-))

1. Стояла задача выявления экстремумов, а не ПРОГНОЗИРОВАНИЕ их появления. Короче дешевый понт .... не смогли спрогнозировать. ... Это тоже самое что сказать, намишите мне грааля, чтобы лосей не было вообще и 1000%. Как раз об этом я и писал, что задача сначала должна иметь одназночное теоретическое решение, потом она реализуется в код. Но прогнозирование не имеет однозначного решения.

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

"идентификация без запаздывания" - опять тоже. Идентификация без запаздывания означает идентификизаю в самый первый момент времени, в который ситуация идентифицируется однозначно.

2. Продемонстрируйье, а мы посмотрим.

Bars*Bars/2 раз - очевидно вы даже не поняли, как он работает, или вам не известен смысл оператора break;

то начинать цикл по j со значения j=i не имеет смысла - а с какого же тогда? Это самый интересный вопрос к вам!!!!

Я не разбирался с вашим кодом в деталях и не смотрел его на графике, но кажется мне, что он содержит одну существенную ошибку - меняет свой собственный результат.

3. Обратите внимание, что он меняет свои показания только в зависимости от нулевого, еще не сформированного бара. Причем все индикаторы меняют свое последнее значение в соответствии со значением на нулевом баре. Вы когда-нибудь видели индиктаор фрактолов (встроен в МТ (Главное меню - Индикаторы - Билла Вильямса - Fractals)) - посмотрите, это очень интересно и увлекательно, и может быть даже пригодится вам когда-нибудь. Учет измениий на нулевом баре при программировании индикаторов является как минимум правилом хорошего тона программиста пишущего индиктаоры, если не сказать, что незыблемым правилом их прграммирования. Первым баром, как правило, ограничиваются недосточно опытные и не глубоко вникающие в суть работы индиктора индикаторописатели.

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

 
Integer:

... дешевый понт ....


Как вам будет угодно. :-)

Integer:

Когда человек знает, что ему надо, это делается очень быстро.

Судя по всему произошла подмена понятий "человек знает, что ему надо" и "одназночное теоретическое решение". Ваших, кстати, понятий.

 
Хорошая тема, жаль выдохлась.
Для профпрограммистов я бы порекомендовал поковырять DLL от продуктов Elliottician. Они пишут свои творения на ВижуалВасике, но в библиотеках есть описание волн и патернов обычными понятиями high, close и пр. Тем более что последние версии RET содержат плагин для Forex. А разобрать DLL с базой волн за последние 15 лет - очень заманчиво!
 
Bookkeeper:

вопрос: Возможна ли подгонка стратегии под рискованную, агрессивную пипсоту не на реале,

а только на демо? Вопрос не просто так. Можно со входом по-наглому или со всей дури.

думаю что возможно, посмотрите приложение.

Я увеличил депо за неделю на 900%.

С уважением,

Alex Niroba

Файлы:
statement.zip  9 kb
 
NYROBA >>:

думаю что возможно, посмотрите приложение.

Я увеличил депо за неделю на 900%.

С уважением,

Alex Niroba

мда... длинная история однако.

;)

 
divenetz >>:
Хорошая тема, жаль выдохлась.
Для профпрограммистов я бы порекомендовал поковырять DLL от продуктов Elliottician. Они пишут свои творения на ВижуалВасике, но в библиотеках есть описание волн и патернов обычными понятиями high, close и пр. Тем более что последние версии RET содержат плагин для Forex. А разобрать DLL с базой волн за последние 15 лет - очень заманчиво!

RET говно. Уж лучше modern75.nls разбирать из ElWave (тем более что файл открытый). RET почти тоже самое что и банальный winwaves32.

Причина обращения: