MQL4 EA 在不同图表上通过不同信号打开订单
MQL4 EA open orders by different signal on different charts
我尝试根据不同图表上的 MA 交叉信号打开多个订单。
我发现一个问题是,当打开第一个订单时,orderstotal() 为零。
所以打开第一个订单很容易。
但是当信号在另一个图表上相遇时,需要在不同的图表上打开下一个订单。
问题是 here.I 计算未结订单数并尝试打开下一个订单。
问题就出在这里,很多频繁的订单打开一次又一次打开
怎么处理
extern int MAGIC =1111;
extern string symbol1="EURUSD";
extern string symbol2="EURCAD";
extern string symbol3="NZDCAD";
extern string symbol4="AUDCAD";
extern string symbol5="NZDUSD";
extern string symbol6="AUDUSD";
extern string symbol7="EURGBP";
extern string symbol8="GBPCAD";
extern string symbol9="GBPUSD";
extern string symbol10="USDCAD";
extern string symbol11="EURAUD";
extern string symbol12="CHFJPY";
extern string symbol13="NZDJPY";
extern string symbol14="NZDCHF";
extern string symbol15="EURNZD";
extern string symbol16="AUDJPY";
extern string symbol17="AUDCHF";
extern string symbol18="EURJPY";
extern string symbol19="EURCHF";
extern string symbol20="GBPCHF";
extern string symbol21="AUDNZD";
extern string symbol22="GBPJPY";
extern string symbol23="GBPAUD";
extern string symbol24="CADJPY";
extern string symbol25="CADCHF";
extern string symbol26="GBPNZD";
extern string symbol27="USDJPY";
extern string symbol28="USDCHF";
extern string symbol29="XAUUSD";
extern int period1 = 10;
extern int period2= 15;
extern double Profit = 10 ;
extern double lot= 0.01;
extern double addLot = 0.4 ;
extern int distance = 20;
double buyOrderTotal;
double sellOrderTotal;
double orderPrice ;
double pt;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
if(Digits==3 || Digits==5) pt=10*Point;
else pt=Point;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double FastMovingAverageS1 = iMA(symbol1,0 ,period1,0,MODE_EMA,PRICE_CLOSE,0);
double LastFastMovingAverageS1 = iMA(symbol1,0 ,period1,0,MODE_EMA,PRICE_CLOSE,1);
double SlowMovingAverageS1 = iMA(symbol1,0 ,period2,0,MODE_EMA,PRICE_CLOSE,0);//current bar
double LastSlowMovingAverageS1 = iMA(symbol1,0 ,period2,0,MODE_EMA,PRICE_CLOSE,1);//previous bar
double FastMovingAverageS2 = iMA(symbol2,0 ,period1,0,MODE_EMA,PRICE_CLOSE,0);
double LastFastMovingAverageS2 = iMA(symbol2,0 ,period1,0,MODE_EMA,PRICE_CLOSE,1);
double SlowMovingAverageS2 = iMA(symbol2,0 ,period2,0,MODE_EMA,PRICE_CLOSE,0);//current bar
double LastSlowMovingAverageS2 = iMA(symbol2,0 ,period2,0,MODE_EMA,PRICE_CLOSE,1);//previous bar
double FastMovingAverageS3 = iMA(symbol3,0 ,period1,0,MODE_EMA,PRICE_CLOSE,0);
double LastFastMovingAverageS3 = iMA(symbol3,0 ,period1,0,MODE_EMA,PRICE_CLOSE,1);
double SlowMovingAverageS3 = iMA(symbol3,0 ,period2,0,MODE_EMA,PRICE_CLOSE,0);//current bar
double LastSlowMovingAverageS3 = iMA(symbol3,0 ,period2,0,MODE_EMA,PRICE_CLOSE,1);//previous bar
if ( OrdersTotal() == 0 || CountOrdersThisPairMainBUY()>0 ||CountOrdersThisPairMainSELL()>0 )//if no open orders
{
if ((LastFastMovingAverageS1<LastSlowMovingAverageS1)&& (FastMovingAverageS1>SlowMovingAverageS1) ) //2 - trade condition = 100 /40
{
OrderSend (symbol1,OP_BUY ,lot , Ask, 3,0,0,"Main Buy",MAGIC,0,Green); // 3 -open order
}
if ((LastFastMovingAverageS1>LastSlowMovingAverageS1)&& (FastMovingAverageS1<SlowMovingAverageS1) )
{
OrderSend (symbol1,OP_SELL ,lot, Bid, 3,0,0,"Main Sell",MAGIC,0,Red);
}
if ((LastFastMovingAverageS2<LastSlowMovingAverageS2)&& (FastMovingAverageS2>SlowMovingAverageS2) ) //2 - trade condition = 100 /40
{
OrderSend (symbol2,OP_BUY ,lot , Ask, 3,0,0,"Main Buy",MAGIC,0,Green); // 3 -open order
}
if ((LastFastMovingAverageS2>LastSlowMovingAverageS2)&& (FastMovingAverageS2<SlowMovingAverageS2) )
{
OrderSend (symbol2,OP_SELL ,lot, Bid, 3,0,0,"Main Sell",MAGIC,0,Red);
}
if ((LastFastMovingAverageS3<LastSlowMovingAverageS3)&& (FastMovingAverageS3>SlowMovingAverageS3) ) //2 - trade condition = 100 /40
{
OrderSend (symbol3,OP_BUY ,lot , Ask, 3,0,0,"Main Buy",MAGIC,0,Green); // 3 -open order
}
if ((LastFastMovingAverageS3>LastSlowMovingAverageS3)&& (FastMovingAverageS3<SlowMovingAverageS3) )
{
OrderSend (symbol3,OP_SELL ,lot, Bid, 3,0,0,"Main Sell",MAGIC,0,Red);
}
}
}
int CountOrdersThisPairMainSELL() {
int count = 0;
for (int index = 0; index < OrdersTotal(); index++) {
OrderSelect(index, SELECT_BY_POS);
if (OrderType() == OP_SELL && OrderMagicNumber() == MAGIC && OrderComment() == "Main Sell" ) count++;
}
return (count);
}
int CountOrdersThisPairMainBUY() {
int count;
for (int index = 0; index < OrdersTotal(); index++) {
OrderSelect(index, SELECT_BY_POS);
if (OrderType() == OP_BUY && OrderMagicNumber() == MAGIC && OrderComment() == "Main Buy") count++;
}
return (count);
}
photo 1
photo2
您的代码中有很多错误,布局效率低下。尝试以下
extern int MAGIC =1111;
extern string symbol1="EURUSD";
extern string symbol2="EURCAD";
extern string symbol3="NZDCAD";
extern string symbol4="AUDCAD";
extern string symbol5="NZDUSD";
extern string symbol6="AUDUSD";
extern string symbol7="EURGBP";
extern string symbol8="GBPCAD";
extern string symbol9="GBPUSD";
extern string symbol10="USDCAD";
extern string symbol11="EURAUD";
extern string symbol12="CHFJPY";
extern string symbol13="NZDJPY";
extern string symbol14="NZDCHF";
extern string symbol15="EURNZD";
extern string symbol16="AUDJPY";
extern string symbol17="AUDCHF";
extern string symbol18="EURJPY";
extern string symbol19="EURCHF";
extern string symbol20="GBPCHF";
extern string symbol21="AUDNZD";
extern string symbol22="GBPJPY";
extern string symbol23="GBPAUD";
extern string symbol24="CADJPY";
extern string symbol25="CADCHF";
extern string symbol26="GBPNZD";
extern string symbol27="USDJPY";
extern string symbol28="USDCHF";
extern string symbol29="XAUUSD";
extern int period1 = 10;
extern int period2= 15;
extern double Profit = 10;
extern double lot= 0.01;
extern double addLot = 0.4 ;
extern int distance = 20;
double pt;
bool res;
string symbols[1];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits==3 || Digits==5) pt=10*Point;
else pt=Point;
int idx=0;
if(StringLen(symbol1)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol1; idx++;}
if(StringLen(symbol2)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol2; idx++;}
if(StringLen(symbol3)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol3; idx++;}
if(StringLen(symbol4)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol4; idx++;}
if(StringLen(symbol5)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol5; idx++;}
if(StringLen(symbol6)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol6; idx++;}
if(StringLen(symbol7)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol7; idx++;}
if(StringLen(symbol8)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol8; idx++;}
if(StringLen(symbol9)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol9; idx++;}
if(StringLen(symbol10)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol10; idx++;}
if(StringLen(symbol11)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol11; idx++;}
if(StringLen(symbol12)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol12; idx++;}
if(StringLen(symbol13)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol13; idx++;}
if(StringLen(symbol14)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol14; idx++;}
if(StringLen(symbol15)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol15; idx++;}
if(StringLen(symbol16)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol16; idx++;}
if(StringLen(symbol17)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol17; idx++;}
if(StringLen(symbol18)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol18; idx++;}
if(StringLen(symbol19)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol19; idx++;}
if(StringLen(symbol20)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol20; idx++;}
if(StringLen(symbol21)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol21; idx++;}
if(StringLen(symbol22)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol22; idx++;}
if(StringLen(symbol23)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol23; idx++;}
if(StringLen(symbol24)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol24; idx++;}
if(StringLen(symbol25)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol25; idx++;}
if(StringLen(symbol26)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol26; idx++;}
if(StringLen(symbol27)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol27; idx++;}
if(StringLen(symbol28)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol28; idx++;}
if(StringLen(symbol29)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol29; idx++;}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0; i<ArraySize(symbols); i++)
{
double FastMovingAverage=iMA(symbols[i], 0, period1, 0, MODE_EMA, PRICE_CLOSE, 0);
double LastFastMovingAverage=iMA(symbols[i], 0, period1, 0, MODE_EMA, PRICE_CLOSE, 1);
double SlowMovingAverage=iMA(symbols[i], 0, period2, 0, MODE_EMA, PRICE_CLOSE, 0);
double LastSlowMovingAverage=iMA(symbols[i], 0, period2, 0, MODE_EMA, PRICE_CLOSE, 1);
if(OrdersTotal()>0)
{
bool openTradeFound=false;
for(int j=OrdersTotal()-1; j>=0; j--)
{
if(OrderSelect(j, SELECT_BY_POS))
{
if(OrderSymbol()!=symbols[i]) continue;
if(OrderMagicNumber()!=MAGIC) continue;
openTradeFound=true;
}
}
if(!openTradeFound)
{
if(LastFastMovingAverage<LastSlowMovingAverage && FastMovingAverage>SlowMovingAverage)
res=OrderSend(symbols[i], OP_BUY, lot, MarketInfo(symbols[i],MODE_ASK), 3, 0, 0, "Main Buy", MAGIC, 0, clrGreen);
if(LastFastMovingAverage>LastSlowMovingAverage && FastMovingAverage<SlowMovingAverage)
res=OrderSend(symbols[i], OP_SELL, lot, MarketInfo(symbols[i],MODE_BID), 3, 0, 0, "Main Sell", MAGIC, 0,clrRed);
}
}
else
{
if(LastFastMovingAverage<LastSlowMovingAverage && FastMovingAverage>SlowMovingAverage)
res=OrderSend(symbols[i], OP_BUY, lot, MarketInfo(symbols[i],MODE_ASK), 3, 0, 0, "Main Buy", MAGIC, 0, clrGreen);
if(LastFastMovingAverage>LastSlowMovingAverage && FastMovingAverage<SlowMovingAverage)
res=OrderSend(symbols[i], OP_SELL, lot, MarketInfo(symbols[i],MODE_BID), 3, 0, 0, "Main Sell", MAGIC, 0,clrRed);
}
}
return;
}
我尝试根据不同图表上的 MA 交叉信号打开多个订单。 我发现一个问题是,当打开第一个订单时,orderstotal() 为零。 所以打开第一个订单很容易。 但是当信号在另一个图表上相遇时,需要在不同的图表上打开下一个订单。 问题是 here.I 计算未结订单数并尝试打开下一个订单。 问题就出在这里,很多频繁的订单打开一次又一次打开 怎么处理
extern int MAGIC =1111;
extern string symbol1="EURUSD";
extern string symbol2="EURCAD";
extern string symbol3="NZDCAD";
extern string symbol4="AUDCAD";
extern string symbol5="NZDUSD";
extern string symbol6="AUDUSD";
extern string symbol7="EURGBP";
extern string symbol8="GBPCAD";
extern string symbol9="GBPUSD";
extern string symbol10="USDCAD";
extern string symbol11="EURAUD";
extern string symbol12="CHFJPY";
extern string symbol13="NZDJPY";
extern string symbol14="NZDCHF";
extern string symbol15="EURNZD";
extern string symbol16="AUDJPY";
extern string symbol17="AUDCHF";
extern string symbol18="EURJPY";
extern string symbol19="EURCHF";
extern string symbol20="GBPCHF";
extern string symbol21="AUDNZD";
extern string symbol22="GBPJPY";
extern string symbol23="GBPAUD";
extern string symbol24="CADJPY";
extern string symbol25="CADCHF";
extern string symbol26="GBPNZD";
extern string symbol27="USDJPY";
extern string symbol28="USDCHF";
extern string symbol29="XAUUSD";
extern int period1 = 10;
extern int period2= 15;
extern double Profit = 10 ;
extern double lot= 0.01;
extern double addLot = 0.4 ;
extern int distance = 20;
double buyOrderTotal;
double sellOrderTotal;
double orderPrice ;
double pt;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
if(Digits==3 || Digits==5) pt=10*Point;
else pt=Point;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double FastMovingAverageS1 = iMA(symbol1,0 ,period1,0,MODE_EMA,PRICE_CLOSE,0);
double LastFastMovingAverageS1 = iMA(symbol1,0 ,period1,0,MODE_EMA,PRICE_CLOSE,1);
double SlowMovingAverageS1 = iMA(symbol1,0 ,period2,0,MODE_EMA,PRICE_CLOSE,0);//current bar
double LastSlowMovingAverageS1 = iMA(symbol1,0 ,period2,0,MODE_EMA,PRICE_CLOSE,1);//previous bar
double FastMovingAverageS2 = iMA(symbol2,0 ,period1,0,MODE_EMA,PRICE_CLOSE,0);
double LastFastMovingAverageS2 = iMA(symbol2,0 ,period1,0,MODE_EMA,PRICE_CLOSE,1);
double SlowMovingAverageS2 = iMA(symbol2,0 ,period2,0,MODE_EMA,PRICE_CLOSE,0);//current bar
double LastSlowMovingAverageS2 = iMA(symbol2,0 ,period2,0,MODE_EMA,PRICE_CLOSE,1);//previous bar
double FastMovingAverageS3 = iMA(symbol3,0 ,period1,0,MODE_EMA,PRICE_CLOSE,0);
double LastFastMovingAverageS3 = iMA(symbol3,0 ,period1,0,MODE_EMA,PRICE_CLOSE,1);
double SlowMovingAverageS3 = iMA(symbol3,0 ,period2,0,MODE_EMA,PRICE_CLOSE,0);//current bar
double LastSlowMovingAverageS3 = iMA(symbol3,0 ,period2,0,MODE_EMA,PRICE_CLOSE,1);//previous bar
if ( OrdersTotal() == 0 || CountOrdersThisPairMainBUY()>0 ||CountOrdersThisPairMainSELL()>0 )//if no open orders
{
if ((LastFastMovingAverageS1<LastSlowMovingAverageS1)&& (FastMovingAverageS1>SlowMovingAverageS1) ) //2 - trade condition = 100 /40
{
OrderSend (symbol1,OP_BUY ,lot , Ask, 3,0,0,"Main Buy",MAGIC,0,Green); // 3 -open order
}
if ((LastFastMovingAverageS1>LastSlowMovingAverageS1)&& (FastMovingAverageS1<SlowMovingAverageS1) )
{
OrderSend (symbol1,OP_SELL ,lot, Bid, 3,0,0,"Main Sell",MAGIC,0,Red);
}
if ((LastFastMovingAverageS2<LastSlowMovingAverageS2)&& (FastMovingAverageS2>SlowMovingAverageS2) ) //2 - trade condition = 100 /40
{
OrderSend (symbol2,OP_BUY ,lot , Ask, 3,0,0,"Main Buy",MAGIC,0,Green); // 3 -open order
}
if ((LastFastMovingAverageS2>LastSlowMovingAverageS2)&& (FastMovingAverageS2<SlowMovingAverageS2) )
{
OrderSend (symbol2,OP_SELL ,lot, Bid, 3,0,0,"Main Sell",MAGIC,0,Red);
}
if ((LastFastMovingAverageS3<LastSlowMovingAverageS3)&& (FastMovingAverageS3>SlowMovingAverageS3) ) //2 - trade condition = 100 /40
{
OrderSend (symbol3,OP_BUY ,lot , Ask, 3,0,0,"Main Buy",MAGIC,0,Green); // 3 -open order
}
if ((LastFastMovingAverageS3>LastSlowMovingAverageS3)&& (FastMovingAverageS3<SlowMovingAverageS3) )
{
OrderSend (symbol3,OP_SELL ,lot, Bid, 3,0,0,"Main Sell",MAGIC,0,Red);
}
}
}
int CountOrdersThisPairMainSELL() {
int count = 0;
for (int index = 0; index < OrdersTotal(); index++) {
OrderSelect(index, SELECT_BY_POS);
if (OrderType() == OP_SELL && OrderMagicNumber() == MAGIC && OrderComment() == "Main Sell" ) count++;
}
return (count);
}
int CountOrdersThisPairMainBUY() {
int count;
for (int index = 0; index < OrdersTotal(); index++) {
OrderSelect(index, SELECT_BY_POS);
if (OrderType() == OP_BUY && OrderMagicNumber() == MAGIC && OrderComment() == "Main Buy") count++;
}
return (count);
}
photo 1
photo2
您的代码中有很多错误,布局效率低下。尝试以下
extern int MAGIC =1111;
extern string symbol1="EURUSD";
extern string symbol2="EURCAD";
extern string symbol3="NZDCAD";
extern string symbol4="AUDCAD";
extern string symbol5="NZDUSD";
extern string symbol6="AUDUSD";
extern string symbol7="EURGBP";
extern string symbol8="GBPCAD";
extern string symbol9="GBPUSD";
extern string symbol10="USDCAD";
extern string symbol11="EURAUD";
extern string symbol12="CHFJPY";
extern string symbol13="NZDJPY";
extern string symbol14="NZDCHF";
extern string symbol15="EURNZD";
extern string symbol16="AUDJPY";
extern string symbol17="AUDCHF";
extern string symbol18="EURJPY";
extern string symbol19="EURCHF";
extern string symbol20="GBPCHF";
extern string symbol21="AUDNZD";
extern string symbol22="GBPJPY";
extern string symbol23="GBPAUD";
extern string symbol24="CADJPY";
extern string symbol25="CADCHF";
extern string symbol26="GBPNZD";
extern string symbol27="USDJPY";
extern string symbol28="USDCHF";
extern string symbol29="XAUUSD";
extern int period1 = 10;
extern int period2= 15;
extern double Profit = 10;
extern double lot= 0.01;
extern double addLot = 0.4 ;
extern int distance = 20;
double pt;
bool res;
string symbols[1];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits==3 || Digits==5) pt=10*Point;
else pt=Point;
int idx=0;
if(StringLen(symbol1)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol1; idx++;}
if(StringLen(symbol2)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol2; idx++;}
if(StringLen(symbol3)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol3; idx++;}
if(StringLen(symbol4)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol4; idx++;}
if(StringLen(symbol5)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol5; idx++;}
if(StringLen(symbol6)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol6; idx++;}
if(StringLen(symbol7)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol7; idx++;}
if(StringLen(symbol8)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol8; idx++;}
if(StringLen(symbol9)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol9; idx++;}
if(StringLen(symbol10)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol10; idx++;}
if(StringLen(symbol11)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol11; idx++;}
if(StringLen(symbol12)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol12; idx++;}
if(StringLen(symbol13)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol13; idx++;}
if(StringLen(symbol14)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol14; idx++;}
if(StringLen(symbol15)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol15; idx++;}
if(StringLen(symbol16)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol16; idx++;}
if(StringLen(symbol17)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol17; idx++;}
if(StringLen(symbol18)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol18; idx++;}
if(StringLen(symbol19)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol19; idx++;}
if(StringLen(symbol20)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol20; idx++;}
if(StringLen(symbol21)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol21; idx++;}
if(StringLen(symbol22)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol22; idx++;}
if(StringLen(symbol23)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol23; idx++;}
if(StringLen(symbol24)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol24; idx++;}
if(StringLen(symbol25)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol25; idx++;}
if(StringLen(symbol26)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol26; idx++;}
if(StringLen(symbol27)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol27; idx++;}
if(StringLen(symbol28)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol28; idx++;}
if(StringLen(symbol29)>0) {if(idx>0)ArrayResize(symbols,idx+1); symbols[idx]=symbol29; idx++;}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0; i<ArraySize(symbols); i++)
{
double FastMovingAverage=iMA(symbols[i], 0, period1, 0, MODE_EMA, PRICE_CLOSE, 0);
double LastFastMovingAverage=iMA(symbols[i], 0, period1, 0, MODE_EMA, PRICE_CLOSE, 1);
double SlowMovingAverage=iMA(symbols[i], 0, period2, 0, MODE_EMA, PRICE_CLOSE, 0);
double LastSlowMovingAverage=iMA(symbols[i], 0, period2, 0, MODE_EMA, PRICE_CLOSE, 1);
if(OrdersTotal()>0)
{
bool openTradeFound=false;
for(int j=OrdersTotal()-1; j>=0; j--)
{
if(OrderSelect(j, SELECT_BY_POS))
{
if(OrderSymbol()!=symbols[i]) continue;
if(OrderMagicNumber()!=MAGIC) continue;
openTradeFound=true;
}
}
if(!openTradeFound)
{
if(LastFastMovingAverage<LastSlowMovingAverage && FastMovingAverage>SlowMovingAverage)
res=OrderSend(symbols[i], OP_BUY, lot, MarketInfo(symbols[i],MODE_ASK), 3, 0, 0, "Main Buy", MAGIC, 0, clrGreen);
if(LastFastMovingAverage>LastSlowMovingAverage && FastMovingAverage<SlowMovingAverage)
res=OrderSend(symbols[i], OP_SELL, lot, MarketInfo(symbols[i],MODE_BID), 3, 0, 0, "Main Sell", MAGIC, 0,clrRed);
}
}
else
{
if(LastFastMovingAverage<LastSlowMovingAverage && FastMovingAverage>SlowMovingAverage)
res=OrderSend(symbols[i], OP_BUY, lot, MarketInfo(symbols[i],MODE_ASK), 3, 0, 0, "Main Buy", MAGIC, 0, clrGreen);
if(LastFastMovingAverage>LastSlowMovingAverage && FastMovingAverage<SlowMovingAverage)
res=OrderSend(symbols[i], OP_SELL, lot, MarketInfo(symbols[i],MODE_BID), 3, 0, 0, "Main Sell", MAGIC, 0,clrRed);
}
}
return;
}