文章 "如何利用 MQL5 检测趋势和图表形态" - 页 2 12 新评论 Alain Verleyen 2023.04.20 14:17 #11 请在本论坛上仅使用英语发帖。 如有需要, 您可以使用自动翻译工具。 谢谢。 Mohamed Abdelmaaboud 2023.04.20 15:39 #12 J M 双底)配置的检测方面,是否有可能提出一种代码,能够画出 4 条不同的确定线(在图形上或多或少清楚地画出一个 M)?而不是随着价格变化而重新绘制的线,这在发现形态方面完全不是一件好事 。 以双顶为例:1. A 第一条线,它将画出第一条看涨腿。这条线将保持最终形态,不会随着下一步走势的变化而进一步移动......2. 第二条线,将描绘第一个看跌修正,同时预示着可能形成潜在 M 型的第一个顶部。3. 第三个,追踪看涨回升(第二个看涨脉冲),提醒交易者即将回归...4. 4. 最后,一旦图形真正形成,就会画出后面的一条线...好了,我想你已经明白了我的担忧。是否有代码可以完成这些不同的描边?谢谢 感谢您的评论。 我知道根据模式的形式来检测模式可能很难,因为有很多公认的差异,您可能会发现您需要根据目标和您提到的内容来开发代码。 我的想法是,只要你能以合乎逻辑的方式进行描述,你就能编写出代码。 谢谢 J M 2023.04.20 16:34 #13 Mohamed Abdelmaaboud #:感谢您的评论。我知道根据模式的形式来检测模式可能会很困难,因为有很多公认的差异,您可能会发现您需要根据目标和您提到的内容来开发代码。我的想法是,只要你能以合乎逻辑的方式进行描述,你就能编写出代码。谢谢 好的,谢谢 由版主翻译为英文。 这里是英文论坛。请仅使用英语写作。 Juan Luis De Frutos Blanco 2023.04.20 20:49 #14 很高兴读到您的文章,穆罕默德。 我冒昧地(希望您不要见怪)将代码统一起来,以便将结果归纳在一起:这是我所能想到的继续为创建可能的 EA 而采取的措施。 我们鼓励谁对不同的图形状态执行命令? 致以最崇高的敬意。 //+------------------------------------------------------------------+ //|TrendDTDB.mq5 //+------------------------------------------------------------------+ input int checkBars= 20; int high1, high2, low1, low2; double highVal1, highVal2, lowVal1, lowVal2; void OnInit() { PonEtiquetas(); } void OnTick() { high1=getmove(MODE_HIGH,checkBars,0); high2=getmove(MODE_HIGH,checkBars,high1+1); highVal1=NormalizeDouble(iHigh(_Symbol,_Period,high1),5); highVal2=NormalizeDouble(iHigh(_Symbol,_Period,high2),5); low1=getmove(MODE_LOW,checkBars,0); low2=getmove(MODE_LOW,checkBars,low1+1); lowVal1=NormalizeDouble(iLow(_Symbol,_Period,low1),5); lowVal2=NormalizeDouble(iLow(_Symbol,_Period,low2),5); // DOBLE TECHO if(highVal1<=highVal2&&lowVal1>lowVal2){ObjectSetString((int)_Symbol,"LS0",OBJPROP_TEXT,0,"Potencial DT-DOBLE TECHO"); DibujaArriba("DTP",clrGreen);} else if(highVal1<=highVal2&&lowVal1<lowVal2){ObjectSetString((int)_Symbol,"LS0",OBJPROP_TEXT,0,"DT-DOBLE TECHO");DibujaArriba("DT",clrGreen);} else{ObjectSetString((int)_Symbol,"LS0",OBJPROP_TEXT,0,"."); ObjectsDeleteAll(0,"DT",0,-1);} //DOBLE SUELO if(lowVal1>=lowVal2&&highVal1<highVal2){ObjectSetString((int)_Symbol,"LS1",OBJPROP_TEXT,0,"Potencial DS-DOBLE SUELO"); DibujaAbajo("DSP",clrRed);} else if(lowVal1>=lowVal2&&highVal1>highVal2){ObjectSetString((int)_Symbol,"LS1",OBJPROP_TEXT,0,"DT-DOBLE TECHO");DibujaArriba("DS",clrGreen);} else{ObjectSetString((int)_Symbol,"LS1",OBJPROP_TEXT,0,"."); ObjectsDeleteAll(0,"DS",0,-1);} // 趋势发现者 if(lowVal1>lowVal2&&highVal1>highVal2){ObjectSetString((int)_Symbol,"LS2",OBJPROP_TEXT,0,"UP-Tendencia ALCISTA");DibujaArriba("T",clrGreen);} else if(highVal1<highVal2&&lowVal1<lowVal2){ObjectSetString((int)_Symbol,"LS2",OBJPROP_TEXT,0,"DOWN-Tendencia BAJISTA");DibujaAbajo("T",clrRed);} else{ObjectSetString((int)_Symbol,"LS2",OBJPROP_TEXT,0,"SW-Tendencia LATERAL"); ObjectsDeleteAll(0,"T",0,-1);} } int getmove(int move, int count, int startPos) { if(move!=MODE_HIGH && move!=MODE_LOW) return (-1); int currentBar=startPos; int moveReturned=getNextMove(move,count*2+1,currentBar-count); while(moveReturned!=currentBar) { currentBar=getNextMove(move,count,currentBar+1); moveReturned=getNextMove(move,count*2+1,currentBar-count); } return(currentBar); } int getNextMove(int move, int count, int startPos) { if(startPos<0) { count +=startPos; startPos =0; } return((move==MODE_HIGH)? iHighest(Symbol(),Period(),(ENUM_SERIESMODE)move,count,startPos): iLowest(Symbol(),Period(),(ENUM_SERIESMODE)move,count,startPos)); } void DibujaArriba(string Nombre, int mColor) { ObjectDelete(0,Nombre); ObjectCreate(0,Nombre,OBJ_TREND,0,iTime(Symbol(),Period(),high2),iHigh(Symbol(),Period(),high2),iTime(Symbol(),Period(),high1),iHigh(Symbol(),Period(),high1)); ObjectSetInteger(0,Nombre,OBJPROP_COLOR,mColor); ObjectSetInteger(0,Nombre,OBJPROP_WIDTH,1); ObjectSetInteger(0,Nombre,OBJPROP_RAY_RIGHT,true); } void DibujaAbajo(string Nombre, int mColor) { ObjectDelete(0,Nombre); ObjectCreate(0,Nombre,OBJ_TREND,0,iTime(Symbol(),Period(),low2),iLow(Symbol(),Period(),low2),iTime(Symbol(),Period(),low1),iLow(Symbol(),Period(),low1)); ObjectSetInteger(0,Nombre,OBJPROP_COLOR,mColor); ObjectSetInteger(0,Nombre,OBJPROP_WIDTH,1); ObjectSetInteger(0,Nombre,OBJPROP_RAY_RIGHT,true); } void PonEtiquetas() { ObjectCreate((int)_Symbol,"LS0", OBJ_LABEL, 0, 0, 0); ObjectSetString(0,"LS0",OBJPROP_FONT,"Arial"); ObjectSetInteger(0,"LS0",OBJPROP_FONTSIZE,25); ObjectSetInteger(0,"LS0",OBJPROP_COLOR,clrGreen); ObjectSetInteger(0,"LS0", OBJPROP_CORNER, 4); ObjectSetInteger(0,"LS0", OBJPROP_XDISTANCE, 800); ObjectSetInteger(0,"LS0", OBJPROP_YDISTANCE, 50); ObjectSetString((int)_Symbol,"LS0",OBJPROP_TEXT,0,"-"); ObjectCreate((int)_Symbol,"LS1", OBJ_LABEL, 0, 0, 0); ObjectSetString(0,"LS1",OBJPROP_FONT,"Arial"); ObjectSetInteger(0,"LS1",OBJPROP_FONTSIZE,25); ObjectSetInteger(0,"LS1",OBJPROP_COLOR,clrRed); ObjectSetInteger(0,"LS1", OBJPROP_CORNER, 4); ObjectSetInteger(0,"LS1", OBJPROP_XDISTANCE, 800); ObjectSetInteger(0,"LS1", OBJPROP_YDISTANCE, 90); ObjectSetString((int)_Symbol,"LS1",OBJPROP_TEXT,0,"-"); ObjectCreate((int)_Symbol,"LS2", OBJ_LABEL, 0, 0, 0); ObjectSetString(0,"LS2",OBJPROP_FONT,"Arial"); ObjectSetInteger(0,"LS2",OBJPROP_FONTSIZE,25); ObjectSetInteger(0,"LS2",OBJPROP_COLOR,clrWhiteSmoke); ObjectSetInteger(0,"LS2", OBJPROP_CORNER, 4); ObjectSetInteger(0,"LS2", OBJPROP_XDISTANCE, 800); ObjectSetInteger(0,"LS2", OBJPROP_YDISTANCE, 130); ObjectSetString((int)_Symbol,"LS2",OBJPROP_TEXT,0,"-"); } JRandomTrader 2023.09.27 10:06 #15 在每个"√"上创建图形对象 并不是一个好主意。 Aitor Esteban Yague 2023.10.04 17:25 #16 非常好的贡献,祝贺你,非常感谢! Hilario Miguel Ofarril Gonzalez 2023.10.06 07:51 #17 相当清晰可见 .也很有趣 Echo1Zulu1 2024.08.25 00:09 #18 你好,穆罕默德,我读了你的文章和代码。对我帮助很大。 但有一点我不明白。你从哪里获得 "getmove "功能?我试着在 MTQL 上搜索。 我刚刚开始学习,如果答案很简单,请原谅我的提问。 尤金 12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
请在本论坛上仅使用英语发帖。
如有需要, 您可以使用自动翻译工具。
谢谢。以双顶为例:
1. A 第一条线,它将画出第一条看涨腿。这条线将保持最终形态,不会随着下一步走势的变化而进一步移动......
2. 第二条线,将描绘第一个看跌修正,同时预示着可能形成潜在 M 型的第一个顶部。
3. 第三个,追踪看涨回升(第二个看涨脉冲),提醒交易者即将回归...
4. 4. 最后,一旦图形真正形成,就会画出后面的一条线...
好了,我想你已经明白了我的担忧。
是否有代码可以完成这些不同的描边?谢谢
感谢您的评论。
我知道根据模式的形式来检测模式可能很难,因为有很多公认的差异,您可能会发现您需要根据目标和您提到的内容来开发代码。
我的想法是,只要你能以合乎逻辑的方式进行描述,你就能编写出代码。
谢谢
感谢您的评论。
我知道根据模式的形式来检测模式可能会很困难,因为有很多公认的差异,您可能会发现您需要根据目标和您提到的内容来开发代码。
我的想法是,只要你能以合乎逻辑的方式进行描述,你就能编写出代码。
谢谢
好的,谢谢
由版主翻译为英文。
这里是英文论坛。请仅使用英语写作。
致以最崇高的敬意。
你好,穆罕默德,我读了你的文章和代码。对我帮助很大。
但有一点我不明白。你从哪里获得 "getmove "功能?我试着在 MTQL 上搜索。
我刚刚开始学习,如果答案很简单,请原谅我的提问。
尤金