新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 738 1...731732733734735736737738739740741742743744745...1953 新评论 Alekseu Fedotov 2019.01.16 19:37 #7371 novichok2018:该信息仍然在第12分钟出现。插入打印,在数组被填充 的函数的开始部分 Print("Range = ", ArrayRange(NewsArr,1)); 并显示第二维度上的数值数量 novichok2018 2019.01.16 19:47 #7372 Ilya Prozumentov:我从一切可以看出,NomNews进入While循环时已经处于大于999的状态。那么你需要找出它发生的原因,并在某处重置这个变量。 要检查这一点,请将其写在循环的开头。 是的,在第11分钟,印刷品是1000。 novichok2018 2019.01.16 19:53 #7373 Alekseu Fedotov:插入打印,在数组被填充 的函数的开始部分 并显示第二维度上的数值数量我在While循环的 开头插入了它,得到了无限的Range = 1000。 我是不是在错误的地方插入了它? 这个数字(或函数)是什么?: datetime TimeNewsFunck(int nomf){string s=NewsArr[0][nomf]。string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4) )。return((datetime)(StringToTime(time)+GMTplus*3600))} 那么它从哪里得到int nomf的值呢?我找不到它。 novichok2018 2019.01.16 20:12 #7374 novichok2018:我把它插在While循环的 开头,得到了无限的Range = 1000。 我把它放在了错误的地方吗? 这个数字(或函数)是什么?: datetime TimeNewsFunck(int nomf){string s=NewsArr[0][nomf]。string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4) )。return((datetime)(StringToTime(time)+GMTplus*3600))} 那么它从哪里得到int nomf的值呢?我还没有找到。再有就是我尝试过但没能发现的功能。它可能是问题的根源吗? bool CheckInvestingNews(int &pwr,datetime &mintime) { bool CheckNews=false; pwr=0; int maxPower=0; if(MidleNews || HighNews) { if(TimeCurrent()-LastUpd>=Upd){Print("Investing.com News Loading...");UpdateNews();LastUpd=TimeCurrent();Comment("");} WindowRedraw(); //---Draw a line on the chart news-------------------------------------------- if(DrawNewsLines) { for(int i=0;i<NomNews;i++) { string Name=StringSubstr("NS_"+TimeToStr(TimeNewsFunck(i),TIME_MINUTES)+"_"+NewsArr[1][i]+"_"+NewsArr[3][i],0,63); if(NewsArr[3][i]!="")if(ObjectFind(Name)==0)continue; if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][i])<0)continue; if(TimeNewsFunck(i)<TimeCurrent() && Next)continue; color clrf=clrNONE; if(HighNews && StringFind(NewsArr[2][i],"High")>=0)clrf=HighColor; if(MidleNews && StringFind(NewsArr[2][i],"Moderate")>=0)clrf=MidleColor; // if(LowNews && StringFind(NewsArr[2][i],"Low")>=0)clrf=LowColor; if(clrf==clrNONE)continue; if(NewsArr[3][i]!="") { ObjectCreate(0,Name,OBJ_VLINE,0,TimeNewsFunck(i),0); ObjectSet(Name,OBJPROP_COLOR,clrf); ObjectSet(Name,OBJPROP_STYLE,LineStyle); ObjectSetInteger(0,Name,OBJPROP_WIDTH,LineWidth); ObjectSetInteger(0,Name,OBJPROP_BACK,true); } } } //---------------event Processing------------------------------------ int ii; for(ii=0;ii<NomNews;ii++) { int power=0; if(HighNews && StringFind(NewsArr[2][ii],"High")>=0){ power=3; MinBefore=HighIndentBefore; MinAfter=HighIndentAfter; } if(MidleNews && StringFind(NewsArr[2][ii],"Moderate")>=0){ power=2; MinBefore=MidleIndentBefore; MinAfter=MidleIndentAfter; } // if(LowNews && StringFind(NewsArr[2][ii],"Low")>=0){ power=1; MinBefore=LowIndentBefore; MinAfter=LowIndentAfter; } if(NFPNews && StringFind(NewsArr[3][ii],"Nonfarm Payrolls")>=0){ power=4; MinBefore=NFPIndentBefore; MinAfter=NFPIndentAfter; } if(power==0)continue; if(TimeCurrent()+MinBefore*60>TimeNewsFunck(ii) && TimeCurrent()-MinAfter*60<TimeNewsFunck(ii) && (!OnlySymbolNews || (OnlySymbolNews && StringFind(ValStr,NewsArr[1][ii])>=0))) { if(power>maxPower){ maxPower=power; mintime=TimeNewsFunck(ii); } }else{ CheckNews=false; } } if(maxPower>0){ CheckNews=true; oppoz=true; } } pwr=maxPower; return(CheckNews); } Ilya Prozumentov 2019.01.16 20:36 #7375 novichok2018:然后有一个功能,无论我怎么努力,都没能弄明白。也许这就是问题所在? 只有作者自己会弄清楚。你最好从OnTick()发送代码 Alekseu Fedotov 2019.01.16 20:56 #7376 novichok2018:是的,在第11分钟,它发出了印刷品1000。尝试更换 while(!IsStopped()) 用这句话。 while(NomNews<300 && !IsStopped()) Aliaksei Karalkou 2019.01.17 05:24 #7377 Ilya Prozumentov: 公式中超过((2*psd*usd)*((2*psd*usd)-C))/(C-1))。 指数化:^0.5不是*0.5如果没有一个通过符号和majik看的交易,或没有一个利润或损失,或只有一个对(C=1),我们将得到除以0。 在公式本身之前,你应该检查psd和usd是否>0,并且C !=1。 盈利对的计算是盈利>1,亏损<1,盈利=1的不做分析,即1也要包含在这个或那个组的某个地方。 在你的函数中,最好首先选择与符号和魔法号码相匹配的交易号码,然后检查它们的号码是否有变化,如果有--重新计算zn,如果没有--返回zn(zn在这种情况下不归零,打印时不需要检查!=0)。 Owl停止工作,因为它依赖于变量ww和nn,而当你的函数工作时,它们会改变并破坏owl的算法。 如果有一个代码设计错误,就不会有任何东西被编译。我只能说谢谢你。这是runet中唯一一个他们帮助我的地方。 现在,打印机生成以下 "Stop_Ma_v_5.1 EURUSD,M15: == Z-count equals = -nan(ind)" 。你能不能告诉我这是什么意思,代码应该返回这个数字? 代码 : //+------------------------------------------------------------------+ //| Подсчёт z-вероятности. @axe44 Алексей Корольков | //+------------------------------------------------------------------+ double Z() { zn=0; // z-число psd=0; // кол. положительных сделок usd=0; // количество отрицательных сделок www=0; // боол переменная nnn=0; // боол переменная kolichestvo=0; // подсчёт закрытых ордеров открытых роботом C=0; // C = количество чередований между отрицательными и положительными сделками index=OrdersHistoryTotal(); if(OrdersHistoryTotal()>302) index=301; // берём не более 301 сделки //if(index<30) return(0); // берём не менее 30 count=OrdersHistoryTotal(); // считаем от скольки prom=count-index; // выделяем только последние сделки if (prom<0) prom=0; // исключаем ошибки for( i=prom;i<=count;i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {// далее магия pribul=OrderProfit(); if (ww==0&&pribul>1){C++;www=1;nnn=0;}// подсчитываем смену тенденции if (nn==0&&pribul<1){C++;www=0;nnn=1;}// подсчитываем смену тенденции if (pribul>1){psd++;}//прибыльные сделки if (pribul<1){usd++;}// убыточные сделки kolichestvo++; } } } /* Величина Z = (A * (C — 0.5) — B)/ ((B*(B — C))/(C -1))^(1/2), где: A = количество анализируемых сделок; B = 2*количество прибыльных сделок * количество убыточных сделок; C = количество чередований в выборке (чередованием считается каждая пара сделок, когда прибыльная сделка сменяет убыточную либо наоборот). */ if(kolichestvo>30&&psd>0&&usd>0&&C!=1) zn=(index*(C-0.5)-2*psd*usd) / pow(((2*psd*usd*(2*psd*usd-C))/(C-1)),0.5); return(zn); } 谢谢你 Aliaksei Karalkou 2019.01.17 05:39 #7378 aleksandr bebishev:Mql5的朋友们,你们能帮我在对冲账户中提出平仓 的请求吗?情况:开了 买入头寸,我们需要用卖出限价来关闭它。问题:我怎样才能正确地写一个请求,准确地关闭所选择的头寸,而不是开新的卖出锁定买入?请写一段带注释的代码!提前感谢您!由同一符号的一个未平仓订单关闭另一个未平仓订单,但方向相反。 顺序关闭(OrderCloseBy) intticket,// 要关闭的订单的数量intopposite,//相反顺序的数字colorarrow_color// color );参数门票[in] 要关闭的订单的唯一订单号。相反地[一个相反顺序的唯一序列号。箭头_颜色[图表上收盘箭头的颜色。如果该参数不存在或其值为CLR_NONE,则箭头不在图表中显示。返回的值如果函数成功,返回true;如果有错误,返回false。要获得错误信息,请调用GetLastError()。例子。如果(iRSI(NULL,0,14,PRICE_CLOSE,0)>75){OrderCloseBy(order_id,opposite_id;) return(0); } P.S. 本线程只解析MQL4 [存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Any questions from newcomers Artyom Trishkin 2019.01.17 07:51 #7379 Aliaksei Karalkou:我只能说谢谢你。这是runet的唯一地方,他们在那里提供了帮助。 现在,打印机生成了 "Stop_Ma_v_5.1 EURUSD,M15: ==Z-Account Equals = -nan(ind)"。你能不能告诉我这是什么意思,代码应该返回这个数字? 代码 : 谢谢你 Nan - NaN - 不是一个数字 - 不是一个数字。试着将 Z计算中的数字正常化 Artyom Trishkin 2019.01.17 07:53 #7380 Aliaksei Karalkou:一个未平仓的订单被同一工具的另一个未平仓订单关闭,但方向相反。 boolOrderCloseBy( intticket,// 要关闭的订单的数量intopposite,//相反顺序的数字colorarrow_color// color );参数门票[被关闭的订单的唯一序列号。相反地[一个相反顺序的唯一序列号。箭头_颜色[图表上收盘箭头的颜色。如果该参数缺失或其值为CLR_NONE,图表中就不会显示箭头。返回的值如果函数成功,返回true;如果有错误,返回false。要获得错误信息,请调用GetLastError()。例子。如果(iRSI(NULL,0,14,PRICE_CLOSE,0)>75){OrderCloseBy(order_id,opposite_id;) return(0); } P.S. 本线程只解析MQL4不,任何关于mql4以及mal5的问题都在本线程中处理,因为主要目的是不仅在算法和代码方面提供帮助,而且促进从mql4迁移到mql5。 1...731732733734735736737738739740741742743744745...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
该信息仍然在第12分钟出现。
插入打印,在数组被填充 的函数的开始部分
并显示第二维度上的数值数量
我从一切可以看出,NomNews进入While循环时已经处于大于999的状态。那么你需要找出它发生的原因,并在某处重置这个变量。
要检查这一点,请将其写在循环的开头。
是的,在第11分钟,印刷品是1000。
插入打印,在数组被填充 的函数的开始部分
并显示第二维度上的数值数量
我在While循环的 开头插入了它,得到了无限的Range = 1000。 我是不是在错误的地方插入了它?
这个数字(或函数)是什么?: datetime TimeNewsFunck(int nomf)
{
string s=NewsArr[0][nomf]。
string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4) )。
return((datetime)(StringToTime(time)+GMTplus*3600))
}
那么它从哪里得到int nomf的值呢?我找不到它。
我把它插在While循环的 开头,得到了无限的Range = 1000。 我把它放在了错误的地方吗?
这个数字(或函数)是什么?: datetime TimeNewsFunck(int nomf)
{
string s=NewsArr[0][nomf]。
string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4) )。
return((datetime)(StringToTime(time)+GMTplus*3600))
}
那么它从哪里得到int nomf的值呢?我还没有找到。
再有就是我尝试过但没能发现的功能。它可能是问题的根源吗?
然后有一个功能,无论我怎么努力,都没能弄明白。也许这就是问题所在?
只有作者自己会弄清楚。你最好从OnTick()发送代码
是的,在第11分钟,它发出了印刷品1000。
尝试更换
用这句话。
公式中超过((2*psd*usd)*((2*psd*usd)-C))/(C-1))。
指数化:^0.5不是*0.5
如果没有一个通过符号和majik看的交易,或没有一个利润或损失,或只有一个对(C=1),我们将得到除以0。
在公式本身之前,你应该检查psd和usd是否>0,并且C !=1。
盈利对的计算是盈利>1,亏损<1,盈利=1的不做分析,即1也要包含在这个或那个组的某个地方。
在你的函数中,最好首先选择与符号和魔法号码相匹配的交易号码,然后检查它们的号码是否有变化,如果有--重新计算zn,如果没有--返回zn(zn在这种情况下不归零,打印时不需要检查!=0)。
Owl停止工作,因为它依赖于变量ww和nn,而当你的函数工作时,它们会改变并破坏owl的算法。
如果有一个代码设计错误,就不会有任何东西被编译。我只能说谢谢你。这是runet中唯一一个他们帮助我的地方。
现在,打印机生成以下 "Stop_Ma_v_5.1 EURUSD,M15: == Z-count equals = -nan(ind)" 。你能不能告诉我这是什么意思,代码应该返回这个数字?
代码 :
Mql5的朋友们,你们能帮我在对冲账户中提出平仓 的请求吗?情况:开了 买入头寸,我们需要用卖出限价来关闭它。问题:我怎样才能正确地写一个请求,准确地关闭所选择的头寸,而不是开新的卖出锁定买入?请写一段带注释的代码!提前感谢您!
由同一符号的一个未平仓订单关闭另一个未平仓订单,但方向相反。
顺序关闭(OrderCloseBy)
intticket,// 要关闭的订单的数量
intopposite,//相反顺序的数字
colorarrow_color// color
);
参数
门票
[in] 要关闭的订单的唯一订单号。
相反地
[一个相反顺序的唯一序列号。
箭头_颜色
[图表上收盘箭头的颜色。如果该参数不存在或其值为CLR_NONE,则箭头不在图表中显示。
返回的值
如果函数成功,返回true;如果有错误,返回false。要获得错误信息,请调用GetLastError()。
例子。
如果(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
{
OrderCloseBy(order_id,opposite_id;)
return(0);
}
P.S. 本线程只解析MQL4
我只能说谢谢你。这是runet的唯一地方,他们在那里提供了帮助。
现在,打印机生成了 "Stop_Ma_v_5.1 EURUSD,M15: ==Z-Account Equals = -nan(ind)"。你能不能告诉我这是什么意思,代码应该返回这个数字?
代码 :
一个未平仓的订单被同一工具的另一个未平仓订单关闭,但方向相反。
boolOrderCloseBy(
intticket,// 要关闭的订单的数量
intopposite,//相反顺序的数字
colorarrow_color// color
);
参数
门票
[被关闭的订单的唯一序列号。
相反地
[一个相反顺序的唯一序列号。
箭头_颜色
[图表上收盘箭头的颜色。如果该参数缺失或其值为CLR_NONE,图表中就不会显示箭头。
返回的值
如果函数成功,返回true;如果有错误,返回false。要获得错误信息,请调用GetLastError()。
例子。
如果(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
{
OrderCloseBy(order_id,opposite_id;)
return(0);
}
P.S. 本线程只解析MQL4
不,任何关于mql4以及mal5的问题都在本线程中处理,因为主要目的是不仅在算法和代码方面提供帮助,而且促进从mql4迁移到mql5。