Any questions from newcomers on MQL4 and MQL5, help and discussion on algorithms and codes - page 818
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
if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) {
// время time[i] попало внутрь бара открытого в time_m1
}
OK) one arrow, but by this condition at M15 and higher the arrow is set at 21:00
and if you just use+PeriodSeconds(PERIOD_M1) withoutPeriod()*, it is not set at all)
OK) one arrow, but by this condition at M15 and higher the arrow is set at 21:00
And if you just use+PeriodSeconds(PERIOD_M1) withoutPeriod()*, it is not set at all)
Read the documentation :-) Period() returns just the id of the current period - why are you multiplying by it?
instead of PERIOD_M1 (which is given as an example), pass it to PeriodSeconds( Period() ) - then get how many seconds in 1 bar of the current period.
So much for the "Bermuda parallelepiped" conundrum
It works for me :) Even tried opening/closing the terminal.
PS: Artyom, you moved the question on the five to the four topic... Found it by accident.
EMA line 20 23.04.2019 00:00
When turning on MT5, WITHOUT online connection, the message "array out...." appears immediately.
Errors vary, but always present. Can replicate online, but more often present when MT is switched on.
Such is the mystery of the "Bermuda parallelepiped".
It works for me :) Even tried opening/closing the terminal.
PS: Artyom, you moved the question on the five to the four topic... Found it by accident.
This is a common theme - we help here not only with MQL4, but also for migration to MQL5. So it's in the theme.
Hello!
I downloaded the MQL4 programming video tutorial.
I created an Expert Advisor according to the lesson.
But it doesn't work when I'm trading.
I don't have any errors when compiling it.
Since I'm at the beginning of my journey, it's hard to find the error so far.
I am asking for help if anybody can help me.
Thank you!
Code:
/+----Входные параметры----------------+
extern inttern BarCount=10;
extern int int HourStart=14;
extern double Lots=0.1;
extern int StopLoss=120;
extern int TakeProfit=300;
extern int Magic=1456;
//+------------Глобальные переменные----------------+
double minprice=999999,mp,
maxprice=-99999,SL,TP;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
GetMinPrice();
GetMaxPrice();
if(TimeHour(TimeCurrent())==HourStart)
{
if(BuyLimitCount()&& BuyCount() ==0)
{
SL=NormalizeDouble(minprice-StopLoss*Point,5);
TP=NormalizeDouble(minprice+TakeProfit*Point,5);
ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,minprice,5,SL,TP,"",Magic,0,Blue);
if(ticket<0)
Print("Failed to open buy limit");
}
if(SellLimitCount()&& SellCount()==0)
{
SL=NormalizeDouble(maxprice+StopLoss*Point,5);
TP=NormalizeDouble(maxprice-TakeProfit*Point,5);
ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,maxprice,5,SL,TP,"",Magic,0,Red);
if(ticket<0)
Print("Failure to open Sell Limit");
}
}
Comment("MinPrice: "+DoubleToStr(minprice,5)+"\n "+"MaxPrice: "+DoubleToStr(maxprice,5));
}
//+FUNCTION FOR DEFINING MINIMUM PRICE ON BARCOUNT BAR NUMBER
void GetMinPrice()
{
for(int i=0; i<BarCount; i++)
{
mp=iLow(Symbol(),PERIOD_CURRENT,i);
if(mp<minprice)
minprice=mp;
}
return;
}
//+FUNCTION FOR DETERMINATION OF MAXIMUM PRICE ON BARCOUNT NUMBER
void GetMaxPrice()
{
for(int i=0; i<BarCount; i++)
{
mp=iHigh(Symbol(),PERIOD_CURRENT,i);
if(mp>maxprice)
maxprice=mp;
}
return;
}
//+FUNCTION OF NUMBER OF OPEN LIMIT ORDERS TO BUY
int BuyLimitCount()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUYLIMIT)
{
count++;
}
}
return(count);
}
//+-FUNCTION OF NUMBER OF OPEN SALE LIMIT ORDERS
int SellLimitCount()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELLLIMIT)
{
count++;
}
}
return(count);
}
//+FUNCTION OF NUMBER OF OPEN MARKET BOOK ORDERS
int BuyCount()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
{
count++;
}
}
return(count);
}
//+-FUNCTION OF NUMBER OF OPEN MARKET SALE ORDERS
int SellCount()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
{
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
Seric29
Thank you, I will add your information to my luggage.
Can you please advise how to conceptually write EA code, which takes trade prices from .csv file. Why this question arises: On every tick the EA will compare the current price with the price in the .csv file, which is read entirely by the fileopen function, if I understand it correctly. But the file contains more than 5000 lines for last year, each line has name of instrument, price, type of deal (buy/sell), date of recording, date of order cancellation. When testing, the Expert Advisor will loop through all file lines on every tick to understand if it is time to place an order? Or, for testing, should we make our EA set all orders with the date of cancellation at once during initialization and check the actual orders by their expiry date on every tick for the real trading? Maybe, this is not what I expected at all. May be this is the right thing to do from the point of view of resources or there are other variants (for example, we should make graphical objects and compare the current price with them, but it seems to be the same cycle); please advise me.
Usually one tries to read (write) to the file as few times as possible.
For your task, it would be better to read the data into an array at loading (though probably more conveniently into a structure) and then compare the current price and time values with the array values
SZY: search on codebase "file" or "csv" was once such ready-made Expert Advisors - read from a file trade on the data
Usually one tries to read (write) to the file as few times as possible.
For your task, it would be better to read the data into an array at loading (though probably more conveniently into a structure) and then compare the current price and time values with the array values
ZS: search on codebase "file" or "csv" was once such ready-made EAs - read from a file trade on that data
Thank you very much, got the answer I wanted.