Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Что такое массив физически - набор однотипных переменных расположеных друг за другом с одного адреса - только не спрашивайте больше, если Вы не в курсе как организована память в ЭВМ, то начинать нужно будет с организации адресации - просто считайте, что все ячейки идут подряд - это примерно соотвествует действительности.
У Вас в алгоритме есть еще одна существенная ошибка, которая к счастью легко исправляется - я этого делать не стал - потому как алгоритм не мой. А именно при поиске локальных экстремумов у Вас в расчетах участвует последний бар, нулевой (когда 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); } //+------------------------------------------------------------------+Я считаю тему Демарка, возможно очень, перспективной, и надеюсь с твоей помощью довести ее до ума.