初学者的问题 MQL5 MT5 MetaTrader 5 - 页 518 1...511512513514515516517518519520521522523524525...1503 新评论 Mikhail Tkachev 2016.02.20 18:16 #5171 Sergey Gritsay:这里是另一个使用类的选项测试结果 非常感谢你,Sergei !如果我理解正确的话。 在第一种情况下,创建了一个静态变量数组,每个变量为其自己的符号,有一个固定的时间框架,也就是说,该符号不能使用其他时间框架。 在第二种情况下,每个符号+时间框架的组合都有一个类别。 Sergey Gritsay 2016.02.21 01:27 #5172 MikeZv: 非常感谢你,Sergei !如果我理解正确的话。 在第一种情况下,创建了一个静态变量数组,每个变量为其自己的符号,有一个固定的时间框架,也就是说,该符号不能使用其他时间框架。 在第二种情况下,符号+时间框架的每个组合都有一个类别。 是的,没错,但如果你稍加思考,你可以在数组变体中用二维数组取代一维数组。 Vitaliy Medvedev 2016.02.22 16:53 #5173 这样的问题。有谁在任何地方看到过用于开仓、检查和关闭订单的模板代码,而没有开仓和关闭条件?我将尝试自己写一个条件,但当我开始写平仓单时,错误不断......特别是,我不善于寻找和检查要关闭的订单。 Yury Reshetov 2016.02.22 17:05 #5174 Vitaliy Medvedev: 这里有一个问题。有谁在其他地方看到过没有任何开仓和平仓条件 的开仓、检查和平仓订单的模板代码?我试着自己写一个条件,但当我开始写平仓单的时候出错了。特别是,我不善于寻找和检查 订单来关闭它们。结果不理想也就不奇怪了。毕竟,如果没有关闭条件,那么查找和检查这种订单应该本着:找到这个,我不知道是什么,然后关闭它。你应该首先定义选择 关闭订单 的条件,然后再分析它就会容易得多。毕竟,如果有一些误解,我们将只需检查是否符合已知的条件。 Vitaliy Medvedev 2016.02.22 19:56 #5175 Yury Reshetov:结果不理想也就不奇怪了。如果我们没有关闭条件,那么对这种订单的搜索和检查应该本着以下精神:找到东西并关闭它。首先,决定关闭时的选单 条件,然后再进行整理就比较容易了。如果有一些误解,我们只需检查我们确定的条件是否正确。 这一切都很清楚,我已经定义了条件,但根据条件打开订单(打开仍然是一个垃圾,我几乎无法设法打开它们......)。而且越是这样,正确地关闭订单 ...真是一团糟啊! Artyom Trishkin 2016.02.22 21:54 #5176 Vitaliy Medvedev:这一切都很清楚,我已经想好了条件,但根据条件开单,(开单还是一句废话,开单,有难度......)。而且越是这样,正确地关闭订单 ...真是一团糟啊! 如果您知道您选择关闭哪个订单,那么就按其票号关闭它。 Sergey Gritsay 2016.02.23 03:26 #5177 Vitaliy Medvedev:这一切都很清楚,我已经想好了条件,但根据条件开单,(开单还是一句废话,开单,有难度......)。而且越是这样,正确地关闭订单 ...真是一团糟啊!以下是它是如何从我的心中撕开的int Total_orders(int type) { int n=0; int total=OrdersTotal(); for(int i=0; i<total; i++) { if(!OrderSelect(i,SELECT_BY_POS))continue; if(OrderType()!=type)continue; if(OrderMagicNumber()!=Magic)continue; if(OrderSymbol()!=_Symbol)continue; n++; } return(n); } //+------------------------------------------------------------------+ void OrderOpen(int type,double sl) { double price=0.0; double lot; if(error>1)return; if(type==WRONG_VALUE) return; if(Risk!=0.0)lot=LotNormalize(LotVolume(Risk,sl)); else lot=LotNormalize(Lot); do { if(type==OP_BUY) { RefreshRates(); price=NormalizeDouble(Ask,_Digits); if(AccountFreeMarginCheck(_Symbol,type,lot)<=0)return; } if(type==OP_SELL) { RefreshRates(); price=NormalizeDouble(Bid,_Digits); if(AccountFreeMarginCheck(_Symbol,type,lot)<=0)return; } int Ticket=OrderSend(_Symbol,type,lot,price,10000,0,0,CommentOrder,Magic); if(Ticket>0) { error=Fun_Error(_Symbol,GetLastError()); Alert(__FUNCTION__,": open order ",StrToType(type)," ",_Symbol," :",Ticket); } else error=Fun_Error(_Symbol,GetLastError()); } while(error==1 && !IsStopped()); } //+------------------------------------------------------------------+ void Order_Close(int type) { double price=0.0; int total=OrdersTotal(); if(error>1)return; for(int i=total-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS))continue; if(OrderType()!=type)continue; if(OrderMagicNumber()!=Magic)continue; if(OrderSymbol()!=_Symbol)continue; do { if(OrderType()==OP_BUY) { RefreshRates(); price=NormalizeDouble(Bid,_Digits); } if(OrderType()==OP_SELL) { RefreshRates(); price=NormalizeDouble(Ask,_Digits); } int res=OrderClose(OrderTicket(),OrderLots(),price,10000); if(res) { Alert(__FUNCTION__,": close order ",StrToType(OrderType())," ",OrderSymbol()," :",OrderTicket()); error=Fun_Error(_Symbol,GetLastError()); } else error=Fun_Error(_Symbol,GetLastError()); } while(error==1 && !IsStopped()); } } //+------------------------------------------------------------------+ void ModifySL(int Stop_Loss) { if(Stop_Loss<=0)return; double sl=0.0; bool res; int total=OrdersTotal(); for(int i=0; i<total; i++) { if(!OrderSelect(i,SELECT_BY_POS))continue; if(OrderMagicNumber()!=Magic)continue; if(OrderSymbol()!=_Symbol)continue; if(OrderStopLoss()!=0)continue; if(OrderType()==OP_BUY) sl=NormalizeDouble(OrderOpenPrice()-(New_Stop(Stop_Loss)*_Point),_Digits); if(OrderType()==OP_SELL) sl=NormalizeDouble(OrderOpenPrice()+(New_Stop(Stop_Loss)*_Point),_Digits); res=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0); if(!res)Print(__FUNCTION__,": Error modifying StopLoss order ",StrToType(OrderType())," № - ",GetLastError()," ",OrderSymbol()," ",OrderTicket()); } } //+------------------------------------------------------------------+ void ModifyTP(int Take_Profit) { if(Take_Profit<=0)return; double tp=0.0; bool res; int total=OrdersTotal(); for(int i=0; i<total; i++) { if(!OrderSelect(i,SELECT_BY_POS))continue; if(OrderMagicNumber()!=Magic)continue; if(OrderSymbol()!=_Symbol)continue; if(OrderTakeProfit()!=0)continue; if(OrderType()==OP_BUY) tp=NormalizeDouble(OrderOpenPrice()+(New_Stop(Take_Profit)*_Point),_Digits); if(OrderType()==OP_SELL) tp=NormalizeDouble(OrderOpenPrice() -(New_Stop(Take_Profit)*_Point),_Digits); res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tp,0); if(!res)Print(__FUNCTION__,": Error modifying TakeProfit order ",StrToType(OrderType())," № - ",GetLastError()," ",OrderSymbol()," ",OrderTicket()); } } //+------------------------------------------------------------------+ double LotVolume(double procent,double sl) { double lot=0.0; double tv=MarketInfo(_Symbol,MODE_TICKVALUE); double minlot=MarketInfo(_Symbol,MODE_MINLOT); double maxlot=MarketInfo(_Symbol,MODE_MAXLOT); if(sl!=0 && tv!=0) lot=(AccountFreeMargin()*procent)/(sl*tv*100.0); if(lot < minlot)lot = minlot; if(lot > maxlot)lot = maxlot; return(lot); } //+------------------------------------------------------------------+ double LotNormalize(double lot) { double minlot=MarketInfo(_Symbol,MODE_MINLOT); double maxlot=MarketInfo(_Symbol,MODE_MAXLOT); if(lot < minlot)lot = minlot; if(lot > maxlot)lot = maxlot; if(minlot==0.001) return(NormalizeDouble(lot,3)); if(minlot==0.01) return(NormalizeDouble(lot,2)); if(minlot==0.1) return(NormalizeDouble(lot,1)); return(NormalizeDouble(lot,0)); } //+------------------------------------------------------------------+ string StrToType(int type) { if(type==OP_BUY)return("Buy"); if(type==OP_SELL)return("Sell"); return(NULL); } //+------------------------------------------------------------------+ int New_Stop(int Parametr) { int Min_Dist=(int)MarketInfo(_Symbol,MODE_STOPLEVEL); if(Parametr<Min_Dist) { Parametr=Min_Dist*2+(int)MarketInfo(_Symbol,MODE_SPREAD); Alert(_Symbol," Увеличина дистанция стоп-приказа."); } return(Parametr); } //+------------------------------------------------------------------+ int Fun_Error(string symbol,int Error) { switch(Error) { case 0:return(0); case 1:Alert(symbol," ",Error,":No error returned, but the result is unknown");return(2); case 2:Alert(symbol," ",Error,":Common error");return(2); case 3:Alert(symbol," ",Error,":Invalid trade parameters");return(2); case 4:Alert(symbol," ",Error,":Trade server is busy");Sleep(3000);return(1); case 5:Alert(symbol," ",Error,":Old version of the client terminal");return(2); case 6:Alert(symbol," ",Error,":No connection with trade server");Sleep(3000);return(1); case 7:Alert(symbol," ",Error,":Not enough rights");return(2); case 8:Alert(symbol," ",Error,":Too frequent requests");return(2); case 9:Alert(symbol," ",Error,":Malfunctional trade operation");return(2); case 64:Alert(symbol," ",Error,":Account disabled");return(2); case 65:Alert(symbol," ",Error,":Invalid account");return(2); case 128:Alert(symbol," ",Error,":Trade timeout");return(1); case 129:Alert(symbol," ",Error,":Invalid price");return(2); case 130:Alert(symbol," ",Error,":Invalid stops");return(2); case 131:Alert(symbol," ",Error,":Invalid trade volume");return(2); case 132:Alert(symbol," ",Error,":Market is closed");Sleep(10000);return(1); case 133:Alert(symbol," ",Error,":Trade is disabled");return(2); case 134:Alert(symbol," ",Error,":Not enough money");return(2); case 135:Alert(symbol," ",Error,":Price changed");return(1); case 136:Alert(symbol," ",Error,":Off quotes");Sleep(3000);return(1); case 137:Alert(symbol," ",Error,":Broker is busy");Sleep(3000);return(1); case 138:Alert(symbol," ",Error,":Requote");return(1); case 139:Alert(symbol," ",Error,":Order is locked");Sleep(10000);return(1); case 140:Alert(symbol," ",Error,":Buy orders only allowed");return(2); case 141:Alert(symbol," ",Error,":Too many requests");return(2); case 145:Alert(symbol," ",Error,":Modification denied because order is too close to market");Sleep(10000);return(1); case 146:Alert(symbol," ",Error,":Trade context is busy");Sleep(3000);return(1); case 147:Alert(symbol," ",Error,":Expirations are denied by broker");return(2); case 148:Alert(symbol," ",Error,":The amount of open and pending orders has reached the limit set by the broker");return(2); case 149:Alert(symbol," ",Error,":An attempt to open an order opposite to the existing one when hedging is disabled");return(2); case 150:Alert(symbol," ",Error,":An attempt to close an order contravening the FIFO rule");return(2); default:Alert(symbol,":Error - № ",Error);return(2); } return(0); } Vitaliy Medvedev 2016.02.23 06:31 #5178 Sergey Gritsay:下面是我如何从心里得到的。哦...不是吧!?我还没有做过这么多......!是的,嗯...现在我知道为什么事情不能像它们应该的那样工作了。非常感谢你,人性化的。 [删除] 2016.02.23 09:44 #5179 Sergey Gritsay:拿着它,就像它来自我的心。我可以问你为什么要这样做吗?int total=OrdersTotal()。 Sergey Gritsay 2016.02.23 10:02 #5180 Vasyl Nosal:请问为什么要这样做呢?int total=OrdersTotal()。 因为在循环执行过程中,OrdersTotal();的值可能会发生变化,你可能会错过一个订单,或者循环体可能出现故障。 1...511512513514515516517518519520521522523524525...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这里是另一个使用类的选项
测试结果
在第一种情况下,创建了一个静态变量数组,每个变量为其自己的符号,有一个固定的时间框架,也就是说,该符号不能使用其他时间框架。
在第二种情况下,每个符号+时间框架的组合都有一个类别。
非常感谢你,Sergei !如果我理解正确的话。
在第一种情况下,创建了一个静态变量数组,每个变量为其自己的符号,有一个固定的时间框架,也就是说,该符号不能使用其他时间框架。
在第二种情况下,符号+时间框架的每个组合都有一个类别。
这里有一个问题。有谁在其他地方看到过没有任何开仓和平仓条件 的开仓、检查和平仓订单的模板代码?我试着自己写一个条件,但当我开始写平仓单的时候出错了。特别是,我不善于寻找和检查 订单来关闭它们。
结果不理想也就不奇怪了。毕竟,如果没有关闭条件,那么查找和检查这种订单应该本着:找到这个,我不知道是什么,然后关闭它。
你应该首先定义选择 关闭订单 的条件,然后再分析它就会容易得多。毕竟,如果有一些误解,我们将只需检查是否符合已知的条件。
结果不理想也就不奇怪了。如果我们没有关闭条件,那么对这种订单的搜索和检查应该本着以下精神:找到东西并关闭它。
首先,决定关闭时的选单 条件,然后再进行整理就比较容易了。如果有一些误解,我们只需检查我们确定的条件是否正确。
这一切都很清楚,我已经定义了条件,但根据条件打开订单(打开仍然是一个垃圾,我几乎无法设法打开它们......)。
而且越是这样,正确地关闭订单 ...真是一团糟啊!
这一切都很清楚,我已经想好了条件,但根据条件开单,(开单还是一句废话,开单,有难度......)。
而且越是这样,正确地关闭订单 ...真是一团糟啊!
这一切都很清楚,我已经想好了条件,但根据条件开单,(开单还是一句废话,开单,有难度......)。
而且越是这样,正确地关闭订单 ...真是一团糟啊!
以下是它是如何从我的心中撕开的
下面是我如何从心里得到的。
哦...不是吧!?我还没有做过这么多......!是的,嗯...现在我知道为什么事情不能像它们应该的那样工作了。
非常感谢你,人性化的。
拿着它,就像它来自我的心。
我可以问你为什么要这样做吗?
int total=OrdersTotal()。
请问为什么要这样做呢?
int total=OrdersTotal()。