【发布时间】:2021-04-16 13:03:36
【问题描述】:
我尝试根据不同图表上的 MA 交叉信号打开多个订单。 我发现一个问题是,当打开第一个订单时,orderstotal() 为零。 所以打开第一个订单很容易。 但是当信号在另一个图表上相遇时,需要在不同的图表上打开下一个订单。 这里有问题。我计算了未结订单数量并尝试打开下一个订单。 问题出现在这里,这么多频繁的订单打开一次又一次 怎么办呢
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);
}
【问题讨论】:
标签: mql4