基于艾略特波浪理论的交易策略 - 页 140 1...133134135136137138139140141142143144145146147...309 新评论 Forex Trader 2006.09.26 08:37 #1391 Если мы тестируем систему на достаточно длинной истории возникает проблема нормировки (например, кажется очевидным, что 100 пунктов при курсе 0.8 вовсе не эквивалентны 100 пунктам при курсе 1.36). 我认为这是一个非常有价值的观点!!。也许将价差归一化是有意义的,例如通过过去一两个月的平均价格,然后计算一系列条形的价差的归一化值。我将尝试在最近的将来根据这一原则来改进该指标。 我已经根据这个建议最终确定了指标。我现在就把它贴出来。如果你使用以前版本的指标,你应该在运行新版本时执行强制重新计算值(force_recalculation=true),而不是等待第二天。 以下是新版指标的屏幕截图,以便与第一版进行比较。 //+------------------------------------------------------------------+ //| AMPLITUDE_STAT_LEVELS_v2.mq4 | //| Copyright © 2006, Solandr | //| solandr99@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Solandr" #property link "solandr99@mail.ru" #property indicator_chart_window //В версии 2 происходит относительный расчёт размахов в соответствии со средней ценой за 25 баров. //В принципе при достаточном количестве баров истории это эквивалентно отношению среднеарифметического значения размаха //к среднему значению цены на истории, умноженное затем на текущее среднее значение цены (например по последним 25 барам). //Но решено оставить всё-таки более сложный алгоритм расчёта (нормировка значений амплитуд), поскольку он наверное будет вполне //уместен и в случаях когда баров истории совсем немного. // ============================================================================================ //"Купи подешевле, продай подороже" - основа, на которой базируется спекуляция на финансовых рынках. //Данный индикатор предлагает своё видение этих уровней "подешевле" и "подороже". Он основан на простом //статистическом расчёте размахов (амплитуд High-Low) баров по имеющейся истории котировок. //Расчёт амплитуд происходит по сериям от 1 до 10 баров. То есть в выбранной серии на истории находитcя разница между //максимальным и минимальным значением цены. Далее окно серии смещается на 1 бар и получаем следующий размах амплитуды //баров для выбранной серии баров. После усреднения значения полученных размахов мы имеем среднее арифметическое диапазона //колебания цены для выбранной серии баров. // //Полученное таким образом значение амплитуды откладывается на графике по следующему принципу. К минимуму текущей серии //баров прибавляется значение среднеарифметического размаха, посчитанного на истории. Так мы получаем возможный //среднестатистический максимум цены для текущей серии баров. То же самое делаем для нахождения среднестатистического //минимума для текущей серии баров. То есть от максимума текущей серии баров отнимаем среднеарифметический размах, //посчитанный для данной серии баров по историческим данным. Индикатор производит описанные выше действия для серий //от 1 до 10 баров. На уровнях присутствуют надписи, поясняющие для какого текущего временного промежутка построен данный //уровень. С параметром TF_needed="AUTO" уровни строятся для серий баров текущего таймфрейма. Если требуется зафиксировать // уровни какого-то таймфрейма на остальных периодах, то необходимо установить это значение в MN, W1, D1, H4, H1, M30, //M15, M5, или в M1. Например для значения TF_needed="D1" на всех периодах будут отображаться уровни для временных //промежутков от 1 до 10 дней, обозначаемых соответственно как D1,...,D10. // //При настройках по умолчанию индикатор производит перерасчёт среднестатистических амплитуд по истории один раз в день //с их внесением в глобальные переменные терминала. Если по какой-то причине (например импортирование дополнительных //котировок) требуется произвести перерасчёт среднеарифметических значений амплитуд для серий баров не дожидаясь //следующего дня, то необходимо установить force_recalculation=true и будет произведён перерасчёт //среднеарифметических значений размахов для серий баров при следующей инициализации индикатора. // //Данный индикатор может быть полезен при принятии решений о входе в позицию. Может поспособствовать сохранению депозита //особенно начинающих трейдеров. Продавайте на красных уровнях и покупайте на зелёных и за Вас будет играть математика! ;o))) //Если Вы например купили на зелёных уровнях и курс пошёл резко против Вас, то убыточную позицию есть смысл удерживать лишь //до тех пор пока красные уровни не окажутся ниже Вашей открытой позиции. И когда цена окажется на этих красных уровнях - //закройте убыточную позицию с минимальным убытком, а во многих случаях и с маленьким плюсом. Желаю успехов!:o) // ============================================================================================ extern string TF_needed="AUTO"; extern bool force_recalculation=false;//принудительный перерасчёт double average_price; bool recalculation_needed=false; bool aver_pr_recalc_needed=true; int last_aver_pr_recalc_bars; double delta[11]; string work_symbol; int TF; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int i,k,all_bars,counter_counted_bars; string b_str,global_name; double average_price_array[10]; work_symbol=Symbol(); //Выбор требуемого тайфрейма для расчёта; if(TF_needed=="AUTO" || (TF_needed!="MN" && TF_needed!="W1" && TF_needed!="D1" && TF_needed!="H4" && TF_needed!="H1" && TF_needed!="M30" && TF_needed!="M15" && TF_needed!="M5" && TF_needed!="M1")) TF=Period(); if(TF_needed=="MN") TF=43200; if(TF_needed=="W1") TF=10080; if(TF_needed=="D1") TF=1440; if(TF_needed=="H4") TF=240; if(TF_needed=="H1") TF=60; if(TF_needed=="M30") TF=30; if(TF_needed=="M15") TF=15; if(TF_needed=="M5") TF=5; if(TF_needed=="M1") TF=1; //Проверяем наличие посчитанных данных амплитуд для данного TF, а также производим проверку дня, в который был произведен расчёт этих данных global_name=work_symbol+"_"+TF+"_counted_day"; if(GlobalVariableCheck(global_name) && !force_recalculation) { if(MathAbs(GlobalVariableGet(global_name)-DayOfYear())>0) recalculation_needed=true; } else recalculation_needed=true; if(recalculation_needed) {//Производим расчёт средней амплитуды бара (серии баров) по таймфрейму TF на символе work_symbol all_bars=iBars(work_symbol,TF); ArrayResize(average_price_array,all_bars); //Рассчитываем массив средних цен для каждого расчётного момента времени на основе 25 баров for(k=all_bars-1;k>=0;k--) { average_price_array[k]=0; counter_counted_bars=0; for(i=k;i<=k+24;i++)//вычисляем среднюю цену на 25 барах { if(i<all_bars) { average_price_array[k]=average_price_array[k]+(iOpen(work_symbol,TF,i)+iHigh(work_symbol,TF,i)+iLow(work_symbol,TF,i)+iClose(work_symbol,TF,i))/4; counter_counted_bars++; } } if(counter_counted_bars>0) average_price_array[k]=average_price_array[k]/counter_counted_bars; } for(i=1;i<=10;i++) delta[i]=0; for(i=1;i<=10;i++) { for(k=all_bars-i;k>=0;k--) { if(average_price_array[k]>0) delta[i]=delta[i]+(iHigh(work_symbol,TF,Highest(Symbol(),TF,MODE_HIGH,i,k))-iLow(work_symbol,TF,Lowest(Symbol(),TF,MODE_LOW,i,k)))/average_price_array[k]; else Print("average_price_array[",k,"]<=0 при i=",i," и k=",k); } delta[i]=NormalizeDouble(delta[i]/(all_bars-i+1),Digits); global_name=work_symbol+"_"+TF+"_"+i; GlobalVariableSet(global_name,delta[i]); //Print("delta",i,"=",delta[i]); } global_name=work_symbol+"_"+TF+"_counted_day"; GlobalVariableSet(global_name,DayOfYear()); recalculation_needed=false; }//if(recalculation_needed) else {//Если данные имеются в глобальных переменных терминала, то берём имеющиеся расчётные данные амплитуд из глобальных переменных терминала for(i=1;i<=10;i++) { global_name=work_symbol+"_"+TF+"_"+i; delta[i]=GlobalVariableGet(global_name); //Print("Глобал ",i," ",delta[i]); } } } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- int i; string b_str; for(i=1;i<=10;i++) { b_str="up_line"+i; ObjectDelete(b_str); b_str="down_line"+i; ObjectDelete(b_str); b_str="up_line_txt"+i; ObjectDelete(b_str); b_str="down_line_txt"+i; ObjectDelete(b_str); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i; string line_name; /* for(i=iBars(work_symbol,TF)-1;i>=0;i--) average_price=average_price+(iOpen(work_symbol,TF,i)+iHigh(work_symbol,TF,i)+iLow(work_symbol,TF,i)+iClose(work_symbol,TF,i))/4; average_price=average_price/iBars(work_symbol,TF); Print("Средняя цена по всей выборке=",NormalizeDouble(average_price,Digits)); average_price=0; */ if(iBars(work_symbol,TF)!=last_aver_pr_recalc_bars) aver_pr_recalc_needed=true; if(aver_pr_recalc_needed) { average_price=0; for(i=0;i<=24;i++) average_price=average_price+(iOpen(work_symbol,TF,i)+iHigh(work_symbol,TF,i)+iLow(work_symbol,TF,i)+iClose(work_symbol,TF,i))/4; average_price=average_price/25; aver_pr_recalc_needed=false; last_aver_pr_recalc_bars=iBars(work_symbol,TF); } //Print("average_price=",NormalizeDouble(average_price,Digits)); for(i=1;i<=10;i++) { if(TF==43200) line_name="MN"+i; if(TF==10080) line_name="W"+i; if(TF==1440) line_name="D"+i; if(TF==240) line_name="H"+4*i; if(TF==60) line_name="H"+i; if(TF==30) line_name="M"+30*i; if(TF==15) line_name="M"+15*i; if(TF==5) line_name="M"+5*i; if(TF==1) line_name="M"+i; up_line(i,iLow(NULL,TF,Lowest(work_symbol,TF,MODE_LOW,i,0))+delta[i]*average_price,line_name); down_line(i,iHigh(NULL,TF,Highest(work_symbol,TF,MODE_HIGH,i,0))-delta[i]*average_price,line_name); } return(0); } //+------------------------------------------------------------------+ int up_line(int q_days, double level, string ln) { string b_str="up_line"+q_days; if(ObjectFind(b_str) == -1) { ObjectCreate(b_str, OBJ_TREND, 0, Time[1], level, Time[1]+2700000,level); ObjectSet(b_str, OBJPROP_STYLE, STYLE_DOT); ObjectSet(b_str, OBJPROP_COLOR, Brown); ObjectSet(b_str, OBJPROP_RAY, true); ObjectSet(b_str, OBJPROP_WIDTH, 1); ObjectMove(b_str, 0, Time[1], level); } else { if(MathAbs(level-ObjectGet(b_str, OBJPROP_PRICE1))>0.9*Point) ObjectDelete(b_str); } b_str="up_line_txt"+q_days; string b_txt=ln; datetime t_bar; if(ObjectFind(b_str) == -1) { ObjectCreate(b_str, OBJ_TEXT, 0, Time[0], 0); ObjectSetText(b_str, b_txt, 8, "Arial", Brown); ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60, level); } else { ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60, level); } return(0); } int down_line(int q_days, double level, string ln) { string b_str="down_line"+q_days; if(ObjectFind(b_str) == -1) { ObjectCreate(b_str, OBJ_TREND, 0, Time[1], level, Time[1]+2700000,level); ObjectSet(b_str, OBJPROP_STYLE, STYLE_DOT); ObjectSet(b_str, OBJPROP_COLOR, DarkGreen); ObjectSet(b_str, OBJPROP_RAY, true); ObjectSet(b_str, OBJPROP_WIDTH, 1); ObjectMove(b_str, 0, Time[1], level); } else { if(MathAbs(level-ObjectGet(b_str, OBJPROP_PRICE1))>0.9*Point) ObjectDelete(b_str); } b_str="down_line_txt"+q_days; string b_txt=ln; if(ObjectFind(b_str) == -1) { ObjectCreate(b_str, OBJ_TEXT, 0, Time[0], 0); ObjectSetText(b_str, b_txt, 8, "Arial", DarkGreen); ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60, level); } else { ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60, level); } return(0); } Forex Trader 2006.09.26 09:52 #1392 也许我的解释不正确。我说的是,使用图形匹配(组合图)的算法可以用于模式识别。转到。 http://citeseer.ist.psu.edu/,并搜索到。 图形模式识别算法 Forex Trader 2006.09.26 13:25 #1393 让我们这样指出(我不确定这是科学的方式),但... 艾略特波浪理论是关于价格的模式。价格以图表(时间内的价格)的形式表示。 艾略特波浪理论确定了价格内的模式--脉冲、ZigZag、平坦......。如何- 斐波那契回撤。然后将发现的波浪按概率顺序绘制出来,但这是很难做到的(要做出决定巫婆运动是下一个或100%"肯定 "的。因此,我的建议是,如果将图表视为图形,并根据图形理论找到模式,就能更好地解决这个问题。也许(?)它将更准确,决定将是严格的数学? Forex Trader 2006.09.26 16:28 #1394 也许(?)会更准确,决定将是严格的数学? 顺便说一下,我一个来自爱尔兰的朋友(她在那里住了五年了)说,说母语的人不会说May be,而是说probably。是否确定? Forex Trader 2006.09.27 09:38 #1395 Candid,我曾问过一些在组合学和图形领域工作的数学家,请他们解释是否有可能使用组合图来寻找数据的模式。以下是珍妮特-M.Six的答案。 "嗨,戴夫。 我确信,组合图可以用来寻找模式 在市场图表中。我还猜测,关于这个主题的工作有 已经完成。 珍妮特六号" Forex Trader 2006.09.27 11:20 #1396 2Dave Mason 你把组合图这个词叫做什么?如果Candid 所写的 组合图有时可以用图像表示为由线(称为边)连接的点(称为顶点)的网络 ,你很难用这个来进行模式识别。一个顶点的网络可以由各种线条连接,这将形成闭环等。而价格图是一个简单的单线,因为每个时间点只有一个价格值。就图论(组合图)而言,这样的线是最原始的对象。我不认为有什么可以做的。 此外,一个图(组合图)有一个恒定的空间结构。一个价格图表在时间上不断变化。 但这都是IMHO。如果这个问题与你有关,你最好问问组合学和图学领域的专家。例如,珍妮特-斯考特。如果她确信 "组合图可以用来寻找市场图表中的模式",并且 "关于这个主题的工作已经完成",让她提供链接。 Forex Trader 2006.09.27 12:13 #1397 戴夫-梅森,无意冒犯,但这种情况有点让人想起一个古老的科幻故事:在那里,一群研究人员确信反重力问题已经被解决了,然后他们真的解决了这个问题:)。 我必须说,我对图论的想法是相当肤浅的,它们包括这门科学主要对所寻求的对象的拓扑学感兴趣。模式本身的拓扑结构过于简单,也就是说,很可能对图论不感兴趣。原则上,我们可以想象,我们已经形式化(编码)了标准模式,并试图在图上寻找它们。图中的特定部分可以用一个以上的模式来识别。此外,模式本身,如果它们是某种基元,可以相互关联。通过这种方式,我们得到一个对象,也许类似于图论的做法。这是一项大量的工作,目前还不清楚这样的方法是否会产生什么结果。 Forex Trader 2006.09.27 14:06 #1398 Yurixx 你把组合图称为什么?如果Candid 所写的 组合图有时可以用图形表示为由线(称为边)连接的点(称为顶点)的网络。 这不是我写的,有一个链接:)) 基本上是的,很容易确定有一个珍妮特-M。六,她确实在处理图表。然而,简单的声明是不够的。如果能至少得到成为结论基础的简要考虑,那就更好了。或者说,确实是一个具体的参考,如果不是一个解决方案,那么就是进入问题的一个潜在的 "钥匙"。 Forex Trader 2006.09.27 14:40 #1399 我认为你真的不知道艾略特波浪理论是怎么回事! 它是关于FRACTALS的。 分形是组合图的一部分。所以你在发言时最好多做准备。 如果你想 "硬着头皮 "之前读一些东西。 http://www.math.utah.edu/vigre/reu/reports/harris_fall2005.pdf#search=%22%20Ralph%20Nelson%20Elliott%20elliott%20wave%20theory%20%22 Forex Trader 2006.09.27 14:54 #1400 这不是我写的,有一个链接:)) 不可能!现在否认已经太晚了!:)) 1...133134135136137138139140141142143144145146147...309 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我认为这是一个非常有价值的观点!!。也许将价差归一化是有意义的,例如通过过去一两个月的平均价格,然后计算一系列条形的价差的归一化值。我将尝试在最近的将来根据这一原则来改进该指标。
我已经根据这个建议最终确定了指标。我现在就把它贴出来。如果你使用以前版本的指标,你应该在运行新版本时执行强制重新计算值(force_recalculation=true),而不是等待第二天。
以下是新版指标的屏幕截图,以便与第一版进行比较。
//+------------------------------------------------------------------+ //| AMPLITUDE_STAT_LEVELS_v2.mq4 | //| Copyright © 2006, Solandr | //| solandr99@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Solandr" #property link "solandr99@mail.ru" #property indicator_chart_window //В версии 2 происходит относительный расчёт размахов в соответствии со средней ценой за 25 баров. //В принципе при достаточном количестве баров истории это эквивалентно отношению среднеарифметического значения размаха //к среднему значению цены на истории, умноженное затем на текущее среднее значение цены (например по последним 25 барам). //Но решено оставить всё-таки более сложный алгоритм расчёта (нормировка значений амплитуд), поскольку он наверное будет вполне //уместен и в случаях когда баров истории совсем немного. // ============================================================================================ //"Купи подешевле, продай подороже" - основа, на которой базируется спекуляция на финансовых рынках. //Данный индикатор предлагает своё видение этих уровней "подешевле" и "подороже". Он основан на простом //статистическом расчёте размахов (амплитуд High-Low) баров по имеющейся истории котировок. //Расчёт амплитуд происходит по сериям от 1 до 10 баров. То есть в выбранной серии на истории находитcя разница между //максимальным и минимальным значением цены. Далее окно серии смещается на 1 бар и получаем следующий размах амплитуды //баров для выбранной серии баров. После усреднения значения полученных размахов мы имеем среднее арифметическое диапазона //колебания цены для выбранной серии баров. // //Полученное таким образом значение амплитуды откладывается на графике по следующему принципу. К минимуму текущей серии //баров прибавляется значение среднеарифметического размаха, посчитанного на истории. Так мы получаем возможный //среднестатистический максимум цены для текущей серии баров. То же самое делаем для нахождения среднестатистического //минимума для текущей серии баров. То есть от максимума текущей серии баров отнимаем среднеарифметический размах, //посчитанный для данной серии баров по историческим данным. Индикатор производит описанные выше действия для серий //от 1 до 10 баров. На уровнях присутствуют надписи, поясняющие для какого текущего временного промежутка построен данный //уровень. С параметром TF_needed="AUTO" уровни строятся для серий баров текущего таймфрейма. Если требуется зафиксировать // уровни какого-то таймфрейма на остальных периодах, то необходимо установить это значение в MN, W1, D1, H4, H1, M30, //M15, M5, или в M1. Например для значения TF_needed="D1" на всех периодах будут отображаться уровни для временных //промежутков от 1 до 10 дней, обозначаемых соответственно как D1,...,D10. // //При настройках по умолчанию индикатор производит перерасчёт среднестатистических амплитуд по истории один раз в день //с их внесением в глобальные переменные терминала. Если по какой-то причине (например импортирование дополнительных //котировок) требуется произвести перерасчёт среднеарифметических значений амплитуд для серий баров не дожидаясь //следующего дня, то необходимо установить force_recalculation=true и будет произведён перерасчёт //среднеарифметических значений размахов для серий баров при следующей инициализации индикатора. // //Данный индикатор может быть полезен при принятии решений о входе в позицию. Может поспособствовать сохранению депозита //особенно начинающих трейдеров. Продавайте на красных уровнях и покупайте на зелёных и за Вас будет играть математика! ;o))) //Если Вы например купили на зелёных уровнях и курс пошёл резко против Вас, то убыточную позицию есть смысл удерживать лишь //до тех пор пока красные уровни не окажутся ниже Вашей открытой позиции. И когда цена окажется на этих красных уровнях - //закройте убыточную позицию с минимальным убытком, а во многих случаях и с маленьким плюсом. Желаю успехов!:o) // ============================================================================================ extern string TF_needed="AUTO"; extern bool force_recalculation=false;//принудительный перерасчёт double average_price; bool recalculation_needed=false; bool aver_pr_recalc_needed=true; int last_aver_pr_recalc_bars; double delta[11]; string work_symbol; int TF; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int i,k,all_bars,counter_counted_bars; string b_str,global_name; double average_price_array[10]; work_symbol=Symbol(); //Выбор требуемого тайфрейма для расчёта; if(TF_needed=="AUTO" || (TF_needed!="MN" && TF_needed!="W1" && TF_needed!="D1" && TF_needed!="H4" && TF_needed!="H1" && TF_needed!="M30" && TF_needed!="M15" && TF_needed!="M5" && TF_needed!="M1")) TF=Period(); if(TF_needed=="MN") TF=43200; if(TF_needed=="W1") TF=10080; if(TF_needed=="D1") TF=1440; if(TF_needed=="H4") TF=240; if(TF_needed=="H1") TF=60; if(TF_needed=="M30") TF=30; if(TF_needed=="M15") TF=15; if(TF_needed=="M5") TF=5; if(TF_needed=="M1") TF=1; //Проверяем наличие посчитанных данных амплитуд для данного TF, а также производим проверку дня, в который был произведен расчёт этих данных global_name=work_symbol+"_"+TF+"_counted_day"; if(GlobalVariableCheck(global_name) && !force_recalculation) { if(MathAbs(GlobalVariableGet(global_name)-DayOfYear())>0) recalculation_needed=true; } else recalculation_needed=true; if(recalculation_needed) {//Производим расчёт средней амплитуды бара (серии баров) по таймфрейму TF на символе work_symbol all_bars=iBars(work_symbol,TF); ArrayResize(average_price_array,all_bars); //Рассчитываем массив средних цен для каждого расчётного момента времени на основе 25 баров for(k=all_bars-1;k>=0;k--) { average_price_array[k]=0; counter_counted_bars=0; for(i=k;i<=k+24;i++)//вычисляем среднюю цену на 25 барах { if(i<all_bars) { average_price_array[k]=average_price_array[k]+(iOpen(work_symbol,TF,i)+iHigh(work_symbol,TF,i)+iLow(work_symbol,TF,i)+iClose(work_symbol,TF,i))/4; counter_counted_bars++; } } if(counter_counted_bars>0) average_price_array[k]=average_price_array[k]/counter_counted_bars; } for(i=1;i<=10;i++) delta[i]=0; for(i=1;i<=10;i++) { for(k=all_bars-i;k>=0;k--) { if(average_price_array[k]>0) delta[i]=delta[i]+(iHigh(work_symbol,TF,Highest(Symbol(),TF,MODE_HIGH,i,k))-iLow(work_symbol,TF,Lowest(Symbol(),TF,MODE_LOW,i,k)))/average_price_array[k]; else Print("average_price_array[",k,"]<=0 при i=",i," и k=",k); } delta[i]=NormalizeDouble(delta[i]/(all_bars-i+1),Digits); global_name=work_symbol+"_"+TF+"_"+i; GlobalVariableSet(global_name,delta[i]); //Print("delta",i,"=",delta[i]); } global_name=work_symbol+"_"+TF+"_counted_day"; GlobalVariableSet(global_name,DayOfYear()); recalculation_needed=false; }//if(recalculation_needed) else {//Если данные имеются в глобальных переменных терминала, то берём имеющиеся расчётные данные амплитуд из глобальных переменных терминала for(i=1;i<=10;i++) { global_name=work_symbol+"_"+TF+"_"+i; delta[i]=GlobalVariableGet(global_name); //Print("Глобал ",i," ",delta[i]); } } } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- int i; string b_str; for(i=1;i<=10;i++) { b_str="up_line"+i; ObjectDelete(b_str); b_str="down_line"+i; ObjectDelete(b_str); b_str="up_line_txt"+i; ObjectDelete(b_str); b_str="down_line_txt"+i; ObjectDelete(b_str); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i; string line_name; /* for(i=iBars(work_symbol,TF)-1;i>=0;i--) average_price=average_price+(iOpen(work_symbol,TF,i)+iHigh(work_symbol,TF,i)+iLow(work_symbol,TF,i)+iClose(work_symbol,TF,i))/4; average_price=average_price/iBars(work_symbol,TF); Print("Средняя цена по всей выборке=",NormalizeDouble(average_price,Digits)); average_price=0; */ if(iBars(work_symbol,TF)!=last_aver_pr_recalc_bars) aver_pr_recalc_needed=true; if(aver_pr_recalc_needed) { average_price=0; for(i=0;i<=24;i++) average_price=average_price+(iOpen(work_symbol,TF,i)+iHigh(work_symbol,TF,i)+iLow(work_symbol,TF,i)+iClose(work_symbol,TF,i))/4; average_price=average_price/25; aver_pr_recalc_needed=false; last_aver_pr_recalc_bars=iBars(work_symbol,TF); } //Print("average_price=",NormalizeDouble(average_price,Digits)); for(i=1;i<=10;i++) { if(TF==43200) line_name="MN"+i; if(TF==10080) line_name="W"+i; if(TF==1440) line_name="D"+i; if(TF==240) line_name="H"+4*i; if(TF==60) line_name="H"+i; if(TF==30) line_name="M"+30*i; if(TF==15) line_name="M"+15*i; if(TF==5) line_name="M"+5*i; if(TF==1) line_name="M"+i; up_line(i,iLow(NULL,TF,Lowest(work_symbol,TF,MODE_LOW,i,0))+delta[i]*average_price,line_name); down_line(i,iHigh(NULL,TF,Highest(work_symbol,TF,MODE_HIGH,i,0))-delta[i]*average_price,line_name); } return(0); } //+------------------------------------------------------------------+ int up_line(int q_days, double level, string ln) { string b_str="up_line"+q_days; if(ObjectFind(b_str) == -1) { ObjectCreate(b_str, OBJ_TREND, 0, Time[1], level, Time[1]+2700000,level); ObjectSet(b_str, OBJPROP_STYLE, STYLE_DOT); ObjectSet(b_str, OBJPROP_COLOR, Brown); ObjectSet(b_str, OBJPROP_RAY, true); ObjectSet(b_str, OBJPROP_WIDTH, 1); ObjectMove(b_str, 0, Time[1], level); } else { if(MathAbs(level-ObjectGet(b_str, OBJPROP_PRICE1))>0.9*Point) ObjectDelete(b_str); } b_str="up_line_txt"+q_days; string b_txt=ln; datetime t_bar; if(ObjectFind(b_str) == -1) { ObjectCreate(b_str, OBJ_TEXT, 0, Time[0], 0); ObjectSetText(b_str, b_txt, 8, "Arial", Brown); ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60, level); } else { ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60, level); } return(0); } int down_line(int q_days, double level, string ln) { string b_str="down_line"+q_days; if(ObjectFind(b_str) == -1) { ObjectCreate(b_str, OBJ_TREND, 0, Time[1], level, Time[1]+2700000,level); ObjectSet(b_str, OBJPROP_STYLE, STYLE_DOT); ObjectSet(b_str, OBJPROP_COLOR, DarkGreen); ObjectSet(b_str, OBJPROP_RAY, true); ObjectSet(b_str, OBJPROP_WIDTH, 1); ObjectMove(b_str, 0, Time[1], level); } else { if(MathAbs(level-ObjectGet(b_str, OBJPROP_PRICE1))>0.9*Point) ObjectDelete(b_str); } b_str="down_line_txt"+q_days; string b_txt=ln; if(ObjectFind(b_str) == -1) { ObjectCreate(b_str, OBJ_TEXT, 0, Time[0], 0); ObjectSetText(b_str, b_txt, 8, "Arial", DarkGreen); ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60, level); } else { ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60, level); } return(0); }http://citeseer.ist.psu.edu/,并搜索到。
图形模式识别算法
艾略特波浪理论是关于价格的模式。价格以图表(时间内的价格)的形式表示。
艾略特波浪理论确定了价格内的模式--脉冲、ZigZag、平坦......。如何-
斐波那契回撤。然后将发现的波浪按概率顺序绘制出来,但这是很难做到的(要做出决定巫婆运动是下一个或100%"肯定 "的。因此,我的建议是,如果将图表视为图形,并根据图形理论找到模式,就能更好地解决这个问题。也许(?)它将更准确,决定将是严格的数学?
顺便说一下,我一个来自爱尔兰的朋友(她在那里住了五年了)说,说母语的人不会说May be,而是说probably。是否确定?
"嗨,戴夫。
我确信,组合图可以用来寻找模式
在市场图表中。我还猜测,关于这个主题的工作有
已经完成。
珍妮特六号"
你把组合图这个词叫做什么?如果Candid 所写的
,你很难用这个来进行模式识别。一个顶点的网络可以由各种线条连接,这将形成闭环等。而价格图是一个简单的单线,因为每个时间点只有一个价格值。就图论(组合图)而言,这样的线是最原始的对象。我不认为有什么可以做的。
此外,一个图(组合图)有一个恒定的空间结构。一个价格图表在时间上不断变化。
但这都是IMHO。如果这个问题与你有关,你最好问问组合学和图学领域的专家。例如,珍妮特-斯考特。如果她确信 "组合图可以用来寻找市场图表中的模式",并且 "关于这个主题的工作已经完成",让她提供链接。
我必须说,我对图论的想法是相当肤浅的,它们包括这门科学主要对所寻求的对象的拓扑学感兴趣。模式本身的拓扑结构过于简单,也就是说,很可能对图论不感兴趣。原则上,我们可以想象,我们已经形式化(编码)了标准模式,并试图在图上寻找它们。图中的特定部分可以用一个以上的模式来识别。此外,模式本身,如果它们是某种基元,可以相互关联。通过这种方式,我们得到一个对象,也许类似于图论的做法。这是一项大量的工作,目前还不清楚这样的方法是否会产生什么结果。
你把组合图称为什么?如果Candid 所写的
这不是我写的,有一个链接:))
基本上是的,很容易确定有一个珍妮特-M。六,她确实在处理图表。然而,简单的声明是不够的。如果能至少得到成为结论基础的简要考虑,那就更好了。或者说,确实是一个具体的参考,如果不是一个解决方案,那么就是进入问题的一个潜在的 "钥匙"。
它是关于FRACTALS的。
分形是组合图的一部分。所以你在发言时最好多做准备。
如果你想 "硬着头皮 "之前读一些东西。
http://www.math.utah.edu/vigre/reu/reports/harris_fall2005.pdf#search=%22%20Ralph%20Nelson%20Elliott%20elliott%20wave%20theory%20%22
不可能!现在否认已经太晚了!:))