错误、漏洞、问题 - 页 1141 1...113411351136113711381139114011411142114311441145114611471148...3184 新评论 Alexey Kravchenko 2014.05.14 17:32 #11401 大家好!这样的问题。我成功地获得了Bands和MA指标的值。 Bands_handle=iBands(NULL,0,BP_var_s,0,BDev_var_s,PRICE_CLOSE)。 CopyBuffer(Bands_handle,0,0,1,Base)。 CopyBuffer(Bands_handle,1,0,1,Upper)。 CopyBuffer(Bands_handle,2,0,1,Lower)。 B_med_s=Base[0]。 B_up_s=Upper[0]。 B_low_s=Lower[0]。 MA_handle=iMA(NULL,0,MA_var_b,0,MODE_SMA,PRICE_TYPICAL) 。 CopyBuffer(MA_handle,0,0,1,MAv)。 M_av_s=MAv[0]。然后打印:B_up_s = 1.264249475876921 M_av_s = 1.2595然后我尝试进行矩阵运算B_up_s-M_av_s,得到的结果是0.00000000。奇迹是什么? Andrey Miguzov 2014.05.14 17:41 #11402 Alvin1976:大家好!这样的问题。我成功地获得了Bands和MA指标的值。 Bands_handle=iBands(NULL,0,BP_var_s,0,BDev_var_s,PRICE_CLOSE); CopyBuffer(Bands_handle,0,0,1,Base); CopyBuffer(Bands_handle,1,0,1,Upper); CopyBuffer(Bands_handle,2,0,1,Lower); B_med_s=Base[0]; B_up_s=Upper[0]; B_low_s=Lower[0]; MA_handle=iMA(NULL,0,MA_var_b,0,MODE_SMA,PRICE_TYPICAL); CopyBuffer(MA_handle,0,0,1,MAv); M_av_s=MAv[0]; 然后打印:B_up_s = 1.264249475876921 M_av_s = 1.2595然后我尝试进行B_up_s-M_av_s交配操作,结果得到0.00000000。有什么好奇怪的?1) 如何插入代码。2) 你在什么类型的 变量中存储操作的结果?或者更好的是,请给我代码中产生输出的部分。 Alexey Kravchenko 2014.05.14 17:57 #11403 MigVRN:1) 你如何插入代码。2) 你将操作的结果存储在什么类型 的变量中?更好的是,给出代码中产生输出的部分。所有的变量都是双倍的类型。我不明白为什么Bands有很多数字,而MA只有4位小数。根本就不应该有一个零的结果。这就是为什么该算法不起作用。 在MQL4中,一切都那么简单。现在你需要更高的优化速度和多币种检查。我必须把所有东西都转移到MQL5(去他妈的))。 double q=B_up_s-M_av_s; Print( B_up_s-M_av_s=", DoubleToString(q)); Andrey Miguzov 2014.05.14 18:12 #11404 Alvin1976:所有的变量都是双倍的类型。不清楚为什么Bands有很多数字,而MA只有4位小数。而零结果根本就不应该出现。这就是该算法不起作用的原因。 在MQL4中,一切都那么简单。现在你需要优化速度和多币种检查。我必须把所有东西都转移到MQL5(去他妈的))。它应该是有效的。下面是一个基于你的代码的脚本和它的结果。void OnStart() { double Base[1]; double Upper[1]; double Lower[1]; int BP_var_s = 20; int BDev_var_s = 30; int MA_var_b = 10; double M_av_s = 0; double MAv[1]; double B_med_s, B_up_s, B_low_s; //---Далее Ваш код int Bands_handle=iBands(NULL,0,BP_var_s,0,BDev_var_s,PRICE_CLOSE); CopyBuffer(Bands_handle,0,0,1,Base); CopyBuffer(Bands_handle,1,0,1,Upper); CopyBuffer(Bands_handle,2,0,1,Lower); B_med_s=Base[0]; B_up_s=Upper[0]; B_low_s=Lower[0]; int MA_handle=iMA(NULL,0,MA_var_b,0,MODE_SMA,PRICE_TYPICAL); CopyBuffer(MA_handle,0,0,1,MAv); M_av_s=MAv[0]; double q = B_up_s - M_av_s; Print("B_up_s-M_av_s=", DoubleToString(q)); } Vladimir Karputov 2014.05.14 18:14 #11405 Alvin1976:所有的变量都是双倍的类型。不清楚为什么Bands有很多数字,而MA只有4位小数。0的结果根本就不应该出现。这就是为什么该算法不起作用。在MQL4中,一切都那么简单。现在你需要更高的优化速度和多币种检查。我必须把所有东西都转移到MQL5(去他妈的))。 在进行 "减法 "操作之前,打印 变量的值,看看缓冲区里有什么。Print("B_up_s= ",B_up_s,"; M_av_s=",M_av_s); double q=B_up_s-M_av_s; Alexey Kravchenko 2014.05.14 18:45 #11406 MigVRN:它应该是有效的。下面是根据你的代码编写的脚本和它的结果。是的,这个脚本是有效的。即使是这个例子的EA也是有效的。另一方面,我的EA却顽固地给出了零分。让我们来寻找一个错误...... Евгений 2014.05.15 08:54 #11407 大家好!问题,如何使一个变量值在一分钟内的每一个刻度 上被更新,然后这个和被写入一个单独的值,当下一分钟关闭时,这个和的值被新的值所取代?int t = TimeSeconds()。while (t !=0)double b - 变量,在每分钟的每一个刻度上都会更新。double b1 - 变量b在前一个刻度上的值。double s - 一分钟内的所有刻度的金额。double s1 - 前一分钟内的所有点位的金额。b1=b。s=b1+b。如果(t=0)s1=s。如何使数据在每一个刻度上进行汇总,以及如何在一般情况下正确书写? Alexey Kravchenko 2014.05.15 14:47 #11408 Alvin1976:是的,这个脚本是有效的。即使是这个例子的EA也是有效的。但我的专家顾问给出的是零。让我们来寻找错误......以下是已检测到的情况。如果你只是运行EA,它工作得很好,但在策略测试器中,它在一开始就产生了零值。但在下一行,0神奇地变成了一个正常的指标数据。我不明白发生了什么事.....以下是代码。这就是测试员的报告。CJ 0 19:40:47.022 Core 1 EURUSD,M15 (Alpari-Ltd-Demo): OHLC条形状态正在生成。仅在条形图开始时执行OnTick IJ 0 19:40:47.022 核心 1 EURUSD,M15: 测试 experts\tmp.ex5 从 2004.01.07 00:00 到 2004.02.02 00:00 开始 LK 0 19:40:47.022 核心 1 2004.01.07 00:00:00 B_up_s=0.0 M_av_s=0.0 IM 0 19:40:47.022 核心 1 2004.01.07 00:00:00 sbl_top=true B_up_s=0.0 M_av_s=0.0 B_up_s-M_av_s=0.00000000 OQ 0 19:40:47.022 核心 1 2004.01.07 00:15:00 B_up_s=1.279208140152992 M_av_s=1.2718 OI 0 19:40:47.022 核心 1 2004.01.07 00:15:00 sel=true B_up_s=1.279208140152992 M_av_s=1.2718 B_up_s-M_av_s=0.00740814 CJ 0 19:40:47.022 核心 1 2004.01.07 00:30:00 B_up_s=1.279239651523307 M_av_s=1.2721 LN 0 19:40:47.022 核心 1 2004.01.07 00:45:00 B_up_s=1.279382808470771 M_av_s=1.2714 DS 0 19:40:47.022 核心 1 2004.01.07 01:00:00 B_up_s=1.279407737043184 M_av_s=1.2719 OD 0 19:40:47.022 核心 1 2004.01.07 01:15:00 B_up_s=1.279398917431485 M_av_s=1.2727 NI 0 19:40:47.022 核心 1 2004.01.07 01:30:00 B_up_s=1.279380702214008 M_av_s=1.2731 IM 0 19:40:47.022 核心 1 2004.01.07 01:45:00 B_up_s=1.279440208228416 M_av_s=1.2723 LE 0 19:40:47.022 核心 1 2004.01.07 02:00:00 B_up_s=1.279473515350084 M_av_s=1.272 DK 0 19:40:47.022 核心 1 2004.01.07 02:15:00 B_up_s=1.279515146590278 M_av_s=1.2715 FL 0 19:40:47.022 核心 1 2004.01.07 02:30:00 B_up_s=1.279601656250741 M_av_s=1.2709 IQ 0 19:40:47.022 核心 1 2004.01.07 02:45:00 B_up_s=1.279656914787522 M_av_s=1.2709 CE 0 19:40:47.022 Core 1 2004.01.07 03:00:00 B_up_s=1.279579626541548 M_av_s=1.2707//#property link "http://www.mql5.com" //#property version "1.00" //+------------------------------------------------------------------+ double BDev_var_b=2, BDev_var_s=2, B_up_s=0, B_low_s=0, B_med_s=0, M_av_s=0, Base[1], Upper[1], Lower[1], MAv[1], Dist_c=0.0015, Dist_d=0.002; bool selord=false, baiord=false, New_Bar=false, sbl_top=false, sbl_bot=false, bai=false, sel=false; int Bands_handle, MA_handle, MA_var_s=1, BP_var_s=50; //============================================================================================================= int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { Bands_handle=iBands(NULL,0,BP_var_s,0,BDev_var_s,PRICE_CLOSE); CopyBuffer(Bands_handle,0,0,1,Base); CopyBuffer(Bands_handle,1,0,1,Upper); CopyBuffer(Bands_handle,2,0,1,Lower); B_med_s=Base[0]; B_up_s=Upper[0]; B_low_s=Lower[0]; MA_handle=iMA(NULL,0,MA_var_s,0,MODE_SMA,PRICE_TYPICAL); CopyBuffer(MA_handle,0,0,1,MAv); M_av_s=MAv[0]; Print(" B_up_s=",B_up_s, " M_av_s=", M_av_s); // установка флагов if (sbl_top==false && (B_up_s-M_av_s)<Dist_c) { sbl_top=true; Print("sbl_top=true "," B_up_s=",B_up_s, " M_av_s=", M_av_s, " B_up_s-M_av_s=", DoubleToString(B_up_s-M_av_s)); } if (sbl_top==true && (B_up_s-M_av_s)>Dist_d) { sbl_top=false; Print("sel=true "," B_up_s=",B_up_s, " M_av_s=", M_av_s, " B_up_s-M_av_s=", DoubleToString(B_up_s-M_av_s)); } return; } Errors, bugs, questions 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 MQL5中使用坐标下降法的弹性网络回归 Andrey Miguzov 2014.05.15 19:55 #11409 Alvin1976:以下是已经发现的情况。1) 不要在每个tick上创建指标!2) 在访问指标值之前,检查指标是否被创建。3) 检查要求的值是否从指标中复制出来。4)在专家完成后,一定要删除指标的计算部分,否则可能在某些时候耗尽内存。这个问题是因为你试图从尚未创建的指标中复制数值。让它成为一条规则--检查你所调用的函数的结果。 附加的文件: Expert_BByMA.mq5 4 kb Dimitr Trifonov 2014.05.15 19:58 #11410 请告知错误在哪里。Ekpert正在运行演示,3对。这里是日志。PUSD,M15) AUDUSD Request executed: delete buy Ticket: #729600 Price = 0.94794 Lots = 0.1 StopLoss = 0 TakeProfit = 0 Comment = BuyTP(4) LH 0 08:45:05.881 Serendipity5.0 (GBPUSD,M15) AUDUSD Request executed: delete buy Ticket: #729598 Price = 0.94514 Lots = 0.42 StopLoss = 0 TakeProfit = 0 Comment = BuyTP(4) KM 0 08:45:06.053 Serendipity5.0 (GBPUSD,M15) Error: AUDUSD Action: delete buy : Requested Volume: 0.42, Requested StopLoss:0, Requested TakeProfit:0, Requested Price:0.94514 Error:10013 OE 0 08:45:06.053 Serendipity5.0 (GBPUSD,M15) Sleep() for 1 second, retry LO 0 08:45:07.145 Serendipity5.0 (GBPUSD,M15) DeletePendings(): AUDUSD Error deleting pending order: Error Code: 4756 CQ 0 08:45:07.145 Serendipity5.0 (GBPUSD,M15) SendOrder(); OrderCheck() Error = 10013 Sleep() for 1 second, retry GP 0 08:45:08.237 Serendipity5.0 (GBPUSD,M15) DeletePendings(): AUDUSD Error deleting pending order: Error Code: 4756 PL 0 08:45:08.237 Serendipity5.0 (GBPUSD,M15) SendOrder(); OrderCheck() Error = 10013 Sleep() for 1 second, retry以下是代码。bool SendTradeRequest(string symb,ENUM_ORDER_TYPE type,ENUM_TRADE_REQUEST_ACTIONS tradeAction,double price, double lot,double stopLoss,double takeProfit,long const magic, string comment,ulong ticket){ //--- prepare a request MqlTradeRequest request={0}; //ZeroMemory(request); request.action=tradeAction; request.magic=magic; request.symbol=symb; request.volume=lot; request.sl=stopLoss; request.tp=takeProfit; request.type=type; request.price=price; request.comment=comment; if(tradeAction==TRADE_ACTION_MODIFY || tradeAction==TRADE_ACTION_REMOVE)request.order=ticket; //--- send a trade request MqlTradeResult result={0}; MqlTradeCheckResult checkresult={0}; //ZeroMemory(result); //ZeroMemory(checkresult); bool isSuccessful; isSuccessful=OrderCheck(request,checkresult); if(checkresult.retcode!=0 && checkresult.retcode!=10009 && checkresult.retcode!=10008){ Print("SendOrder(); OrderCheck() Error = ",checkresult.retcode, " Sleep() for 1 second, retry"); Sleep(1000); return(0); } isSuccessful=OrderSend(request,result); if( (result.retcode == 10009 || result.retcode == 10008 || result.retcode == 0) ){ //--- write the server reply to log //Print(__FUNCTION__,":",result.comment); Print(symb," "+result.comment+": "+ConvertTradeActionToString(request.action)+" ",(string)ConvertOrderTypeToString(request.type)," Ticket: #",(string)result.order," Price = ",(string)request.price," Lots = ",(string)request.volume, " stopLoss = ",(string)request.sl," takeProfit = ",(string)request.tp," Comment = ",(string)request.comment); if(tradeAction==TRADE_ACTION_PENDING) arrow_cntr=CreateSignalArrow("Open "+(string)ConvertOrderTypeToString(request.type)+" "+request.comment+" Ticket "+(string)result.order+ " Lots "+DoubleToString(request.volume,2)+" Time "+TimeToString(TimeCurrent(),TIME_MINUTES),arrow_cntr,request.price,216,clrDarkViolet,symb); if(tradeAction==TRADE_ACTION_MODIFY) arrow_cntr=CreateSignalArrow("OrderModify "+request.comment+" Ticket "+(string)request.order+" Lots "+DoubleToString(request.volume,2)+ " Time "+TimeToString(TimeCurrent(),TIME_MINUTES),arrow_cntr,request.price,251,clrSilver,symb); if(tradeAction==TRADE_ACTION_REMOVE) arrow_cntr=CreateSignalArrow("OrderDelete "+request.comment+" Ticket "+(string)request.order+" Lots "+DoubleToString(request.volume,2)+ " Time "+TimeToString(TimeCurrent(),TIME_MINUTES),arrow_cntr,Close(1,symb),158,Red,symb); CheckErrorMessage("SendTradeRequest():"); return(1); } 专家试图执行OrderDelete(),出现错误,SendTradeRequest()在while循环中,ekspert相应地进行循环。也许在我提交订单时,价格已经改变了?我是否需要RefreshRates()以及如何正确处理它? 我在论坛上搜索了一下,但没有发现任何例子......提前感谢大家 1...113411351136113711381139114011411142114311441145114611471148...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
大家好!
这样的问题。
我成功地获得了Bands和MA指标的值。
Bands_handle=iBands(NULL,0,BP_var_s,0,BDev_var_s,PRICE_CLOSE)。CopyBuffer(Bands_handle,0,0,1,Base)。
CopyBuffer(Bands_handle,1,0,1,Upper)。
CopyBuffer(Bands_handle,2,0,1,Lower)。
B_med_s=Base[0]。
B_up_s=Upper[0]。
B_low_s=Lower[0]。
MA_handle=iMA(NULL,0,MA_var_b,0,MODE_SMA,PRICE_TYPICAL) 。
CopyBuffer(MA_handle,0,0,1,MAv)。
M_av_s=MAv[0]。
然后打印:B_up_s = 1.264249475876921 M_av_s = 1.2595
然后我尝试进行矩阵运算B_up_s-M_av_s,得到的结果是0.00000000。
奇迹是什么?
大家好!
这样的问题。
我成功地获得了Bands和MA指标的值。
CopyBuffer(Bands_handle,0,0,1,Base);
CopyBuffer(Bands_handle,1,0,1,Upper);
CopyBuffer(Bands_handle,2,0,1,Lower);
B_med_s=Base[0];
B_up_s=Upper[0];
B_low_s=Lower[0];
MA_handle=iMA(NULL,0,MA_var_b,0,MODE_SMA,PRICE_TYPICAL);
CopyBuffer(MA_handle,0,0,1,MAv);
M_av_s=MAv[0];
然后打印:B_up_s = 1.264249475876921 M_av_s = 1.2595
然后我尝试进行B_up_s-M_av_s交配操作,结果得到0.00000000。
有什么好奇怪的?
1) 如何插入代码。
2) 你在什么类型的 变量中存储操作的结果?或者更好的是,请给我代码中产生输出的部分。
1) 你如何插入代码。
2) 你将操作的结果存储在什么类型 的变量中?更好的是,给出代码中产生输出的部分。
所有的变量都是双倍的类型。
我不明白为什么Bands有很多数字,而MA只有4位小数。根本就不应该有一个零的结果。这就是为什么该算法不起作用。
在MQL4中,一切都那么简单。现在你需要更高的优化速度和多币种检查。我必须把所有东西都转移到MQL5(去他妈的))。
所有的变量都是双倍的类型。
不清楚为什么Bands有很多数字,而MA只有4位小数。而零结果根本就不应该出现。这就是该算法不起作用的原因。
在MQL4中,一切都那么简单。现在你需要优化速度和多币种检查。我必须把所有东西都转移到MQL5(去他妈的))。
它应该是有效的。下面是一个基于你的代码的脚本和它的结果。
所有的变量都是双倍的类型。
不清楚为什么Bands有很多数字,而MA只有4位小数。0的结果根本就不应该出现。这就是为什么该算法不起作用。
在MQL4中,一切都那么简单。现在你需要更高的优化速度和多币种检查。我必须把所有东西都转移到MQL5(去他妈的))。
它应该是有效的。下面是根据你的代码编写的脚本和它的结果。
是的,这个脚本是有效的。
即使是这个例子的EA也是有效的。
另一方面,我的EA却顽固地给出了零分。让我们来寻找一个错误......
大家好!
问题,如何使一个变量值在一分钟内的每一个刻度 上被更新,然后这个和被写入一个单独的值,当下一分钟关闭时,这个和的值被新的值所取代?
int t = TimeSeconds()。
while (t !=0)
double b - 变量,在每分钟的每一个刻度上都会更新。
double b1 - 变量b在前一个刻度上的值。
double s - 一分钟内的所有刻度的金额。
double s1 - 前一分钟内的所有点位的金额。
b1=b。
s=b1+b。
如果(t=0)s1=s。
如何使数据在每一个刻度上进行汇总,以及如何在一般情况下正确书写?
是的,这个脚本是有效的。
即使是这个例子的EA也是有效的。
但我的专家顾问给出的是零。让我们来寻找错误......
以下是已检测到的情况。
如果你只是运行EA,它工作得很好,但在策略测试器中,它在一开始就产生了零值。但在下一行,0神奇地变成了一个正常的指标数据。我不明白发生了什么事.....
以下是代码。
这就是测试员的报告。
CJ 0 19:40:47.022 Core 1 EURUSD,M15 (Alpari-Ltd-Demo): OHLC条形状态正在生成。仅在条形图开始时执行OnTick
IJ 0 19:40:47.022 核心 1 EURUSD,M15: 测试 experts\tmp.ex5 从 2004.01.07 00:00 到 2004.02.02 00:00 开始
LK 0 19:40:47.022 核心 1 2004.01.07 00:00:00 B_up_s=0.0 M_av_s=0.0
IM 0 19:40:47.022 核心 1 2004.01.07 00:00:00 sbl_top=true B_up_s=0.0 M_av_s=0.0 B_up_s-M_av_s=0.00000000
OQ 0 19:40:47.022 核心 1 2004.01.07 00:15:00 B_up_s=1.279208140152992 M_av_s=1.2718
OI 0 19:40:47.022 核心 1 2004.01.07 00:15:00 sel=true B_up_s=1.279208140152992 M_av_s=1.2718 B_up_s-M_av_s=0.00740814
CJ 0 19:40:47.022 核心 1 2004.01.07 00:30:00 B_up_s=1.279239651523307 M_av_s=1.2721
LN 0 19:40:47.022 核心 1 2004.01.07 00:45:00 B_up_s=1.279382808470771 M_av_s=1.2714
DS 0 19:40:47.022 核心 1 2004.01.07 01:00:00 B_up_s=1.279407737043184 M_av_s=1.2719
OD 0 19:40:47.022 核心 1 2004.01.07 01:15:00 B_up_s=1.279398917431485 M_av_s=1.2727
NI 0 19:40:47.022 核心 1 2004.01.07 01:30:00 B_up_s=1.279380702214008 M_av_s=1.2731
IM 0 19:40:47.022 核心 1 2004.01.07 01:45:00 B_up_s=1.279440208228416 M_av_s=1.2723
LE 0 19:40:47.022 核心 1 2004.01.07 02:00:00 B_up_s=1.279473515350084 M_av_s=1.272
DK 0 19:40:47.022 核心 1 2004.01.07 02:15:00 B_up_s=1.279515146590278 M_av_s=1.2715
FL 0 19:40:47.022 核心 1 2004.01.07 02:30:00 B_up_s=1.279601656250741 M_av_s=1.2709
IQ 0 19:40:47.022 核心 1 2004.01.07 02:45:00 B_up_s=1.279656914787522 M_av_s=1.2709
CE 0 19:40:47.022 Core 1 2004.01.07 03:00:00 B_up_s=1.279579626541548 M_av_s=1.2707
以下是已经发现的情况。
1) 不要在每个tick上创建指标!
2) 在访问指标值之前,检查指标是否被创建。
3) 检查要求的值是否从指标中复制出来。
4)在专家完成后,一定要删除指标的计算部分,否则可能在某些时候耗尽内存。
这个问题是因为你试图从尚未创建的指标中复制数值。让它成为一条规则--检查你所调用的函数的结果。
请告知错误在哪里。
Ekpert正在运行演示,3对。这里是日志。
以下是代码。
专家试图执行OrderDelete(),出现错误,SendTradeRequest()在while循环中,ekspert相应地进行循环。也许在我提交订单时,价格已经改变了?我是否需要RefreshRates()以及如何正确处理它? 我在论坛上搜索了一下,但没有发现任何例子......
提前感谢大家