The same thing. A position is closed - a pending order is set, etc. There is a function that returns the last value (e.g. OrderCloseTime()). With every tick, I get the time value of the last closed position (say, position #1). When closing the next position (position #2) with a new tick I get the time to close this (#2) position. The OrderCloseTime() value has changed relative to the previous one. And so on. I don't care how or how much the variable has changed. What matters to me is the very fact that the variable has changed. It's like a logical operation: If the OrderCloseTime() of the last closed position is greater than the OrderCloseTime() of the penultimate one, then we should do BLA-BLA-BLA. Also - if the OrderClosePrice() of the last closed position is not equal to the OrderClosePrice() of the penultimate one, then make a BLA-BLA-BLA. Or maybe it is not possible to make such a comparison?
Here is the question. Suppose, for example, our EA shows a buy signal when the indicator (for example, I took CCI) crosses some level (the red line) from bottom to top, and a sell signal when it, respectively, goes down. How should we make the order open only once during the formation of the bar A? Suppose the indicator crosses the level (the red line) downwards and upwards several times during the formation of bar A. As I have already mentioned, we should make it so that an order is opened only once.
What we need is for the sell signal to be received on bar D (situation 2 on the chart) to not close the order opened on bar A , and not to be affected in any way.
I.e., the orders are not controlled by the Expert Advisor after they are opened.
Forrim: Here is the question. Let us assume that the buy signal in the EA will be displayed when the indicator (for example, I took CCI) crosses some level (red line) from bottom to top and the sell signal, respectively, when it is from top to bottom. How should we make the order open only once during the formation of the bar A? Suppose the indicator crosses the level (the red line) downwards and upwards several times during the formation of bar A. As I have already mentioned, we should make it so that an order is opened only once.
This requires that at a sell signal to be received on bar D (situation 2 on the chart) the order opened on bar A should not be closed and should not be affected in any way.
That is, the orders are not controlled by the EA after they are opened.
Many thanks in advance.
Actually, the CCI jumps so wildly that we'd better check it after the bar has closed and a new one has been opened.
If we want to check if the opening time of a candle is different (if it is, the order opens) or is the same (=> no order opens), then at each crossing we should store the opening time in the global variable.
Forrim: Here is the question. Suppose, for example, our EA shows a buy signal when the indicator (for example, I took CCI) crosses some level (the red line) from bottom to top, and a sell signal when it, respectively, goes down. How should we make the order open only once during the formation of the bar A? Suppose the indicator crosses the level (the red line) downwards and upwards several times during the formation of bar A. As I have already mentioned, we should make it so that the order is opened only once.
What we need is for the sell signal to be received on bar D (situation 2 on the chart) to not close the order opened on bar A , and not to be affected in any way.
I.e., the orders are not controlled by the Expert Advisor after they are opened.
Thank you in advance.
If a position of this type is already open, do not open any more.
//--------------------------------------------------------------- 1 --// Численные значения для М15externdouble StopLoss =20; // SL для открываемого ордераexterndouble TakeProfit =20; // ТР для открываемого ордераexterndouble Step_Sar=0.02; // Шаг Sarexterndouble Maximum_Sar=0.2; // Максимум Sarexterndouble Lot=0.01; // Жестко заданное колич. лотовbool Work=true; // Эксперт будет работать.//--------------------------------------------------------------- 2 --int start()
{
int
Total, // Количество ордеров в окне
Ticket; // Номер ордераdouble
Sar_1 , // Значен. Sar текущее
Sar_0 , // Значение Sar предыдущей свечки
Price, // Цена ордера
SL, // SL ордера
TP; // TP ордераbool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell//--------------------------------------------------------------- 3 -- // Учёт ордеров
Total=0; // Количество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symbol())continue; // Не наш фин. инструмif (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. ордif (Total>1) // Не более одного орд
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return; // Выход из start()
}
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
//--------------------------------------------------------------- 6 --// Торговые критерии
Sar_1=iSAR(NULL, 0, 0.02, 0.2, 1); // Sar_1
Sar_0=iSAR(NULL, 0, 0.02, 0.2, 0); // Sar_0if (Sar_0 > Price && Sar_1 < Price) // если Sar меняет положение
{
Opn_B=true; // Критерий откр. Buy
}
if (Sar_0 < Price && Sar_1 > Price) // если Sar меняет положение
{
Opn_S=true; // Критерий откр. Sell
}
//--------------------------------------------------------------- 7 --
{
if (Opn_B==true)
{ // критерий откр. Buy
RefreshRates(); // Обновление данных
SL=(20+Ask-Bid)*Bid; // Вычисление SL откр.
TP=20*Bid; // Вычисление TP откр.Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,SL,TP);//Открытие Buy
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокreturn; // Выход из start()if (Opn_S==true) // критерий откр. Sell
{ // критерий откр. Sell
RefreshRates(); // Обновление данных
SL=(20+Ask-Bid)*Ask; // Вычисление SL откр.
TP=20*Ask; // Вычисление TP откр.Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,SL,TP);//Открытие Selreturn; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокreturn; // Выход из start()
}
//--------------------------------------------------------------- 9 --return; // Выход из start()
}
//-------------------------------------------------------------- 10 --int Fun_Error(int Error) // Ф-ия обработ ошибок
{
switch(Error)
{ // Преодолимые ошибки case4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеreturn(1); // Выход из функцииcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеreturn(1); // Выход из функцииcase137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеreturn(1); // Выход из функции// Критические ошибкиcase2: Alert("Общая ошибка.");
return(0); // Выход из функцииcase5: Alert("Старая версия терминала.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase64: Alert("Счет заблокирован.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase133:Alert("Торговля запрещена.");
return(0); // Выход из функцииcase134:Alert("Недостаточно денег для совершения операции.");
return(0); // Выход из функцииdefault: Alert("Возникла ошибка ",Error); // Другие варианты return(0); // Выход из функции
}
}
//-------------------------------------------------------------- 11 --
Elementary EA, should open a position when Parabolic SAR indicator changes relative to price chart, works on M15, SL and TP are always constant for opened position.
The EA compares indicator positions of the current and previous candlesticks.
There are no errors or bugs during compilation, in the test in the tab "results" "chart" "report" is empty, in the log is this: "picture".
I am coding for the second day, i have never coded before, i read my mql books and searched the internet for my problem. I am at a deadlock, please help if you can.
What's going to change next time?
What we need is for the sell signal to be received on bar D (situation 2 on the chart) to not close the order opened on bar A , and not to be affected in any way.
I.e., the orders are not controlled by the Expert Advisor after they are opened.
Thank you in advance.
Please help me attach a piece of Sequent Demarque code to the EA https://www.mql5.com/ru/code/7372
does not work like this:
num=0:
for(i=bars; i>=0; i--)
{
if ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4) && num!=0 )) {
num++;
if ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4))
buy.......
if (num==9)
close........
1. Count the number of orders of the first type
2. Count the number of type 2 orders
3. Compare the results
Dear Vinin. Thank you very much!
Here is the question. Let us assume that the buy signal in the EA will be displayed when the indicator (for example, I took CCI) crosses some level (red line) from bottom to top and the sell signal, respectively, when it is from top to bottom. How should we make the order open only once during the formation of the bar A? Suppose the indicator crosses the level (the red line) downwards and upwards several times during the formation of bar A. As I have already mentioned, we should make it so that an order is opened only once.
This requires that at a sell signal to be received on bar D (situation 2 on the chart) the order opened on bar A should not be closed and should not be affected in any way.
That is, the orders are not controlled by the EA after they are opened.
Many thanks in advance.
Actually, the CCI jumps so wildly that we'd better check it after the bar has closed and a new one has been opened.
If we want to check if the opening time of a candle is different (if it is, the order opens) or is the same (=> no order opens), then at each crossing we should store the opening time in the global variable.
Here is the question. Suppose, for example, our EA shows a buy signal when the indicator (for example, I took CCI) crosses some level (the red line) from bottom to top, and a sell signal when it, respectively, goes down. How should we make the order open only once during the formation of the bar A? Suppose the indicator crosses the level (the red line) downwards and upwards several times during the formation of bar A. As I have already mentioned, we should make it so that the order is opened only once.
What we need is for the sell signal to be received on bar D (situation 2 on the chart) to not close the order opened on bar A , and not to be affected in any way.
I.e., the orders are not controlled by the Expert Advisor after they are opened.
Thank you in advance.
Elementary EA, should open a position when Parabolic SAR indicator changes relative to price chart, works on M15, SL and TP are always constant for opened position.
The EA compares indicator positions of the current and previous candlesticks.
There are no errors or bugs during compilation, in the test in the tab "results" "chart" "report" is empty, in the log is this: "picture".
I am coding for the second day, i have never coded before, i read my mql books and searched the internet for my problem. I am at a deadlock, please help if you can.
T.H.C. try this
T.H.C. Try this.
Thank you so much, I didn't expect such a quick response and such a change in the code.
Please advise on programming books other than basic mql
Thank you very much, I did not expect such speed and changes in the code.
Please advise more books on programming, besides basic mql.