[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 101 1...949596979899100101102103104105106107108...631 新评论 Chukwuma Okoye 2012.05.04 09:42 #1001 Zhunko: 将清除以前的评论。 谢谢你 Skander 2012.05.04 10:15 #1002 大家好! 请帮助我理解MQL4入门手册中的这个例子。就是这个地方。 我在我不明白的地方用红色划线。为什么IndicatorCounted()在Tick 3返回299?自上次指标调用(Tick 2)以来,前一根蜡烛没有变化,而且是第300根蜡烛。所以该函数应该返回300。 还有一个问题:你能不能告诉我,在这张图片中,最后一个条形图的开盘价是在Tick 2还是在Tick 3出现的价格? 感谢所有的人,他们不会与痛苦擦肩而过 :-)) Alexey Subbotin 2012.05.04 10:26 #1003 Skander: 大家好! 帮我举一个MQL4教程中的例子。就是这个地方。 我在我不明白的地方用红色划线。为什么IndicatorCounted()在Tick 3上会返回299?毕竟 在时间t2,酒吧还没有被认为完成,因为从技术上讲,时间框架周期还没有结束。我们没有办法事先确定这是否是该条的最后一个刻度,或者在下一个条开始之前是否会有更多的刻度。因此,"指标计数 "返回它根据文件 应该返回的东西:在时间t2计算的条数,不包括零条(同样在时间t2),即300-1=299。 Skander 2012.05.04 12:37 #1004 alsu: 在时间t2,酒吧还没有被认为完成,因为从技术上讲,时间框架周期还没有结束。我们没有办法事先确定这是否是该条的最后一个刻度,或者在下一个条开始之前是否会有更多的刻度。因此,"指标计数 "根据文件 规定返回它应该返回的结果:在时间t2计算的条数,不包括零条(同样在时间t2),即300-1=299。 我明白你的意思了:你描述的是时间t2的情况,但教科书上说,在时间t3,指标计数函数返回的数字与时间t2的相同。我不清楚,它为什么会这样做?这里的这个片段。 还是这里描述的时间t2的情况? Alexey Subbotin 2012.05.04 13:40 #1005 Skander: 我明白你的意思了:你描述的是时间t2的情况,但教科书上说,在时间t3,指标计数函数返回的数字与时间t2的相同。我不清楚,它为什么会这样做?这里的这一段。 还是这里描述的时间t2的情况? 不,在时间t3。关键是t3是一个条形图的第一个 刻度线,这意味着,因为还没有对它进行计算,IndicatorCounted()的值还没有时间改变--它只发生在函数start()完成其工作之后。这是非常合乎逻辑的--该函数给出了计算的条数,所以在给定条数的至少一个刻度被计算之前,改变其值是没有意义的。因此,在t3时刻,我们仍然看到价值299,但在下一个tick,它将是300。 是不是更清楚了? Kirllik 2012.05.04 20:00 #1006 伙计们,请告知什么是头文件(MQH),它可以在编辑器中创建。编辑的帮助并没有说什么。 costy_ 2012.05.04 23:57 #1007 Las-tochka: 伙计们,告诉我什么是头文件(MQH),它可以在编辑器中创建。编辑的帮助并没有说什么。 库 有功能,你可以在MetaEditor、Notepad中创建它 。 汇编是不需要的。在编译时 ,include包含了专家的必要功能,而Libraries库 ex4也被编译和导入 (即不断访问它以获得必要的f-ms)。 [删除] 2012.05.05 00:14 #1008 Las-tochka: 伙计们建议什么是,头文件(MQH),你可以在编辑器中创建它。编辑的帮助并没有说什么。 我认为MKL中的头文件也值得从这个角度去看。 因为我们知道语言中没有类,但这很方便。可以用头文件来创建某种类。在其中,我们创建了一个描述对象(变量)的环境,并定义了将与该环境一起工作的函数。相当方便(假设项目 足够复杂)。 Sceptic Philozoff 2012.05.05 01:52 #1009 220Volt: 如你所知,这门语言没有课程,但它很方便。你可以使用头文件创建一些类似于类的东西。在其中,我们创建了一个描述对象(变量)的环境,并定义了将与该环境一起工作的函数。相当方便(前提是该项目相当复杂)。 你能不能说得更具体一点?请给我一个例子,好吗? 对于像Las-tochk'i这样的初学者来说,你的这些聪明的信完全说明不了问题。 [删除] 2012.05.05 06:05 #1010 Mathemat: 你能说得更具体些吗?请给我们举个例子。 对于像Las-tochk'i这样的初学者来说,你的这些聪明的信完全说明不了问题。 我想没有人会有兴趣去挖掘别人的代码,这样一个类的例子。 //+------------------------------------------------------------------+ //| WaveCounter.mq4 | //| Паха | //| | //+------------------------------------------------------------------+ #property copyright "Паха" #define wC_SHADECOLOR C'121,0,0' #define wC_NAMEPART "WaveCounter" //#define NEW_LINE_COLOR DarkKhaki #define NEW_LINE_STILE 2 #define NEW_LINE_RAY 0 #define SCARP_LINE_STILE 1 //#define SCARP_LINE_COLOR White #include <WaveCounterCore.mqh> ///////////////////////////////////////////////////////////////////// Var string wC_sName = ""; int wC_iTimeframe; int wC_iDirection; bool wC_bFirst; int iwC_iLockBar; double wC_dSizePorog[][2]; //------------------------ rez int wC_iMoveBar[2]; double wC_dMovePrice[2]; bool wC_bScarp; int wC_iStop; ///////////////////////////////////////////////////////////////////// /* //-------------------------------------------------- private bool wC_vn_getWaveSizeArray(); //-------------------------------------------------- public string wC_Create(bool bSizeFilter, bool bAddToExtr); bool wC_Check(string &sName, bool bFromBegin, bool bFirst); bool wC_IsScarp(); int wC_IsStop(); bool wC_Redraw(); */ ///////////////////////////////////////////////////////////////////// string wC_Create(bool bSizeFilter, bool bAddToExtr) { //---- string sShadeName[2] = {"wC_Shade1", "wC_Shade2"}; //--// if(ObjectFind(sShadeName[0]) < 0) { Shade_create( sShadeName[0], wC_SHADECOLOR ); return(""); } if(ObjectFind(sShadeName[1]) < 0) { Shade_create( sShadeName[1], wC_SHADECOLOR ); return(""); } //--\\ if( ! Shade_attach(sShadeName, false) ) return(""); if( ! Shade_direction(wC_iDirection, 0, 1) ) return(""); if( ! Shade_minTimeframe(0) ) return(""); wC_iTimeframe = Shade_getTimeframe(); int iCorrectIndex[2] = {0, 1}; Shade_correctKoord(iCorrectIndex); datetime datPoint0; double dPoint0, dPoint1; if(wC_iDirection == 2) { if( ! Shade_getPointTimePrice(0, CONTMOV1, false, datPoint0, dPoint0) ) return(""); } else { if( ! Shade_getPointTimePrice(0, CONTMOV1, true, datPoint0, dPoint0) ) return(""); } if(bSizeFilter) { if( ! wC_vn_getWaveSizeArray() ) return(""); int iIndexPoroga[1]; if( ! MyInputBox("Индекс порога", iIndexPoroga) ) return(""); if( iIndexPoroga[0] < 0 || iIndexPoroga[0] + 1 > ArrayRange(wC_dSizePorog, 0) ) { Alert("Недопустимый индекс"); return(""); } if(wC_iDirection == 2) dPoint1 = dPoint0 + wC_dSizePorog[ iIndexPoroga[0] ][0] * dPoint0; else dPoint1 = dPoint0 - wC_dSizePorog[ iIndexPoroga[0] ][0] * dPoint0; iwC_iLockBar = MYEMPTY; } else { if(wC_iDirection == 2) { if( ! Shade_getPoint(1, CONTMOV2, true, iwC_iLockBar) ) return(false); dPoint1 = iHigh(NULL, wC_iTimeframe, iwC_iLockBar); } else { if( ! Shade_getPoint(1, CONTMOV2, false, iwC_iLockBar) ) return(false); dPoint1 = iLow(NULL, wC_iTimeframe, iwC_iLockBar); } if(dPoint1 == 0) return(false); if(bAddToExtr) iwC_iLockBar --; } if( ! Fun_partOfName(wC_sName) ) return(""); wC_sName = StringConcatenate(wC_sName, wC_NAMEPART); if( ! ObjectCreate(wC_sName, OBJ_TREND, 0, datPoint0, dPoint0, datPoint0, dPoint1) ) return(""); if( ! ObjectSetText(wC_sName, "2") ) return(""); if( ! ObjectSet(wC_sName, OBJPROP_RAY, NEW_LINE_RAY) ) return(""); if( ! ObjectSet(wC_sName, OBJPROP_COLOR, Fun_ColorFromPanel()) ) return(""); if( ! ObjectSet(wC_sName, OBJPROP_STYLE, NEW_LINE_STILE) ) return(""); Fun_deleteObjects(sShadeName); return(wC_sName); } //-------------------------------------------------- bool wC_vn_getWaveSizeArray() { static bool bSizePorogInit = false; if(bSizePorogInit) return(true); string sSymbol = Symbol(); if( sSymbol == "USDCHF" ) { if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeUSDCHF, 0)) < 0) return(false); if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeUSDCHF) < 1) return(false); bSizePorogInit = true; return(true); } if( sSymbol == "AUDJPY" ) { if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeAUDJPY, 0)) < 0) return(false); if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeAUDJPY) < 1) return(false); bSizePorogInit = true; return(true); } if( sSymbol == "EURUSD" ) { if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeEURUSD, 0)) < 0) return(false); if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeEURUSD) < 1) return(false); bSizePorogInit = true; return(true); } if( sSymbol == "EURGBP" ) { if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeEURGBP, 0)) < 0) return(false); if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeEURGBP) < 1) return(false); bSizePorogInit = true; return(true); } if( sSymbol == "EURJPY" ) { if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeEURJPY, 0)) < 0) return(false); if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeEURJPY) < 1) return(false); bSizePorogInit = true; return(true); } if( sSymbol == "GBPUSD" ) { if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeGBPUSD, 0)) < 0) return(false); if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeGBPUSD) < 1) return(false); bSizePorogInit = true; return(true); } if( sSymbol == "USDCAD" ) { if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeUSDCAD, 0)) < 0) return(false); if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeUSDCAD) < 1) return(false); bSizePorogInit = true; return(true); } if( sSymbol == "USDJPY" ) { if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeUSDJPY, 0)) < 0) return(false); if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeUSDJPY) < 1) return(false); bSizePorogInit = true; return(true); } if( sSymbol == "AUDUSD" ) { if(ArrayResize(wC_dSizePorog, ArrayRange(prop_dWaveSizeAUDUSD, 0)) < 0) return(false); if(ArrayCopy(wC_dSizePorog, prop_dWaveSizeAUDUSD) < 1) return(false); bSizePorogInit = true; return(true); } Alert("У символа нет размерного массива, или он не прописан в функции Tl_vn_getWaveSizeArray()"); return(false); } //-------------------------------------------------- bool wC_Check(string &sName, bool bFromBegin, bool bFirst) { if(StringFind(sName, wC_NAMEPART) == -1) return(false); wC_bScarp = false; wC_iStop = -1; wC_sName = sName; string sDescrip = ObjectDescription(sName); int iID = StrToInteger(sName); if(iID == 0) return(false); datetime datLastTime; if(sDescrip == "1" && ! bFirst) { datLastTime = FL_LastTime(); if(datLastTime == -1) datLastTime = MYEMPTY; if( ! tlC_Load(iID, datLastTime) ) return(false); wC_bFirst = false; if(bFromBegin) if( ! tlC_SeekToBegin()) return(false); } else { if(sDescrip == "2" && bFirst) { int iBeginBar = iBarShift(NULL, wC_iTimeframe, ObjectGet(sName, OBJPROP_TIME1), true); if(iBeginBar == -1) return(false); datLastTime = FL_LastTime(); if(datLastTime == -1) datLastTime = MYEMPTY; if( ! tlC_Attach(iID, wC_iDirection, wC_iTimeframe, iBeginBar, ObjectGet(sName, OBJPROP_PRICE2), iwC_iLockBar, datLastTime) ) return(false); if(iwC_iLockBar != MYEMPTY) tlC_SetStops(false, MYEMPTY); wC_bFirst = true; } else return(false); } if( ! tlC_Check() ) return(false); wC_bScarp = tlC_IsScarp(); wC_iStop = tlC_IsStop(); tlC_GetCurView(wC_iMoveBar, wC_dMovePrice); if(wC_bScarp) { int iTempVar; double dTempVar; tlC_GetCurPos(iTempVar, dTempVar); wC_iMoveBar[1] = iTempVar; wC_dMovePrice[1] = dTempVar; } return(true); } //-------------------------------------------------- bool wC_IsScarp() { return(wC_bScarp); } //-------------------------------------------------- int wC_IsStop() { return(wC_iStop); } //-------------------------------------------------- 1...949596979899100101102103104105106107108...631 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
将清除以前的评论。
大家好!
请帮助我理解MQL4入门手册中的这个例子。就是这个地方。
我在我不明白的地方用红色划线。为什么IndicatorCounted()在Tick 3返回299?自上次指标调用(Tick 2)以来,前一根蜡烛没有变化,而且是第300根蜡烛。所以该函数应该返回300。
还有一个问题:你能不能告诉我,在这张图片中,最后一个条形图的开盘价是在Tick 2还是在Tick 3出现的价格?
感谢所有的人,他们不会与痛苦擦肩而过 :-))
大家好!
帮我举一个MQL4教程中的例子。就是这个地方。
我在我不明白的地方用红色划线。为什么IndicatorCounted()在Tick 3上会返回299?毕竟
在时间t2,酒吧还没有被认为完成,因为从技术上讲,时间框架周期还没有结束。我们没有办法事先确定这是否是该条的最后一个刻度,或者在下一个条开始之前是否会有更多的刻度。因此,"指标计数 "返回它根据文件 应该返回的东西:在时间t2计算的条数,不包括零条(同样在时间t2),即300-1=299。
在时间t2,酒吧还没有被认为完成,因为从技术上讲,时间框架周期还没有结束。我们没有办法事先确定这是否是该条的最后一个刻度,或者在下一个条开始之前是否会有更多的刻度。因此,"指标计数 "根据文件 规定返回它应该返回的结果:在时间t2计算的条数,不包括零条(同样在时间t2),即300-1=299。
我明白你的意思了:你描述的是时间t2的情况,但教科书上说,在时间t3,指标计数函数返回的数字与时间t2的相同。我不清楚,它为什么会这样做?这里的这个片段。
还是这里描述的时间t2的情况?
我明白你的意思了:你描述的是时间t2的情况,但教科书上说,在时间t3,指标计数函数返回的数字与时间t2的相同。我不清楚,它为什么会这样做?这里的这一段。
还是这里描述的时间t2的情况?
不,在时间t3。关键是t3是一个条形图的第一个 刻度线,这意味着,因为还没有对它进行计算,IndicatorCounted()的值还没有时间改变--它只发生在函数start()完成其工作之后。这是非常合乎逻辑的--该函数给出了计算的条数,所以在给定条数的至少一个刻度被计算之前,改变其值是没有意义的。因此,在t3时刻,我们仍然看到价值299,但在下一个tick,它将是300。
是不是更清楚了?
伙计们,告诉我什么是头文件(MQH),它可以在编辑器中创建。编辑的帮助并没有说什么。
库 有功能,你可以在MetaEditor、Notepad中创建它 。
汇编是不需要的。在编译时 ,include包含了专家的必要功能,而Libraries库 ex4也被编译和导入 (即不断访问它以获得必要的f-ms)。伙计们建议什么是,头文件(MQH),你可以在编辑器中创建它。编辑的帮助并没有说什么。
我认为MKL中的头文件也值得从这个角度去看。
因为我们知道语言中没有类,但这很方便。可以用头文件来创建某种类。在其中,我们创建了一个描述对象(变量)的环境,并定义了将与该环境一起工作的函数。相当方便(假设项目 足够复杂)。
你能不能说得更具体一点?请给我一个例子,好吗?
对于像Las-tochk'i这样的初学者来说,你的这些聪明的信完全说明不了问题。
你能说得更具体些吗?请给我们举个例子。
对于像Las-tochk'i这样的初学者来说,你的这些聪明的信完全说明不了问题。
我想没有人会有兴趣去挖掘别人的代码,这样一个类的例子。