why send order fail?

 

i just tested the MACD.MQL4,but the terminal shows:couldnot send order,error 131.who could tell me why?

the code is written by metasoft,isnot wrong?TKS!

 
univetsity:

i just tested the MACD.MQL4,but the terminal shows:couldnot send order,error 131.who could tell me why?

the code is written by metasoft,isnot wrong?TKS!

131 Invalid trade volume. The code certainly IS wrong. Not adjusting for the particular broker limits or you set a parameter wrong and the code did NOT check and complain.
 
WHRoeder:
131 Invalid trade volume. The code certainly IS wrong. Not adjusting for the particular broker limits or you set a parameter wrong and the code did NOT check and complain.

TKS for you replay.I will try to modify the prarmeter
 

//+------------------------------------------------------------------+
//| Moving Average.mq4 |
//| Copyright ?2005, MetaQuotes Software Corp. |
//| https://www.metaquotes.net// |
//+------------------------------------------------------------------+
#define MAGICMA 20050610

extern double Lots = 0.1;
extern double MaximumRisk = 0.02;
extern double DecreaseFactor = 3;
extern double MovingPeriod = 12;
extern double MovingShift = 6;
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells); // why is this minus sell?
}
//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int orders=HistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
//---- select lot size
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
Print(MarketInfo(Symbol(), MODE_LOTSIZE));
Print(MarketInfo(Symbol(), MODE_MINLOT));
Print(MarketInfo(Symbol(), MODE_LOTSTEP));
Print(MarketInfo(Symbol(), MODE_MAXLOT));

//---- calcuulate number of losses orders without a break
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//---- return lot size
if(lot<0.1) lot=0.1;
return(lot);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double ma;
int res;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
if(Open[1]>ma && Close[1]<ma)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
return;
}
//---- buy conditions
if(Open[1]<ma && Close[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
return;
}
//----
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
{
double ma;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//---- check order type
if(OrderType()==OP_BUY)
{
if(Open[1]>ma && Close[1]<ma) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
break;
}
if(OrderType()==OP_SELL)
{
if(Open[1]<ma && Close[1]>ma) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
break;
}
}
//----
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----
}
//+------------------------------------------------------------------+

I test 2011.03.03-03.12 H1, my medo account have 50,000 the levelrage is 100,the EA traded only 2 orders:

1 2011.03.03 03:00 buy 1 1.00 1.3859 0.0000 0.0000 0.00 50000.00 buy 1
2 2011.03.03 09:00 close 1 1.00 1.3841 0.0000 0.0000 -220.00 49780.00 close buy 1
3 2011.03.03 11:00 buy 2 1.00 1.3866 0.0000 0.0000 0.00 49780.00 buy 2
4 2011.03.03 13:00 close 2 1.00 1.3850 0.0000 0.0000 -200.00 49580.00 close buy2

I'm confused in the lots is o.1,but the volume of testing orders are 1.

 
  1. univetsity:
    I'm confused in the lots is o.1,but the volume of testing orders are 1.
    lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
    Your parameter is Lots, but your function returns lot. Lots is never used.

 
WHRoeder:
  1. univetsity:
    I'm confused in the lots is o.1,but the volume of testing orders are 1.
    Your parameter is Lots, but your function returns lot. Lots is never used.


thanks for you reply

double lot=Lots; do this equation defining "lot"? how should I modify it? I am a newbie in this field.

and why only trade 2 orders,is this with regard to account money and leverage?

Reason: