基于艾略特波浪理论的交易策略 - 页 142 1...135136137138139140141142143144145146147148149...309 新评论 Forex Trader 2006.09.28 16:21 #1411 也许我应该澄清一下。 虽然diam0nd ,但我还是很高兴看到他作为一个新面孔出现在这里 :) Dlia angloyazi4nih uzverey esty angloyazi4niy论坛。您可以通过提问的方式来解决这个问题,也可以通过提问的方式来解决这个问题。Taki ya i predlogil poyt na English forum :) Forex Trader 2006.09.28 22:24 #1412 只是为了澄清事实。 ...我们的眼睛是几千年来进化压力的顶峰,旨在检测模式(食物、狮子),而不是模式检测我们。(Marchette D.J.用于统计模式识别的随机图(Wiley 2004)) :) Forex Trader 2006.09.28 23:43 #1413 2亚历克斯-尼罗巴 最初,我发起这个话题是想找到志同道合的人,即<br / translate="no">那些熟悉艾略特波动理论的人。 我们的想法是在ZigZaga的基础上编写一个有效的指标,它可以 识别波浪,并在图表上画出未来的价格行为。 亚历克斯,如果你一开始就这么说,我们就可以进行一次有趣的讨论。但由于你不想说得具体,人们就转而讨论弗拉迪斯拉夫的战略,他制定的战略比具体的还具体。 然而,没有什么能阻止你(如果你愿意)现在这样做。我想你可能有兴趣知道,除了Rosh的意见外,其他人的看法。 我也曾一度从ZigZaga开始(可能每个人都会经历这样的情况:)。我甚至自己写了一个,因为标准的不适合我。结果我不仅了解了ZigZag,而且还了解了艾略特的理论。这就是为什么我不喜欢它。 我不认为自己是 "熟知艾略特波浪理论 "的人。然而,在这个过程中出现的一些理解让我寻找更深层次的解决方案。也许我的主要动机是,艾略特的方法只能提供一个定性的解决方案。而这对于交易(包括手动和自动)是不够的。这就是为什么Elliottians不能超越认识第三波在哪里和第五波在哪里的问题。 不过,如果出现了这个话题,我将饶有兴趣地参与讨论。 好运。 Forex Trader 2006.09.29 00:15 #1414 2戴夫-梅森 我没有解决方案,但我们有一个开始。<br / translate="no"> 我请六太太解释一下她的意思。"我也会猜想,关于这个话题的工作已经完成了。"因此,如果她愿意为 "免费 "解释,我将分享信息。 如果你有兴趣,我可以告诉你以下情况。 当时,当我与ZigZag打交道时,我写了一个非常简单的专家顾问,只检测一种模式并在此基础上进行交易。图案的配置是我根据自己对ZigZag行为的视觉分析自己制作的。 这个EA的历史测试(6个月)显示我在一段时间内有26%的利润。我在自己的脚本测试器上进行了测试,而不是在MT4内置的测试器上。这个结果,以及对一些情况的了解,并没有让我满意。这就是为什么我放弃了这种方法。 其中一种情况,与你有关,我在这里给出。 选择模式的算法定义不清。这种选择的标准根本就没有定义。 结果,我唯一的办法是先想出一个模式,然后测试一下是否可以使用。我不喜欢这种做法,太随意了。 如果你设法应用图论来提取模式,那将是对问题的一个根本性解决。但是,IMHO,它必须与专家顾问分开进行。而专家顾问应该以定义好的和参数化的模式工作。如果它成功了,你就根本不需要艾略特的理论了。 Forex Trader 2006.09.29 16:37 #1415 2 悠瑞克斯 对我来说(这是我的观点)艾略特波浪理论(EWT)是关于图表的理论,甚至进一步的外汇价格运动,可以通过图表的理论来解释,严格的数学。不幸的是,EWT对我来说(我不是数学家),我想对任何数学家来说都不是真正的数学理论。这就是为什么没有人能够确定在任何时候哪个波浪之后是哪个波浪。 这不是真正的数学理论,只是猜测。 那么图论是超出我能力的东西。 然而,我收到了六太太的答复。 "嗨,戴夫。 不,这不是幻想。 我相信,研究人员或企业有 发表的研究论文或白皮书,你会发现 有趣的是。 如果你在谷歌上的第一次搜索没有找到它。 继续努力。 去吧! 注意到。 Janet Six, Ph.D. 戴夫-梅森写道。 > 谢谢你的及时请求。 > 你能告诉我你的意思吗?"关于这个主题的工作有 >已经完成"?请说明,因为我在外汇论坛的同事认为 >这就是 "幻想"。 > 尊敬的先生。 > 戴夫 " 嗯,她说这不是 "幻想"。 但即使有人在谷歌或......上找到一些东西,这也不能解决问题。 这是数学专业人员的严肃工作。 我所做的是请图论最好的专业人员之一,他是一位教授,以某种方式提供帮助。他说将在几周后答复我。 Forex Trader 2006.09.30 00:45 #1416 我所做的是请图论最好的专业人员之一,他是一位教授,以某种方式提供帮助。他说将在几周后答复我。 我怀疑他是否会比Janet Six博士说得更多。 :-) 但这只是我的看法。我们将拭目以待。 对我来说(这是我的观点)艾略特波浪理论(EWT)是关于图表的理论,甚至进一步的外汇价格运动,可以通过图表的理论来解释,严格的数学。 我不认为是这样。如果它真的是真的,那么外汇价格走势在很久以前就会被 "严格的数学 "所预测。然而,传统智慧恰恰相反:再多的数学知识也无法准确预测价格走势。 不幸的是,EWT对我来说(我不是数学家),我想对任何数学家来说都不是真正的数学理论。这就是为什么没有人能够确定在任何时候哪个波浪之后是哪个波浪。 这不是真正的数学理论,只是猜测。 这是我绝对同意的事情。我想这就是为什么曼德布罗特(一个纯数学家)认为不适合在他的文章中提到艾略特。说到那篇文章:写的是高中水平,没有任何实际用途。为什么一开始就写了? IMHO关于艾略特的理论。5-3浪型在市场上经常出现,以至于可以用视觉来固定它。这显然足以让埃利奥特试图为它找到一个解释。不幸的是,他提出的是一个纯粹的定性解释,而且是一个 "心理学 "解释。因此,它没有什么用处,尽管它给人的印象是我们知道市场上发生了什么。唉,这只是一个印象。 你还不如多给一堆这样的解释。例如,我提供了我自己的,简单到原始的,完全明显的。 连接Min和Max(或反之)的断裂ZigZag总是有一个奇数的段。 也就是说,最小-最大是1段(但有2个顶点)。 最小-最大-最小-最大-最大-3段(但有4个顶点)。 在上升趋势中,"之 "字形上升的步数显然会超过下降的步数。 在一个最简单的案例中,我们得到的比例是5-3。在下降趋势中,情况正好相反--3-5。 而3-3或5-5的比例,人们可能会猜到,是平的。 任何用眼睛看过价格图表的人都知道,市场上有各种模式,而5-3只是其中之一。此外,没有人敢说任何一种模式在原则上是不可能的。但3-1是上升趋势的最小变体,而21-1或例如21-19的变体是非常、非常不可能的。所以5-3只是不可能的模式。而只有那些不了解其随机甚至混乱性质的人才会试图在5-3和3-5日 "拉动 "市场。 因此,在试图辨别第三波和第五波之前,我们应该计算(至少通过历史的实验)各种模式的频率分布。没有这样做的原因是它很困难:分布将是二维的,将ZigZag价格划分为独立的上升和下降部分的算法是模糊的。此外,即使是 "之 "字形,也可以用几种明显不同的方式构建。 在这种情况下,我们能谈什么 "理论"?有艾略特波,没有争议。但没有理论,唉。 让某人尝试合理地反驳我。 Forex Trader 2006.09.30 11:13 #1417 更准确地定义。 我说的是解释而不是预测。 Forex Trader 2006.09.30 13:59 #1418 更准确地定义。<br / translate="no"> 我说的是解释而不是预测。 是的,当然了。唯一的问题是如何 "更准确"。如果这种准确性能够被测量出来,那么就有东西可以谈了。如果没有,那么我们又会停留在 "定性 "讨论的层面。 而且,在我看来,挑战恰恰是预测。而且最好是有一个可以先验确定的已知的肯定程度。而且任何事情都可以解释。EWT很好地解释了市场。只不过,这些解释还没有把精英们放在首位。 Forex Trader 2006.10.01 10:58 #1419 对指标进行了一些修正。 第3版纠正了货币对较低时间段上的线条显示不正确的错误,涉及日元。 引入了一条用黄色标记的中心线。它是红色和绿色水平的算术平均值。至于它的用途,有一个假设,如果这条线路被通过,它可以被添加到已经在红色或绿色水平上打开的盈利位置。尽管随着时间的推移,对其使用可能有其他解释。 //+------------------------------------------------------------------+ //| AMPLITUDE_STAT_LEVELS_v3.mq4 | //| Copyright © 2006, Solandr | //| solandr99@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Solandr" #property link "solandr99@mail.ru" #property indicator_chart_window //В версии 3 поправлена ошибка неверного отображения линий на младших таймфреймах валютных пар, с участием японской йены. //Введена центральная линия, обозначаемая жёлтым цветом. Она является средним арифметическим значением красных и зелёных //уровней. По поводу её использования имеется предположение, что при прохождении этой линии можно добавляться к уже //прибыльной позиции, открытой на красных или зелёных уровнях. Хотя с течением времени возможно появление также и других //трактовок её использования. // //В версии 2 происходит относительный расчёт размахов в соответствии со средней ценой за 25 баров. //В принципе при достаточном количестве баров истории это эквивалентно отношению среднеарифметического значения размаха //к среднему значению цены на истории, умноженное затем на текущее среднее значение цены (например по последним 25 барам). //Но решено оставить всё-таки более сложный алгоритм расчёта (нормировка каждого из значений амплитуд по текущей средней //цене), поскольку он наверное будет вполне уместен и в случаях когда баров истории совсем немного. // //Версия 1. Первоначальный вариант индикатора. // // ============================================================================================ //"Купи подешевле, продай подороже" - основа, на которой базируется спекуляция на финансовых рынках. //Данный индикатор предлагает своё видение этих уровней "подешевле" и "подороже". Он основан на простом //статистическом расчёте размахов (амплитуд High-Low) баров по имеющейся истории котировок. //Расчёт амплитуд происходит по сериям от 1 до 10 баров. То есть в выбранной серии на истории находитcя разница между //максимальным и минимальным значением цены. Далее окно серии смещается на 1 бар и получаем следующий размах амплитуды //баров для выбранной серии баров. После усреднения значения полученных размахов с учётом нормировки по среднему значению //цены на 25 барах мы имеем среднее арифметическое диапазона колебания цены для выбранной серии баров (а точнее его //нормированное значение). Это значение помещается в глобальные переменные терминала. // //Далее при расчёте текущих уровней из глобальных переменных терминала извлекается требуемое нормированное значение //диапазона колебаний и умножается на среднюю цену, вычисленную по последним 25 барам. Полученное таким образом значение //амплитуды откладывается на графике по следующему принципу. К минимуму текущей серии //баров прибавляется это вычисленное значение. Так мы получаем возможный среднестатистический максимум цены для текущей //серии баров. То же самое делаем для нахождения среднестатистического минимума для текущей серии баров. То есть от //максимума текущей серии баров отнимаем полученное значение амплитуды, посчитанное для данной серии баров по историческим //данным. Индикатор производит описанные выше действия для серий от 1 до 10 баров. На уровнях присутствуют надписи, //поясняющие для какого текущего временного промежутка построен данный уровень. С параметром TF_needed="AUTO" уровни //строятся для серий баров текущего таймфрейма. Если требуется зафиксировать уровни какого-то таймфрейма на остальных //периодах, то необходимо установить это значение в MN, W1, D1, H4, H1, M30, M15, M5, или в M1. Например для значения //TF_needed="D1" на всех периодах будут отображаться уровни для временных промежутков от 1 до 10 дней, обозначаемых //соответственно как D1,...,D10. // //При настройках по умолчанию индикатор производит перерасчёт среднестатистических амплитуд по истории один раз в день //с их внесением в глобальные переменные терминала. Если по какой-то причине (например импортирование дополнительных //котировок) требуется произвести перерасчёт среднеарифметических значений амплитуд для серий баров не дожидаясь //следующего дня, то необходимо установить force_recalculation=true и будет произведён перерасчёт среднеарифметических //значений размахов для серий баров при следующей инициализации индикатора. После проведения принудительного пересчёта //значение force_recalculation нужно вернуть в значение false для исключения постоянного пересчёта данных! // //Данный индикатор может быть полезен при принятии решений о входе в позицию. Может поспособствовать сохранению депозита //особенно начинающих трейдеров. Продавайте на красных уровнях и покупайте на зелёных и за Вас будет играть математика! ;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]=delta[i]/(all_bars-i+1); global_name=work_symbol+"_"+TF+"_"+i; GlobalVariableSet(global_name,delta[i]); //Print("delta",i,"=",DoubleToStr(delta[i],8)); } 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); } b_str="centr_line"; ObjectDelete(b_str); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i; string line_name; double buffer,c_line=0; /* 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; buffer=iLow(NULL,TF,Lowest(work_symbol,TF,MODE_LOW,i,0))+delta[i]*average_price; up_line(i,buffer,line_name); c_line=c_line+buffer; buffer=iHigh(NULL,TF,Highest(work_symbol,TF,MODE_HIGH,i,0))-delta[i]*average_price; down_line(i,buffer,line_name); c_line=c_line+buffer; } c_line=c_line/20.0; centr_line(c_line); 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); } int centr_line(double level) { string b_str="centr_line"; 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, Yellow); ObjectSet(b_str, OBJPROP_RAY, true); ObjectSet(b_str, OBJPROP_WIDTH, 1); ObjectSet(b_str, OBJPROP_BACK, false); ObjectMove(b_str, 0, Time[1], level); } else { if(MathAbs(level-ObjectGet(b_str, OBJPROP_PRICE1))>0.9*Point) ObjectDelete(b_str); } return(0); } Forex Trader 2006.10.02 12:31 #1420 <br/ translate="no"> 有艾略特波浪,没有争议。但理论上,唉,不是这样的。 让某人尝试合理地反驳我。 为什么不呢? 我可以看到你是如何利用 "之 "字形找到一个理论的。并解释了这一切 :-)只有 "之 "字形只是一个指标,显示价格在相反方向上的偏差百分比。你还不如用十字形和之字形,它们做同样的事情,只是不是用百分比,而是用 绝对值。要比较图像,你至少要认识到草图,而对于人字形来说,这是有问题的。艾略特在第12课中开始了它,尼利在第5-9章,或者更好的是在第6-1章,然后Multipoints(不知不觉地)展示了如何识别波。而且很有效。我试着在网上画了一张分钟图,从早到晚反复地画,都是这样。我很少有必要改变什么。有的时候,通道(趋势线)在翻倍后会走得更低一些,并捕捉到一些被拉长的三分之一。 1...135136137138139140141142143144145146147148149...309 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
Dlia angloyazi4nih uzverey esty angloyazi4niy论坛。您可以通过提问的方式来解决这个问题,也可以通过提问的方式来解决这个问题。Taki ya i predlogil poyt na English forum :)
...我们的眼睛是几千年来进化压力的顶峰,旨在检测模式(食物、狮子),而不是模式检测我们。(Marchette D.J.用于统计模式识别的随机图(Wiley 2004))
:)
我们的想法是在ZigZaga的基础上编写一个有效的指标,它可以
识别波浪,并在图表上画出未来的价格行为。
亚历克斯,如果你一开始就这么说,我们就可以进行一次有趣的讨论。但由于你不想说得具体,人们就转而讨论弗拉迪斯拉夫的战略,他制定的战略比具体的还具体。
然而,没有什么能阻止你(如果你愿意)现在这样做。我想你可能有兴趣知道,除了Rosh的意见外,其他人的看法。
我也曾一度从ZigZaga开始(可能每个人都会经历这样的情况:)。我甚至自己写了一个,因为标准的不适合我。结果我不仅了解了ZigZag,而且还了解了艾略特的理论。这就是为什么我不喜欢它。
我不认为自己是 "熟知艾略特波浪理论 "的人。然而,在这个过程中出现的一些理解让我寻找更深层次的解决方案。也许我的主要动机是,艾略特的方法只能提供一个定性的解决方案。而这对于交易(包括手动和自动)是不够的。这就是为什么Elliottians不能超越认识第三波在哪里和第五波在哪里的问题。
不过,如果出现了这个话题,我将饶有兴趣地参与讨论。
好运。
如果你有兴趣,我可以告诉你以下情况。
当时,当我与ZigZag打交道时,我写了一个非常简单的专家顾问,只检测一种模式并在此基础上进行交易。图案的配置是我根据自己对ZigZag行为的视觉分析自己制作的。
这个EA的历史测试(6个月)显示我在一段时间内有26%的利润。我在自己的脚本测试器上进行了测试,而不是在MT4内置的测试器上。这个结果,以及对一些情况的了解,并没有让我满意。这就是为什么我放弃了这种方法。
其中一种情况,与你有关,我在这里给出。
选择模式的算法定义不清。这种选择的标准根本就没有定义。
结果,我唯一的办法是先想出一个模式,然后测试一下是否可以使用。我不喜欢这种做法,太随意了。
如果你设法应用图论来提取模式,那将是对问题的一个根本性解决。但是,IMHO,它必须与专家顾问分开进行。而专家顾问应该以定义好的和参数化的模式工作。如果它成功了,你就根本不需要艾略特的理论了。
对我来说(这是我的观点)艾略特波浪理论(EWT)是关于图表的理论,甚至进一步的外汇价格运动,可以通过图表的理论来解释,严格的数学。不幸的是,EWT对我来说(我不是数学家),我想对任何数学家来说都不是真正的数学理论。这就是为什么没有人能够确定在任何时候哪个波浪之后是哪个波浪。
这不是真正的数学理论,只是猜测。
那么图论是超出我能力的东西。
然而,我收到了六太太的答复。
"嗨,戴夫。
不,这不是幻想。
我相信,研究人员或企业有
发表的研究论文或白皮书,你会发现
有趣的是。 如果你在谷歌上的第一次搜索没有找到它。
继续努力。
去吧!
注意到。
Janet Six, Ph.D.
戴夫-梅森写道。
> 谢谢你的及时请求。
> 你能告诉我你的意思吗?"关于这个主题的工作有
>已经完成"?请说明,因为我在外汇论坛的同事认为
>这就是 "幻想"。
> 尊敬的先生。
> 戴夫
"
嗯,她说这不是 "幻想"。
但即使有人在谷歌或......上找到一些东西,这也不能解决问题。
这是数学专业人员的严肃工作。
我所做的是请图论最好的专业人员之一,他是一位教授,以某种方式提供帮助。他说将在几周后答复我。
我怀疑他是否会比Janet Six博士说得更多。 :-)
但这只是我的看法。我们将拭目以待。
我不认为是这样。如果它真的是真的,那么外汇价格走势在很久以前就会被 "严格的数学 "所预测。然而,传统智慧恰恰相反:再多的数学知识也无法准确预测价格走势。
这不是真正的数学理论,只是猜测。
这是我绝对同意的事情。我想这就是为什么曼德布罗特(一个纯数学家)认为不适合在他的文章中提到艾略特。说到那篇文章:写的是高中水平,没有任何实际用途。为什么一开始就写了?
IMHO关于艾略特的理论。5-3浪型在市场上经常出现,以至于可以用视觉来固定它。这显然足以让埃利奥特试图为它找到一个解释。不幸的是,他提出的是一个纯粹的定性解释,而且是一个 "心理学 "解释。因此,它没有什么用处,尽管它给人的印象是我们知道市场上发生了什么。唉,这只是一个印象。
你还不如多给一堆这样的解释。例如,我提供了我自己的,简单到原始的,完全明显的。
连接Min和Max(或反之)的断裂ZigZag总是有一个奇数的段。
也就是说,最小-最大是1段(但有2个顶点)。
最小-最大-最小-最大-最大-3段(但有4个顶点)。
在上升趋势中,"之 "字形上升的步数显然会超过下降的步数。
在一个最简单的案例中,我们得到的比例是5-3。在下降趋势中,情况正好相反--3-5。
而3-3或5-5的比例,人们可能会猜到,是平的。
任何用眼睛看过价格图表的人都知道,市场上有各种模式,而5-3只是其中之一。此外,没有人敢说任何一种模式在原则上是不可能的。但3-1是上升趋势的最小变体,而21-1或例如21-19的变体是非常、非常不可能的。所以5-3只是不可能的模式。而只有那些不了解其随机甚至混乱性质的人才会试图在5-3和3-5日 "拉动 "市场。
因此,在试图辨别第三波和第五波之前,我们应该计算(至少通过历史的实验)各种模式的频率分布。没有这样做的原因是它很困难:分布将是二维的,将ZigZag价格划分为独立的上升和下降部分的算法是模糊的。此外,即使是 "之 "字形,也可以用几种明显不同的方式构建。
在这种情况下,我们能谈什么 "理论"?有艾略特波,没有争议。但没有理论,唉。
让某人尝试合理地反驳我。
我说的是解释而不是预测。
是的,当然了。唯一的问题是如何 "更准确"。如果这种准确性能够被测量出来,那么就有东西可以谈了。如果没有,那么我们又会停留在 "定性 "讨论的层面。
而且,在我看来,挑战恰恰是预测。而且最好是有一个可以先验确定的已知的肯定程度。而且任何事情都可以解释。EWT很好地解释了市场。只不过,这些解释还没有把精英们放在首位。
第3版纠正了货币对较低时间段上的线条显示不正确的错误,涉及日元。
引入了一条用黄色标记的中心线。它是红色和绿色水平的算术平均值。至于它的用途,有一个假设,如果这条线路被通过,它可以被添加到已经在红色或绿色水平上打开的盈利位置。尽管随着时间的推移,对其使用可能有其他解释。
//+------------------------------------------------------------------+ //| AMPLITUDE_STAT_LEVELS_v3.mq4 | //| Copyright © 2006, Solandr | //| solandr99@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Solandr" #property link "solandr99@mail.ru" #property indicator_chart_window //В версии 3 поправлена ошибка неверного отображения линий на младших таймфреймах валютных пар, с участием японской йены. //Введена центральная линия, обозначаемая жёлтым цветом. Она является средним арифметическим значением красных и зелёных //уровней. По поводу её использования имеется предположение, что при прохождении этой линии можно добавляться к уже //прибыльной позиции, открытой на красных или зелёных уровнях. Хотя с течением времени возможно появление также и других //трактовок её использования. // //В версии 2 происходит относительный расчёт размахов в соответствии со средней ценой за 25 баров. //В принципе при достаточном количестве баров истории это эквивалентно отношению среднеарифметического значения размаха //к среднему значению цены на истории, умноженное затем на текущее среднее значение цены (например по последним 25 барам). //Но решено оставить всё-таки более сложный алгоритм расчёта (нормировка каждого из значений амплитуд по текущей средней //цене), поскольку он наверное будет вполне уместен и в случаях когда баров истории совсем немного. // //Версия 1. Первоначальный вариант индикатора. // // ============================================================================================ //"Купи подешевле, продай подороже" - основа, на которой базируется спекуляция на финансовых рынках. //Данный индикатор предлагает своё видение этих уровней "подешевле" и "подороже". Он основан на простом //статистическом расчёте размахов (амплитуд High-Low) баров по имеющейся истории котировок. //Расчёт амплитуд происходит по сериям от 1 до 10 баров. То есть в выбранной серии на истории находитcя разница между //максимальным и минимальным значением цены. Далее окно серии смещается на 1 бар и получаем следующий размах амплитуды //баров для выбранной серии баров. После усреднения значения полученных размахов с учётом нормировки по среднему значению //цены на 25 барах мы имеем среднее арифметическое диапазона колебания цены для выбранной серии баров (а точнее его //нормированное значение). Это значение помещается в глобальные переменные терминала. // //Далее при расчёте текущих уровней из глобальных переменных терминала извлекается требуемое нормированное значение //диапазона колебаний и умножается на среднюю цену, вычисленную по последним 25 барам. Полученное таким образом значение //амплитуды откладывается на графике по следующему принципу. К минимуму текущей серии //баров прибавляется это вычисленное значение. Так мы получаем возможный среднестатистический максимум цены для текущей //серии баров. То же самое делаем для нахождения среднестатистического минимума для текущей серии баров. То есть от //максимума текущей серии баров отнимаем полученное значение амплитуды, посчитанное для данной серии баров по историческим //данным. Индикатор производит описанные выше действия для серий от 1 до 10 баров. На уровнях присутствуют надписи, //поясняющие для какого текущего временного промежутка построен данный уровень. С параметром TF_needed="AUTO" уровни //строятся для серий баров текущего таймфрейма. Если требуется зафиксировать уровни какого-то таймфрейма на остальных //периодах, то необходимо установить это значение в MN, W1, D1, H4, H1, M30, M15, M5, или в M1. Например для значения //TF_needed="D1" на всех периодах будут отображаться уровни для временных промежутков от 1 до 10 дней, обозначаемых //соответственно как D1,...,D10. // //При настройках по умолчанию индикатор производит перерасчёт среднестатистических амплитуд по истории один раз в день //с их внесением в глобальные переменные терминала. Если по какой-то причине (например импортирование дополнительных //котировок) требуется произвести перерасчёт среднеарифметических значений амплитуд для серий баров не дожидаясь //следующего дня, то необходимо установить force_recalculation=true и будет произведён перерасчёт среднеарифметических //значений размахов для серий баров при следующей инициализации индикатора. После проведения принудительного пересчёта //значение force_recalculation нужно вернуть в значение false для исключения постоянного пересчёта данных! // //Данный индикатор может быть полезен при принятии решений о входе в позицию. Может поспособствовать сохранению депозита //особенно начинающих трейдеров. Продавайте на красных уровнях и покупайте на зелёных и за Вас будет играть математика! ;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]=delta[i]/(all_bars-i+1); global_name=work_symbol+"_"+TF+"_"+i; GlobalVariableSet(global_name,delta[i]); //Print("delta",i,"=",DoubleToStr(delta[i],8)); } 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); } b_str="centr_line"; ObjectDelete(b_str); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i; string line_name; double buffer,c_line=0; /* 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; buffer=iLow(NULL,TF,Lowest(work_symbol,TF,MODE_LOW,i,0))+delta[i]*average_price; up_line(i,buffer,line_name); c_line=c_line+buffer; buffer=iHigh(NULL,TF,Highest(work_symbol,TF,MODE_HIGH,i,0))-delta[i]*average_price; down_line(i,buffer,line_name); c_line=c_line+buffer; } c_line=c_line/20.0; centr_line(c_line); 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); } int centr_line(double level) { string b_str="centr_line"; 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, Yellow); ObjectSet(b_str, OBJPROP_RAY, true); ObjectSet(b_str, OBJPROP_WIDTH, 1); ObjectSet(b_str, OBJPROP_BACK, false); ObjectMove(b_str, 0, Time[1], level); } else { if(MathAbs(level-ObjectGet(b_str, OBJPROP_PRICE1))>0.9*Point) ObjectDelete(b_str); } return(0); }有艾略特波浪,没有争议。但理论上,唉,不是这样的。
让某人尝试合理地反驳我。
为什么不呢? 我可以看到你是如何利用 "之 "字形找到一个理论的。并解释了这一切 :-)只有 "之 "字形只是一个指标,显示价格在相反方向上的偏差百分比。你还不如用十字形和之字形,它们做同样的事情,只是不是用百分比,而是用
绝对值。要比较图像,你至少要认识到草图,而对于人字形来说,这是有问题的。艾略特在第12课中开始了它,尼利在第5-9章,或者更好的是在第6-1章,然后Multipoints(不知不觉地)展示了如何识别波。而且很有效。我试着在网上画了一张分钟图,从早到晚反复地画,都是这样。我很少有必要改变什么。有的时候,通道(趋势线)在翻倍后会走得更低一些,并捕捉到一些被拉长的三分之一。