- Automated Trading Championship 2007: common mistakes in experts
- Beta version of the online book on MQL4 programming - by Sergey Kovalev (SK.)
- Errors, bugs, questions
There is a multi-currency EA. The brief idea is as follows. For one symbol all of the calculations are performed, and the trading is performed for another symbol. The Expert Advisor works with the explicit control of opening a new bar. This way the next unpleasant thing happens. The Expert Advisor may not open (skip) a trade on a real account, but when checked in the Strategy Tester, this trade is present. Or, the Expert Advisor may open a real trade a bar later than necessary but, again, when checked in the Strategy Tester, the trade is there. What can it be related to?
A position may not open if new quotes come in and you open with old ones...
A position might not open if new quotes come in and you open with old ones...
I see what you mean, but the EA handles this situation. Just by looking at the log, there is no signal at all. It means that the EA has not triggered itself (does not give request to open position). Or it worked only on the next bar. And this happens not always. But only sometimes. And what is related to it is not clear at all...... Although in the tester - everything is fine and everything is opened and closed correctly
There is a multicurrency EA. In brief, the meaning is as follows. All calculations are performed for one symbol, while trading is performed for another symbol. The Expert Advisor works with the explicit control of opening a new bar. This way the next unpleasant thing happens. The Expert Advisor may not open (skip) a trade on a real account, but when checked in the Strategy Tester, this trade is present. Or, the Expert Advisor may open a real trade a bar later than necessary but, again, when checked in the Strategy Tester, the trade is there. What can it be related to?
Try printout...
Print(.
before signal, after signal, on opening, after opening
print explicit conditions
like
// Print( " wait for MyOPEN == 1 " + MyOPEN );
if ( MyOPEN == 1 )
{
Print( " entered by MyOPEN == 1 " );.
}
---
Oh, and more about opening new BARs !!!
Note that there are skipped bars! And the Tester does not generate missed barsdon't just look for a bar, just look for a new bar
---
right now in my real time
on the chart EURUSD M5 from the beginning of the day 140 bars formed, but in the CHF 137 bars, ie 3 bars lost :-)
if you simply look for the bar corresponding to the EUR in the CHF, you may miss a bar
---
and then there are requotes
If you had a SIGNAL and you can't miss it, just use condition to enter or exit the market!
and check if your signal is FILLED!
and until it is done - run the code to execute - so as not to get into a loop, make a counter
after leaving the counter - check to see if you need to go in - go out
and if it needs to go in - run it again
----
moreover, the trading code
moreover, this code cannot be simple!
( there is a code which is responsible for mechanics work - opening of trawl lossless closing i.e. work with orders after receiving signals )
There is a multi-currency Expert Advisor. The brief idea is the following. All calculations are performed for one symbol while trading is performed for another symbol. The Expert Advisor works with explicit control of opening a new bar. This way the next unpleasant thing happens. The Expert Advisor may not open (skip) a trade on a real account, but when checked in the Strategy Tester, this trade is present. Or, the Expert Advisor may open a real trade a bar later than necessary but, again, when checked in the Strategy Tester, the trade is there. What can it be related to?
These are called requotes. In the tester, trades are not requotes. Therefore, if the ticket of the opened trade is negative, we must reset the flag of the formed bar.
static int prevtime = 0; // Bar start time
...
int start() {
if (Time[0] == prevtime) return(0); // bar is the same, therefore exit
prevtime = Time[0]; // fresh bar, keep the time
...
int ticket = -1;
...
ticket = OrderSend(...); // try to open position
if (ticket < 0) { // position was not opened for some reason.
Sleep(30000);
// Here we reset the flag of the bar formed, so that we repeat the operation on the next tick, not on the next bar
prevtime = Time[1];
}
}
The EA works on hourly bars. It's not about requotes - the EA monitors this and will send a new request if necessary. I wrote about the fact that the EA does not even trigger in order for it to at least try to start opening an order. That is, 2-3 orders, it opens well (as it should be), and the fourth (or third) may not even start to open it or open an hour later. Although, if you check this moment in the tester, this order will be in the right place.
The matter, as I understand, is that ticks for instruments do not come evenly. And the tick for opening a new bar for the symbol at which the calculation is done may come much later than for the symbol at which we trade. Or vice versa. And here a discrepancy can occur. But how can this be avoided?
Your Expert Advisor implies that Hour candles on different symbols open synchronously. That is, when a new 1-hour candlestick appears on EURUSD, the Expert Advisor will start that checks values on the hourly timeframe of GBPUSD. But if at that moment the new hourly on the pound has not started - everything goes into tatters. In general, we need to rearrange the EA logic a bit.
Thanks for the reply, I thought that was the reason. Please, can you tell me how? Because this is a big problem. Here's a screenshot, from the real one. We can see that in the Strategy Tester the pose was opened at 15.00 and in real account it was opened only at 16.00. Although we have the same parameters in the Strategy Tester and on the real account.
The EA works on hourly bars. It's not about requotes - the EA monitors this and will send a new request if necessary. I wrote about the fact that the EA does not even trigger in order for it to at least try to start opening an order. That is, 2-3 orders, it opens well (as it should be), and the fourth (or third) may not even start to open it or open an hour later. Although, if you check this moment in the tester, this order will be in the right place.
The matter, as I understand, is that ticks for instruments do not come evenly. And the tick for opening a new bar for the symbol at which the calculation is done may come much later than for the symbol at which we trade. Or vice versa. And here a discrepancy can occur. But how to avoid it?
Consider that a new tick of ANY hour bar (for any instrument) is the beginning of the hour
---
correct the logic in this vein...
as soon as the hour bar opens on any instrument
re-calculate the other instrument, assuming the bar has already closed even though it has not formed a new bar
because in a couple of ticks or a few seconds it will appear there
---
let's say you count 2 or 3 instruments
you can catch the beginning of the hour on at least 20 symbols - preferably the yen instruments since they are very fast
// --- практически гарантия ловли начала часа двумя БОДРЫМИ парами if ( TimeSaveBehchH1 == iTime("GBJJPY",PERIOD_H1,0) ) { TimeSaveBehchH1 = iTime("GBJJPY",PERIOD_H1,0); // новый бар } if ( TimeSaveBehchH1 == iTime("USDJPY",PERIOD_H1,0) ) { TimeSaveBehchH1 = iTime("USDJPY",PERIOD_H1,0); // новый бар } //--- if ( TimeSaveBehchH1 == iTime("EURUSD",PERIOD_H1,0) ) // в довершении ловим на своей рабоче паре { TimeSaveBehchH1 = iTime("EURUSD",PERIOD_H1,0); // новый бар } if ( TimeSaveBehchH1 == iTime("USDCHF",PERIOD_H1,0) ) // ловим на второй паре { TimeSaveBehchH1 = iTime("USDCHF",PERIOD_H1,0); // новый бар }
to be honest and that's not very nice ... the tick did not come at these pairs and you will fly by again
if you show a piece of code that generates an input - you may be able to find the error in the logic faster
Your Expert Advisor assumes that the hour candlesticks on different symbols open synchronously. That is, when a new 1-hour candlestick appears on EURUSD, the Expert Advisor will start that checks values on hourly timeframe of GBPUSD. But if at that moment the new hourly on the pound has not started - everything goes into tatters. In general, we need to rearrange the EA logic a bit.
Thanks for the reply, I thought that was the reason. Please, can you tell me how? Because this is a big problem. Here's a screenshot, from the real one. We can see that in the Strategy Tester the pose was opened at 15.00 and in real account it was opened only at 16.00. Although in the tester and on the real parameters are the same.
...
For the traded symbol the tick of the new bar came earlier that is why the old bars of the analyzed symbol took part in the analysis, the start has worked off and is waiting for the next hour. It's fun to guess without seeing a piece of code.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use