- www.mql5.com
- no trading operations
- Any questions from newcomers on MQL4 and MQL5, help and discussion on algorithms and codes
- Error 131 on Seller Validation (MQL4)
have you made the necessary calls to,
TerminalInfoInteger MQLInfoInteger AccountInfoInteger AccountInfoDouble SymbolInfoInteger SymbolInfoSessionTrade OrderCheck Functions and their params ? TERMINAL_TRADE_ALLOWED MQL_TRADE_ALLOWED ACCOUNT_TRADE_EXPERT ACCOUNT_TRADE_ALLOWED SYMBOL_ORDER_MODE SYMBOL_ORDER_MARKET SYMBOL_ORDER_LIMIT SYMBOL_ORDER_STOP SYMBOL_ORDER_STOP_LIMIT SYMBOL_ORDER_SL SYMBOL_ORDER_TP SYMBOL_TRADE_MODE_DISABLED SYMBOL_TRADE_MODE_LONGONLY SYMBOL_TRADE_MODE_SHORTONLY SYMBOL_TRADE_MODE_CLOSEONLY SYMBOL_TRADE_MODE_FULL SYMBOL_VOLUME_MIN SYMBOL_VOLUME_MAX SYMBOL_VOLUME_STEP
There can be mnore, or less, but this is what i usually check as a base stamp before trying to open a position.
have you made the necessary calls to,
There can be mnore, or less, but this is what i usually check as a base stamp before trying to open a position.
I have these function for checking inputs
//----------check user input--------------- // return 1 if error is found void CheckUserInput() { if(TakeProfit<0 || StopLoss<0) { Alert("EA stopped: Check your settings. SL and TP cant have a negative value."); //Reset=1; return(1); } if(RiskPercentage<=0 && Lots<=0) { Alert("EA stopped: Check your settings. Either Lots or RiskPercentage must have a value."); //Reset=1; return(1); } double minstop=MarketInfo(NULL,MODE_STOPLEVEL); if((TakeProfit>0 && TakeProfit<minstop) || (StopLoss>0 && StopLoss<minstop)) { Alert("EA stopped: This pair requires minimum stop values of ",minstop," points."); //Reset=1; return(1); } double Minlot=MarketInfo(Symbol(),MODE_MINLOT); double Maxlot=MarketInfo(Symbol(),MODE_MAXLOT); double MarginNeeded=MarketInfo(Symbol(),MODE_MARGINREQUIRED)*Lots; if(RiskPercentage<=0 && Lots<Minlot) { Alert("EA stopped: Lot size cant be lower than ",Minlot," or higher than ",Maxlot); //Reset=1; return(1); } if(MarginNeeded>=AccountFreeMargin() && RiskPercentage<=0 && Lots>0) { Alert("EA stopped: Lot size too big for current margin."); //Reset=1; return(1); } } //---------------------------------
The following checks for enough money
//-------------------------------------------------------- // Check for enough money for trade size //-------------------------------------------------------- /* Example: CheckMoneyForTrade(NULL,lots,OP_BUY) */ bool CheckMoneyForTrade(string symb,double lots,int type) { double free_margin=AccountFreeMarginCheck(symb,type,lots); //-- if there is not enough money if(free_margin<0) { string oper=(type==OP_BUY)? "Buy":"Sell"; Print("Not enough money for ",oper," ",lots," ",symb," Error code=",GetLastError()); return(false); } //--- checking successful return(true); } //-----------------------------------------------------------
this one checks the correctness of the volume
//+------------------------------------------------------------------+ //| Check the correctness of the order volume | //+------------------------------------------------------------------+ bool CheckVolumeValue(double volume,string &description) { //--- minimal allowed volume for trade operations double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); if(volume<min_volume) { description=StringFormat("Volume is less than the minimal allowed SYMBOL_VOLUME_MIN=%.2f",min_volume); return(false); } //--- maximal allowed volume of trade operations double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); if(volume>max_volume) { description=StringFormat("Volume is greater than the maximal allowed SYMBOL_VOLUME_MAX=%.2f",max_volume); return(false); } //--- get minimal step of volume changing double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP); int ratio=(int)MathRound(volume/volume_step); if(MathAbs(ratio*volume_step-volume)>0.0000001) { description=StringFormat("Volume is not a multiple of the minimal step SYMBOL_VOLUME_STEP=%.2f, the closest correct volume is %.2f", volume_step,ratio*volume_step); return(false); } description="Correct volume value"; return(true); } //-------------------------------------------------------------------
Below is an excerpt of modifying trades. The SYMBOL_TRADE_FREEZE_LEVEL is factored in
if((sTakeProfit>0 && OrderTakeProfit()==0) && (sStopLoss>0 && OrderStopLoss()==0)) { // both not set if((OrderType()==OP_BUY) && (tpb-Bid>SYMBOL_TRADE_FREEZE_LEVEL*_Point) && (Bid-slb>SYMBOL_TRADE_FREEZE_LEVEL*_Point)){ bool OrdMod5=OrderModify(OrderTicket(),0,slb,tpb,0,CLR_NONE); } if((OrderType()==OP_SELL) && (Ask-tps>SYMBOL_TRADE_FREEZE_LEVEL*_Point) && (sls-Ask>SYMBOL_TRADE_FREEZE_LEVEL*_Point)){ bool OrdMod6=OrderModify(OrderTicket(),0,sls,tps,0,CLR_NONE); } } if(sTakeProfit>0 && OrderTakeProfit()==0 && sStopLoss==0) {// if tp not 0 if((OrderType()==OP_BUY) && (tpb-Bid>SYMBOL_TRADE_FREEZE_LEVEL*_Point)){ bool OrdMod1=OrderModify(OrderTicket(),0,OrderStopLoss(),tpb,0,CLR_NONE); } if((OrderType()==OP_SELL) && (Ask-tps>SYMBOL_TRADE_FREEZE_LEVEL*_Point)){ bool OrdMod2=OrderModify(OrderTicket(),0,OrderStopLoss(),tps,0,CLR_NONE); } } if(sStopLoss>0 && OrderStopLoss()==0 && sTakeProfit==0) {// if sl not 0 if((OrderType()==OP_BUY) && (Bid-slb>SYMBOL_TRADE_FREEZE_LEVEL*_Point)){ bool OrdMod3=OrderModify(OrderTicket(),0,slb,OrderTakeProfit(),0,CLR_NONE); } if((OrderType()==OP_SELL) && (sls-Ask>SYMBOL_TRADE_FREEZE_LEVEL*_Point)){ bool OrdMod4=OrderModify(OrderTicket(),0,sls,OrderTakeProfit(),0,CLR_NONE); } }
Automatic validation is the problem. Because before they removed the moderator tab Ive never had problems with automatic validation. Perhaps there are latest changes that cause this.
Well why didn't you say it was MQL4 ?
I don't use that anymore.
And it looks like your missing out on a lot of checks right there, not just one.
If trading is not allowed for whatever reason, and your EA will still try to send an order, there will be an error.
These checks are good because they will filter out the trash EA's from the decent ones.
Well why didn't you say it was MQL4 ?
I don't use that anymore.
And it looks like your missing out on a lot of checks right there, not just one.
If trading is not allowed for whatever reason, and your EA will still try to send an order, there will be an error.
These checks are good because they will filter out the trash EA's from the decent ones.
Thanks for your reply. Yes its for mt4. Many still use mt4 the most popular platform. The automatic validation returns the "no trades opened error" only that one error. Started happening only after latest changes in the submission page.
I have these function for checking inputs
The following checks for enough money
this one checks the correctness of the volume
Below is an excerpt of modifying trades. The SYMBOL_TRADE_FREEZE_LEVEL is factored in
Automatic validation is the problem. Because before they removed the moderator tab Ive never had problems with automatic validation. Perhaps there are latest changes that cause this.
I m troubling with automatic validation too. While backtesting my ea with mt4 strategy tester, no errors found in the Journal. The same ea, on automatic validation , makes a test from 6 4 2016 to 27 5 2016 founding 10 errors. All of them are ordersend error 131 - invalid trade volume - tried to place the Normalize Volume function before Start() and then , placed at the bottom of code. Both can t fix It!!!! Helppp
I don't know that function.
Start() in an EA nowadays?
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use