По порядку - как далеко искать точку и нужно ли это. Если торгуем по стратегии Демарка, то нужно - поскольку именно для этого варианта была проведена статистика, для других вариантов нужно статистически исследовать самостоятельно - Вы уверены, что пропуск точек входа оставил систему профитной ? Я, например, нет. Если бы у Вас был полный набор сигналов и Вы хотели бы некоторые отфильтровать - это было бы другое дело, а так возможно самые профитные Вы пропустите не по условиям фильтра, а просто потому, что неверно строится линия тренда, ну а лоссовые так и останутся - при этом система из профитной легко может превратиться в убыточную, а потом придется рассказывать, что ВСЕ индикаторы по Демарку не работают, как это сделали в начале данной ветки :). Что такое массив физически - набор однотипных переменных расположеных друг за другом с одного адреса - только не спрашивайте больше, если Вы не в курсе как организована память в ЭВМ, то начинать нужно будет с организации адресации - просто считайте, что все ячейки идут подряд - это примерно соотвествует действительности. У Вас в алгоритме есть еще одна существенная ошибка, которая к счастью легко исправляется - я этого делать не стал - потому как алгоритм не мой. А именно при поиске локальных экстремумов у Вас в расчетах участвует последний бар, нулевой (когда shift=1, тогда shift-1 = 0), а этого быть не должно, поскольку для последнего бара единственно достоверно известная цена - это его открытие, ни хай, ни лоу не известны - то есть они могут меняться. Для того, чтобы это исправить в цикле for(shift=Bars-1;shift>=1;shift--) замените нестрогое неравенство на строгое, то есть на "shift>1", тогда последний бар для которого будет произведен поиск экстремума будет не 1, а 2 и все станет нормально. В чистом виде Демарка не использую субъективно - не нравится соотношение профит\лосс, хотя торговля по этому индюку, что я выкладывал, профитная - торговал сам и знаю достаточно большое количество народа, которые так и продолжают торговать. ИМХО - его сигналы нужно фильтровать я, например, сейчас пытаюсь добавить трендовый фильтр по Ганну. Вроде все.
А как сделать чтобы прорисовывались линии прорыва?
Я обязательно проанализирую твой индикатор,но для этого нужно время, как ты сам видишь их вывод решения сильно отличаются, а представленную мною версии я использую.
В оригинале для меня вроде все понятно, кроме одного. Ценовой проектор бывает "скачет" (меняет свое местоположение и снова возвращается). Ты можешь объяснить почему? Мне кажется, причина где-то здесь.
If Close[shift] > TrendPriceUp[2,1] AND Close[shift+1] <= TrendPriceUp[1,1] AND TrendPriceUp[1,1] >= TrendPriceUp[2,1] Then {MinPrice = Low[Lowest(MODE_LOW, shiftofMaximum[1,1], shiftofMaximum[1,1] - shift)]; TargetPriceUp = (TrendPriceUp[2,1] - MinPrice) + TrendPriceUp[2,1];
Конечно могу - в расчетах участвует текущая цена, когда shift=0, то Close[0] есть ни что иное как Бид. Эта переменная должна участвовать в расчетах только при выподнении условий первого или второго квалификаторов пробоя и тогда скакать будет, но вероятность ложных пробоев сильно уменьшится. Пока застрял со своими программами - попозже смогу заняться твоим Демарком, если еще будет актуально.
Владислав, объясню почему для меня актуален этот именно индикатор. Я теперь понял , вроде бы, отличие моей работы от теории Демарка. По Демарку ждешь когда пробивает TD-линию и тогда ставишь в направлении прорыва до ценового проектора. Я же читаю информацию иначе. Меня не волнует прорыв, он нужен мне только для расчета проектора. Самое главное для меня в этом деле, это проекторы. Когда они оба находятся по одну сторону от котировки, то это важный сигнал к возможно скорому развороту движения цены. Как ты сам уже видел, описание индикатора упрощенное от Демарка, соответственно проекторы рисуются иначе. Я не говорю что это правильно, тут еще возможно дорабатывать и дорабатывать, но это нужно делать постепенно. Твой же индикатор, мне действительно интересен. На глаз он действительно должен работать, хотя нужно еще думать как стоп ставить. В моем случае, твой индикатор мне интересен с точки зрения доработки моего. У Демарка мне что-то нравиться, а что-то нет, а что-то я не понимаю почему именно так и какие-то его разработки приходится брать за правило (например формулы расчета ценовых проекторов).
Владислав, кинь ссылку на ветку по Демарку в пауке. Выложенный здесь второй перевод твоего индикатора не прорисовывает ценовой прорыв, наверное где-то опечатка. Выложи, пожалуйста, еще раз здесь твоего Демарка с правильным переводом и так чтобы ценовые проекторы прорисовывались всегда (вне зависимости от прорвана или нет TD-линия).
Выкладываю последнюю версию моей корректировки. UPTrend прорисовывается на отдельных таймфреймах, но не на всех и неправильно. Ценовой прорыв тоже прорисовывается не на всех таймфреймах и тоже неправильно (по крайней мере иначе чем в МТ3). Я не понимаю почему, вроде все правильно переведено.
Вообще, хочу высказать тебе благодарность. Я слегка начал понимать МЕ4. Ты раскрыл мне глаза на некоторые мысли Демарка, хотя касаемо темы ценовых прорывов вопросы еще возникнут.
Я считаю тему Демарка, возможно очень, перспективной, и надеюсь с твоей помощью довести ее до ума.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Что такое массив физически - набор однотипных переменных расположеных друг за другом с одного адреса - только не спрашивайте больше, если Вы не в курсе как организована память в ЭВМ, то начинать нужно будет с организации адресации - просто считайте, что все ячейки идут подряд - это примерно соотвествует действительности.
У Вас в алгоритме есть еще одна существенная ошибка, которая к счастью легко исправляется - я этого делать не стал - потому как алгоритм не мой. А именно при поиске локальных экстремумов у Вас в расчетах участвует последний бар, нулевой (когда shift=1, тогда shift-1 = 0), а этого быть не должно, поскольку для последнего бара единственно достоверно известная цена - это его открытие, ни хай, ни лоу не известны - то есть они могут меняться. Для того, чтобы это исправить в цикле for(shift=Bars-1;shift>=1;shift--) замените нестрогое неравенство на строгое, то есть на "shift>1", тогда последний бар для которого будет произведен поиск экстремума будет не 1, а 2 и все станет нормально.
В чистом виде Демарка не использую субъективно - не нравится соотношение профит\лосс, хотя торговля по этому индюку, что я выкладывал, профитная - торговал сам и знаю достаточно большое количество народа, которые так и продолжают торговать. ИМХО - его сигналы нужно фильтровать я, например, сейчас пытаюсь добавить трендовый фильтр по Ганну. Вроде все.
Удачи.
Я обязательно проанализирую твой индикатор,но для этого нужно время, как ты сам видишь их вывод решения сильно отличаются, а представленную мною версии я использую.
Удачи.
ObjectCreate("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJ_HLINE, 0, TimeofMaximum[0][0], TargetPriceUp,TimeofMaximum[1][0], TargetPriceUp);
ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_STYLE, STYLE_DOT);
ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_COLOR, Blue);
ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_WIDTH, 1);
Удачи.
If Close[shift] > TrendPriceUp[2,1] AND Close[shift+1] <= TrendPriceUp[1,1]
AND TrendPriceUp[1,1] >= TrendPriceUp[2,1]
Then {MinPrice = Low[Lowest(MODE_LOW, shiftofMaximum[1,1], shiftofMaximum[1,1] - shift)];
TargetPriceUp = (TrendPriceUp[2,1] - MinPrice) + TrendPriceUp[2,1];
Пока застрял со своими программами - попозже смогу заняться твоим Демарком, если еще будет актуально.
Удачи.
У Демарка мне что-то нравиться, а что-то нет, а что-то я не понимаю почему именно так и какие-то его разработки приходится брать за правило (например формулы расчета ценовых проекторов).
Владислав, кинь ссылку на ветку по Демарку в пауке. Выложенный здесь второй перевод твоего индикатора не прорисовывает ценовой прорыв, наверное где-то опечатка. Выложи, пожалуйста, еще раз здесь твоего Демарка с правильным переводом и так чтобы ценовые проекторы прорисовывались всегда (вне зависимости от прорвана или нет TD-линия).
//+------------------------------------------------------------------+ //| DMTrendLines&PricesUp.mq4 | //| Copyright © 2003, Company | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2003, Company" #property link "http://www.company.com/" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Blue double ExtMapBuffer1[]; //---- input parameters //Variable : shift(0); //Variable : KUp(0), BUp(0), n(0),MinPrice(0),TargetPriceUp(0); //Array : TrendPriceUp[2,1](0); //Arrays : Maximum[2,1](0), TimeofMaximum[2,1](0), shiftofMaximum[2,1](0); int shift=0; double TrendPriceUp[3][2],// ???????? зачем объявлять реально одномерный массив как 2-мерный ? KUp = 0.0, BUp = 0.0, MinPrice = 0.0, TargetPriceUp = 0.0, Maximum[3][2];// ???????? зачем объявлять реально одномерный массив как 2-мерный ? //MaxMinPriceimum[2][1];// ???????? зачем объявлять реально одномерный массив как 2-мерный ? int n = 0, shiftofMaximum[3][2];// ???????? зачем объявлять реально одномерный массив как 2-мерный ? datetime TimeofMaximum[3][2];// ???????? зачем объявлять реально одномерный массив как 2-мерный ? //string buff_str=""; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexArrow(0,217); SetIndexBuffer(0,ExtMapBuffer1); SetIndexEmptyValue(0,0.0); //---- for(int i=0; i<=2; i++){ for(int j=0; j<=1; j++){ TrendPriceUp[i][j]= 0; Maximum[i][j] = 0; shiftofMaximum[i][j] = 0; TimeofMaximum[i][j] = 0; } } return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- Comment(" "); ObjectsDeleteAll(); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { // int counted_bars=IndicatorCounted(); //---- for( shift = Bars-1; shift>= 1;shift--) { //For shift = Bars-1 Downto 1 Begin TrendPriceUp[1][1] = TrendPriceUp[2][1]; TrendPriceUp[2][1] = KUp*(shift) + BUp; ExtMapBuffer1[shift] = TrendPriceUp[2][1];//SetIndexValue(shift, TrendPriceUp[2,1]); if( (High[shift] > High[shift-1]) //Если точка - максимум, запоминаются ее координаты && (High[shift] >= High[shift+1]) ) { Maximum[1][1] = Maximum[2][1]; TimeofMaximum[1][1] = TimeofMaximum[2][1]; shiftofMaximum[1][1] = shiftofMaximum[2][1]; shiftofMaximum[2][1] = shift; Maximum[2][1] = High[shift]; TimeofMaximum[2][1] = Time[shift]; KUp = (Maximum[2][1]-Maximum[1][1])/(shiftofMaximum[2][1]-shiftofMaximum[1][1]); BUp = Maximum[1][1] - KUp*shiftofMaximum[1][1]; TrendPriceUp[2][1] = KUp*(shift) + BUp; if( Maximum[1][1] >= Maximum[2][1]) { //Если тренд вниз, for( n=shiftofMaximum[1][1];n>= shiftofMaximum[2][1];n--){ //Then {For n = shiftofMaximum[1,1] DownTo shiftofMaximum[2,1] Begin вычисляется цена по новому тренду, начиная с его начала TrendPriceUp[2][1] = KUp*(n) + BUp; ExtMapBuffer1[n] = TrendPriceUp[2][1];//SetIndexValue(n, TrendPriceUp[2,1]); } //MoveObject("UpTrend", OBJ_TRENDLINE, TimeofMaximum[1,1], Maximum[1,1], TimeofMaximum[2,1], Maximum[2,1], Blue, 1, STYLE_SOLID); //buff_str = "UpTrend"; ObjectCreate("UpTrend", OBJ_TREND, 0, TimeofMaximum[1][1], Maximum[1][1],TimeofMaximum[2][1], Maximum[2][1]); ObjectSet("UpTrend", OBJPROP_STYLE, STYLE_SOLID); ObjectSet("UpTrend", OBJPROP_COLOR, Blue); ObjectSet("UpTrend", OBJPROP_WIDTH, 1); //Новый тренд вниз прорисовывается }//If Maximum[1,1] >= Maximum[2,1] }// if High[shift] > High[shift - 1] AND High[shift] >= High[shift + 1] if( (Close[shift]>TrendPriceUp[2][1]) && (Close[shift+1] <= TrendPriceUp[1][1]) && (TrendPriceUp[1][1] >= TrendPriceUp[2][1]) //и тренд направлен вниз, рассчитывается цена прорыва. ) { MinPrice = Low[Lowest(NULL,0,MODE_LOW, shiftofMaximum[1][1] - shift,shiftofMaximum[1][1])]; TargetPriceUp = (TrendPriceUp[2][1] - MinPrice) + TrendPriceUp[2][1]; //MoveObject("TargetPriceUp"+Mod(shift,1), OBJ_HLINE, TimeofMaximum[1,1], TargetPriceUp, TimeofMaximum[2,1], TargetPriceUp, Blue, 1, STYLE_DOT); //buff_str = "TargetPriceUp"+DoubleToStr(MathMod(shift,1),5); ObjectCreate("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJ_HLINE, 0, TimeofMaximum[1][1], TargetPriceUp,TimeofMaximum[2][1], TargetPriceUp); ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_STYLE, STYLE_DOT); ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_COLOR, Blue); ObjectSet("TargetPriceUp"+DoubleToStr(MathMod(shift,1),5), OBJPROP_WIDTH, 1); }//If Close[shift] > TrendPriceUp[2,1] AND Close[shift+1] <= TrendPriceUp[1,1] }//For shift = Bars-1 Downto 1 Begin //---- return(0); } //+------------------------------------------------------------------+Я считаю тему Демарка, возможно очень, перспективной, и надеюсь с твоей помощью довести ее до ума.