
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Time Period of Graph
What is the code to find out what time period the graph is running at? So I can change variable settings for each time period.
if(?????) . . .
Dave
What is the code to find out what time period the graph is running at? So I can change variable settings for each time period.
if(?????) . . .
Dave[/PHP]
or:
switch(Period())
{
case PERIOD_M1:
...
break;
case PERIOD_M5:
...
break;
...
}
[/PHP]
Sometime it maybe easier to work with indices:[PHP]
int tfIndex = ArrayBsearch({PERIOD_M1, PERIOD_M5, PERIOD_M15, ...}, Period());
Example : how to display the period by the string you want:[PHP]
int Periods[] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, ...};
string sPeriods[] = {" M1", " M5", " M15", " M30", " Hourly", " 4 hours", " Daily", " Weekly"...};
int tfIndex = ArrayBsearch(Periods, Period());
comment(Symbol() + sPeriods[tfIndex]);
Thank You Michel!
I hope that this EA I am creating will be the one! Your help is highly appreciated!
Dave
hi there!
can some here help me add this function. Make it to close trade when the bar is completed or in another word to make it close the trade when the next bar appear.( doesnt matter the trade is profit or loss )
extern int SystemMagicNumber=197;
extern double TakeProfit = 100;
extern double StopLoss = 500;
extern double Lots=0.1;
extern double TrailingStop = 0;
extern int MaxBuyTrades=5;
extern int MaxSellTrades=5;
int start()
{
if( HavePosThisBar(SystemMagicNumber)==false
&&iMA(NULL,0,5,0,MODE_SMA, PRICE_CLOSE,1)<iMA(NULL,0,15,0,MODE_EMA, PRICE_CLOSE,1)
&& iMA(NULL,0,5,0,MODE_SMA, PRICE_CLOSE,2)>iMA(NULL,0,15,0,MODE_EMA, PRICE_CLOSE,2)
&& SellPositionsCount()<MaxSellTrades
)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",SystemMagicNumber,0,Red);
return(0);
}
if( HavePosThisBar(SystemMagicNumber)==false
&& iMA(NULL,0,5,0,MODE_SMA, PRICE_CLOSE,1)>iMA(NULL,0,15,0,MODE_EMA, PRICE_CLOSE,1)
&& iMA(NULL,0,5,0,MODE_SMA, PRICE_CLOSE,2)<iMA(NULL,0,15,0,MODE_EMA, PRICE_CLOSE,2)
&& BuyPositionsCount()<MaxBuyTrades
)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",SystemMagicNumber,0,Blue);
return(0);
}
for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if (OrderType()==OP_SELL)
{
if (TrailingStop>0){
if (OrderOpenPrice()-Ask>TrailingStop*Point)
{
if (OrderStopLoss() == 0 || OrderStopLoss()>(Ask+Point*TrailingStop))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Purple);
return(0);
}
}
}
}
if (OrderType()==OP_BUY)
{
if (TrailingStop>0){
if (Bid-OrderOpenPrice()>TrailingStop*Point)
{
if (OrderStopLoss()<(Bid-Point*TrailingStop))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Yellow);
return(0);
}
}
}
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
bool HavePosThisBar(int magic)
{
int cnt;
bool Result=false;
for(cnt=0; cnt<=OrdersHistoryTotal()-1; cnt++)
if(OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY))
if((OrderSymbol() == Symbol()) &&(OrderMagicNumber() == magic) && Time[0]<=OrderOpenTime())
{
Result=true;
break;
}
for(cnt=0; cnt<=OrdersTotal()-1; cnt++)
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if((OrderSymbol() == Symbol()) &&(OrderMagicNumber() == magic) && Time[0]<=OrderOpenTime())
{
Result=true;
break;
}
return(Result);
}
int BuyPositionsCount()
{
int Result=0;
for(int cnt=0; cnt<=OrdersTotal()-1; cnt++)
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if((OrderSymbol() == Symbol()) &&(OrderMagicNumber() == SystemMagicNumber) &&
(OrderType()==OP_BUY)
)
{
Result++;
}
return(Result);
}
int SellPositionsCount()
{
int Result=0;
for(int cnt=0; cnt<=OrdersTotal()-1; cnt++)
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if((OrderSymbol() == Symbol()) &&(OrderMagicNumber() == SystemMagicNumber) &&
(OrderType()==OP_SELL)
)
{
Result++;
}
return(Result);
}
hi there!
can some here help me add this function. Make it to close trade when the bar is completed or in another word to make it close the trade when the next bar appear.( doesnt matter the trade is profit or loss )
To detect a new bar there are several solutions:
1)
2)
3)
Better, but again, restarting the terminal may produce wrong behaviors.
So my opinion is that the best is to write the lifetime max of each order into the order itself, using the "Comment" field :[PHP]OrderSend(..., ""+(Time[0] + Period()*60), ..);. This is a good solution because if you have several orders to close, you have all the time needed to do it.
thanks michel for the reply.
I`ll try. but what should i put in the comment?anything i like?
thanks michel for the reply. I`ll try. but what should i put in the comment?anything i like?
Put the time you want to close the order. The Comment field must be a string, that's why there is ""+ in front of the value. for example:
""+(Time[0] + Period()*60) // begin of the next bar on the current timeframe
""+(TimeCurrent() + 2*360 + 30*60) // 2 hours 30 minutes after the openning
""+(iTime(NULL,PERIOD_D1,0) + 23*360 + 45*60) // today at 23:45 (server time)
""+(iTime(NULL,PERIOD_W1,0) + (PERIOD_W1 - 10)*60) // next friday at 23:50Thanks
If needed, check first that you are later than 8 am:
Then, find the max and min of the current day. (if its ok for you, its easier than from 8 am): [PHP]double Max = iHigh(Symbol(), PERIOD_D1, 0);
double Min = iLow(Symbol(), PERIOD_D1, 0);
int Range = (Max - Min) / Point;
if(Range > 90) return;
...
Hi,
Apology to take such a ling time to say "thank you".
I appreciate your help.
Thanks again.
Shek
To detect a new bar there are several solutions:
1)
2)
3)
So my opinion is that the best is to write the lifetime max of each order into the order itself, using the "Comment" field :
i got the error below.what does ot mean?
[PHP]'>' - different types in comparison F:\Program Files\MetaTrader - FXOpen\experts\EMA_10.mq4 (88, 22)
I make it like this
for the send order
[PHP]OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-25*Point,Ask+TakeProfit*Point, ""+(Time[0] + Period()*60),SystemMagicNumber,0,Blue);and for the close order
[PHP]if(TimeCurrent() > OrderComment())
{
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0, CLR_NONE);
}and i got the error shown above.
Is it right?
my mistake, sorry.
This should work: