Ошибка 4051 mql4 как исправить

MT4 Error 4051: How to Fix Invalid Trading Lot Amount What is MT4 error 4051? The MT4 error 4051 is a MetaTrader OrderSend error suggesting the trading platform is denying an order due to an invalid trading lot amount. Whenever an MT4 receives a trade request, it thoroughly examines the parameters of the order. […]

Содержание

  1. MT4 Error 4051: How to Fix Invalid Trading Lot Amount
  2. What is MT4 error 4051?
  3. Why does MT4 error 4051 happen?
  4. You are exceeding your trading limit
  5. Your EA is generating inappropriate order parameters
  6. How to fix MT4 error 4051?
  7. Ошибка 4051
  8. Функция OrderClose — Error 4051
  9. Error 4051 occurred deleting an object
  10. Error Code 4051 Incorrect Params only on Sell Orders

MT4 Error 4051: How to Fix Invalid Trading Lot Amount

What is MT4 error 4051?

The MT4 error 4051 is a MetaTrader OrderSend error suggesting the trading platform is denying an order due to an invalid trading lot amount.

Whenever an MT4 receives a trade request, it thoroughly examines the parameters of the order. When an EA sends an order request, the system automatically verifies the maximum and minimum limit of trading volumes allowed for the particular entry. At any point, the platform detects an order with a trading lot that you are not permitted to execute; it denies the order request showing ERR_INVALID_FUNCTION_PARAMETER_VALUE.

An OrderSend error 4051 doesn’t necessarily mean the system rejects all the trade requests or disables your trading bot permanently. The MT4 executes an order immediately when it comes with an appropriate amount of trading lot. On the other hand, the restriction over the trading volume prevents your account from suffering unexpected losses due to the wrong parameters of an EA.

Why does MT4 error 4051 happen?

You are exceeding your trading limit

The minimum order limit in MT4 is 0.01 lots, and the maximum limit is 200 lots. If your bot determines a trading lot less than 0.01 or greater than 200, the system will reject the order and show the OrderSend error 4051.

In some cases, your broker server might fail to read the lot amount correctly. For instance, you are trying to execute an order with 0.01 volume, but the minimum order limit of the broker is 0.1. So the server will define the volume as invalid since it turns lesser than the minimum order limit.

Conversely, if you ever try to place an order with more than 200 lots at a time, the MT4 will still refuse to activate the order because it exceeds the maximum trade volume limit.

Your EA is generating inappropriate order parameters

Such problems mainly occur due to an error in EA coding. A malfunction in the programming code may tempt your bot to produce unrealistic trading lot figures which are not recognized as valid parameters by MetaTrader or the broker server.

Apart from an invalid trading lot, your trade can be disallowed for the malfunction of other parameters. For instance, you cannot place a buy order with a stop-loss limit greater than your trade entry or take profit level. These types of problems may happen for two reasons:

  • An error in the EA coding
  • The EA is not compatible with the trading system

How to fix MT4 error 4051?

How to fix OrderSend error for invalid lot amount

    Use NormalizeDouble in your code

When the system confirms an invalid function parameters value, you may consider using the NormalizeDouble function:

Parameters:
value – determines a value with a floating point.
digits – determines the accuracy formate such as the number of digits after the decimal point.
Please note that you must normalize all the values calculated for stop-loss, take-profit, and pending order prices.
Adjust the value of NormalizeDouble

Sometimes a normalized number may become greater than the DoubleToString value like the following example:


Make sure normalized figures are rounded

Here is an example showing how to keep the normalized values round figured:


Broker trading limitations for lot size

f your system still shows the OrderSend error 4051, it might be an issue with your broker trading limitations. In that case, contact the broker and try to be more specific about their maximum and minimum limit of trading lots.

Источник

Ошибка 4051

В истории есть закрытые ордера.

Выбирать ордер нужно в цикле (в общем случае)
Например так (МТ4) —

Дело не в том, какой цикл использовать (можно хоть for, хоть while), а в том, как он построен. В коде, который Вы привели, цикла нет вообще, выбирается ордер, которого заведомо нет в списке. Проверки успешности выбора ордера тоже нет.

Параметры в функции OrderSend вообще очень странные.

Дело не в том, какой цикл использовать (можно хоть for, хоть while), а в том, как он построен. В коде, который Вы привели, цикла нет вообще, выбирается ордер, которого заведомо нет в списке. Проверки успешности выбора ордера тоже нет.

Параметры в функции OrderSend вообще очень странные.

Не нужно рассчитывать на историю счета. В МТ4 пользователь может изменить глубину отображения истории, чем собьет с толку любой алгоритм, ориентирующийся на нее. Лучше отслеживать наличие ордеров, открытых советником, в списке рабочих ордеров. И только тогда, когда ордер исчез из этого списка (был закрыт), открывать следующий ордер.

Не нужно рассчитывать на историю счета. В МТ4 пользователь может изменить глубину отображения истории, чем собьет с толку любой алгоритм, ориентирующийся на нее. Лучше отслеживать наличие ордеров, открытых советником, в списке рабочих ордеров. И только тогда, когда ордер исчез из этого списка (был закрыт), открывать следующий ордер.

Эксперт работает не с одним ордером? Тогда все усложняется. При открытии каждого ордера нужно запомнить его тикет в собственном массиве. А потом на каждом тике проверять, существует ли этот ордер.

При открытии ордера:

Затем для проверки существования ордера:

Ну и кроме того нужно озаботиться сохранением накопленных данных (в файл, к примеру) для случаев прерывания работы советника.

Эксперт работает не с одним ордером? Тогда все усложняется. При открытии каждого ордера нужно запомнить его тикет в собственном массиве. А потом на каждом тике проверять, существует ли этот ордер.

При открытии ордера:

Затем для проверки существования ордера:

Ну и кроме того нужно озаботиться сохранением накопленных данных (в файл, к примеру) для случаев прерывания работы советника.

Это всего лишь пример кода. Писалось даже без проверки синтаксиса. Смысл — показать направление. Поэтому могут быть какие-то мелкие ошибки.

Это всего лишь пример кода. Писалось даже без проверки синтаксиса. Смысл — показать направление. Поэтому могут быть какие-то мелкие ошибки.

Источник

Функция OrderClose — Error 4051

Решил начать программировать на mql. Написал советник , проверяя как открываются и закрываются ордера. Открывается ордер при соответствующих условиях нормально, а при закррытии появляется Error 4051 — Invalid ticket to OrderClose Function. Помогите пожалуйста разобраться, что я делаю не так. Код советника ниже.

double MA;
MA=iMA(NULL,0,MA_Period,0,MODE_SMA,0,0);
int T;
T=OrdersTotal();
int ticket;
bool a;

После открытия позиции тикет у Вас не сохраняется. И при следующем запуске start переменная ticket инициализируется нулём. Нужно объявить ею как статическую или глобальную чтобы её значение сохранялось. Также полезно контролировать выполнение функции OrderSelect , например:

Что я не так зделал, подскажите плиз

выбираю ордер, узнаю тип, узнаю тиккет, пытаюсь удалить отложенный ордер — выдаёт ошибка 4051

Недопустимое значение параметра функции

if (a2>1)
OrderDelete(ticket2);
Alert (GetLastError()); // Сообщение об ошибке 4051

Ордера на продажу переводит в без убыток нормально, а тралить начинает с ошибки 4051. Выдает 130. Но если условие соответствует, модифицирует.

2021.04.15 21:18:45.263 2019.01.24 18:51:05 %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263 2019.01.24 18:51:05 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263 2019.01.24 18:51:05 %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263 2019.01.24 18:51:05 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс
2021.04.15 21:18:45.263 2019.01.24 18:51:05 %WR EURUSD,M15: modify #33 sell 0.10 EURUSD at 1.13438 sl: 1.13398 tp: 0.00000 ok
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: modify #33 sell 0.10 EURUSD at 1.13438 sl: 1.13418 tp: 0.00000 ok
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №4051
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: OrderModify error 4051
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: invalid stoploss for OrderModify function
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс в безубыток
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: modify #33 sell 0.10 EURUSD at 1.13438 sl: 1.13438 tp: 0.00000 ok
2021.04.15 21:18:45.233 2019.01.24 18:15:00 %WR EURUSD,M15: Ордер OP_SELL открыт!

А с ордерами на покупку все ОКей.

ПС. Нормализация не помогает. Да к тому же все нормализовано в OnInit.

Источник

Error 4051 occurred deleting an object

I use a routine to create an entire table as a summary of all my active trades and each object has a name created by using its x and y positions.

The table maybe 10 columns by 10 lines — i.e. 100 objects created in the same routine — but all very similar

I noticed the following error 4051 and created some additional ‘FileWrite’ statements to try and track the error.

It is only COD330_130 that appears to generate this problem.

The next line would be — say — COD345_130 and no problem

There don’t appear to be any other problems and the EA continues to work

The ‘FileWrite’ generated the following

1 ObjName = COD330_130, Object_label = EURCHF colour = clrMidnightBlue xd = 330 yd = 130, 4051 invalid function parameter value

Any ideas appreciated.

[. ] Any ideas appreciated.

Are you sure that the error 4051 is generated during the code which you have posted, rather than before it?

It seems far more likely that the sequence of events, and the issue, is as follows:

  • Block of code earlier to that which you have posted, which does something leading to error 4051
  • Then the code which you have posted, which doesn’t generate an error
  • Checking GetLastError() then gives you the earlier error, which happened before the block of code which you are querying here.

Источник

Error Code 4051 Incorrect Params only on Sell Orders

This is my first posting on this forum, so please excuse any formatting/procedural errors. I am having difficulty with the Order Modify function. I use an ECN, so I must send the order with 0’s in the SL and TP fields and then use the Order Modify function.

The stop loss and take profit values are inserted perfectly with the buy order code, but fail when a sell order is input, resulting in the 4051 error code. This refers to invalid parameters on the take profit field, but I am using the same approach (not the calcs) on my buy order.

There is obviously something pretty basic that I am missing. I would really appreciate some help/insight on the extent of my error.

Thanks very much

  1. Always check your return codes. What are Function return values ? How do I use them ? — MQL4 forum
  2. What is the value of OpenPrice ?

RaptorUK :
Open price for a Buy is Ask, for a Sell it is Bid, how far has price moved between placing your Buy and your Sell ? Don’t use OpenPrice use Ask if you must or use OrderOpenPrice(). Why don’t you print OpenPrice when your OrdrModify() fails ? why don’t you Print Ask, Bid, etc ? don’t you think they are relevant to finding thee cause of your issue ?

I always print values to my journal, but the answer was not obvious until I read the thread on function return values and trapped them. Result was a mod to my code that corrected the problem.

Not sure about your reference to using Ask and Bid. My Order Send uses Ask and Bid as you suggest, and OrderOpenPrice() was used to set the TP and SL. Anyway, the mod to my code was successful.

Thank you both for your time.

This is my first posting on this forum, so please excuse any formatting/procedural errors. I am having difficulty with the Order Modify function. I use an ECN, so I must send the order with 0’s in the SL and TP fields and then use the Order Modify function.

The stop loss and take profit values are inserted perfectly with the buy order code, but fail when a sell order is input, resulting in the 4051 error code. This refers to invalid parameters on the take profit field, but I am using the same approach (not the calcs) on my buy order.

There is obviously something pretty basic that I am missing. I would really appreciate some help/insight on the extent of my error.

Thanks very much

For anyone reading this thread, here is the change I made to make the Stop Loss and Take Profit modification. My problem was based on the value of 0 being returned as the Ticket No. Code replaced in pink and code deleted in yellow .

Источник

Adblock
detector

Всем привет.

Помощь нужна.

Ордера на продажу переводит в без убыток нормально, а тралить начинает с ошибки 4051. Выдает 130. Но если условие соответствует, модифицирует.

void OrdersModifiStopLoss(int type){
   for(int omsl = OrdersTotal() - 1; omsl >= 0; omsl--){
      if(OrderSelect(omsl, SELECT_BY_POS, MODE_TRADES)){
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == type){
            if(type == OP_SELL){
               if(OrderStopLoss() <= 0){
                  if(OrderOpenPrice() - Bid >= SL){
                     stop = OrderOpenPrice();
                     if(OrderModify(OrderTicket(), OrderOpenPrice(), stop, OrderTakeProfit(), 0, clrWhite))
                        Print("Ордер OP_SELL за №", IntegerToString(OrderTicket()), ": модифицирован стоп лосс в безубыток");
                     else{
                        Print("Ордер OP_SELL за №", IntegerToString(OrderTicket()), ": модифицирован стоп лосс в безубыток не удалось. Ошибка №", GetLastError());
                     }
                  }
               }
               if(OrderStopLoss() <= OrderOpenPrice()){
                  if(OrderOpenPrice() - Bid >= SL){
                     stop = OrderStopLoss() - step;
                     if(OrderModify(OrderTicket(), OrderOpenPrice(), stop, OrderTakeProfit(), 0, clrWhite))
                        Print("Ордер OP_SELL за №", IntegerToString(OrderTicket()), ": модифицирован стоп лосс");
                     else{
                        Print("Ордер OP_SELL за №", IntegerToString(OrderTicket()), ": модифицирован стоп лосс не удалось. Ошибка №", GetLastError());
                     }
                  }
               }
            }
            if(type == OP_BUY){
               if(OrderStopLoss() <= 0){
                  if(Bid - OrderOpenPrice() >= SL){
                     stop = OrderOpenPrice();
                     if(OrderModify(OrderTicket(), OrderOpenPrice(), stop, OrderTakeProfit(), 0, clrWhite))
                        Print("Ордер OP_BUY за №", IntegerToString(OrderTicket()), ": модифицирован стоп лосс в безубыток");
                     else{
                        Print("Ордер OP_BUY за №", IntegerToString(OrderTicket()), ": модифицирован стоп лосс в безубыток не удалось. Ошибка №", GetLastError());
                     }
                  }
               }
               if(OrderStopLoss() >= OrderOpenPrice()){
                  if(Bid - OrderStopLoss() >= SL){
                     stop = OrderStopLoss() + step;
                     if(OrderModify(OrderTicket(), OrderOpenPrice(), stop, OrderTakeProfit(), 0, clrWhite))
                        Print("Ордер OP_BUY за №", IntegerToString(OrderTicket()), ": модифицирован стоп лосс");
                     else{
                        Print("Ордер OP_BUY за №", IntegerToString(OrderTicket()), ": модифицирован стоп лосс не удалось. Ошибка №", GetLastError());
                     }
                  }
               }
            }
         }
      }
   }
}

2021.04.15 21:18:45.263    2019.01.24 18:51:05  %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263    2019.01.24 18:51:05  %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263    2019.01.24 18:51:05  %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263    2019.01.24 18:51:05  %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс
2021.04.15 21:18:45.263    2019.01.24 18:51:05  %WR EURUSD,M15: modify #33 sell 0.10 EURUSD at 1.13438 sl: 1.13398 tp: 0.00000 ok
2021.04.15 21:18:45.263    2019.01.24 18:51:04  %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263    2019.01.24 18:51:04  %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263    2019.01.24 18:51:04  %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263    2019.01.24 18:51:04  %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263    2019.01.24 18:51:04  %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263    2019.01.24 18:51:04  %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263    2019.01.24 18:51:03  %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс
2021.04.15 21:18:45.263    2019.01.24 18:51:03  %WR EURUSD,M15: modify #33 sell 0.10 EURUSD at 1.13438 sl: 1.13418 tp: 0.00000 ok
2021.04.15 21:18:45.263    2019.01.24 18:51:03  %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №4051
2021.04.15 21:18:45.263    2019.01.24 18:51:03  %WR EURUSD,M15: OrderModify error 4051
2021.04.15 21:18:45.263    2019.01.24 18:51:03  %WR EURUSD,M15: invalid stoploss for OrderModify function
2021.04.15 21:18:45.263    2019.01.24 18:51:03  %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс в безубыток
2021.04.15 21:18:45.263    2019.01.24 18:51:03  %WR EURUSD,M15: modify #33 sell 0.10 EURUSD at 1.13438 sl: 1.13438 tp: 0.00000 ok
2021.04.15 21:18:45.233    2019.01.24 18:15:00  %WR EURUSD,M15: Ордер OP_SELL открыт!

А  с ордерами на покупку все ОКей.

ПС. Нормализация не помогает. Да к тому же все нормализовано в OnInit…

What is MT4 error 4051?

The MT4 error 4051 is a MetaTrader OrderSend error suggesting the trading platform is denying an order due to an invalid trading lot amount.

Whenever an MT4 receives a trade request, it thoroughly examines the parameters of the order. When an EA sends an order request, the system automatically verifies the maximum and minimum limit of trading volumes allowed for the particular entry. At any point, the platform detects an order with a trading lot that you are not permitted to execute; it denies the order request showing ERR_INVALID_FUNCTION_PARAMETER_VALUE.

MT4 Error 4051

An OrderSend error 4051 doesn’t necessarily mean the system rejects all the trade requests or disables your trading bot permanently. The MT4 executes an order immediately when it comes with an appropriate amount of trading lot. On the other hand, the restriction over the trading volume prevents your account from suffering unexpected losses due to the wrong parameters of an EA.

Why does MT4 error 4051 happen?

You are exceeding your trading limit

The minimum order limit in MT4 is 0.01 lots, and the maximum limit is 200 lots. If your bot determines a trading lot less than 0.01 or greater than 200, the system will reject the order and show the OrderSend error 4051.

In some cases, your broker server might fail to read the lot amount correctly. For instance, you are trying to execute an order with 0.01 volume, but the minimum order limit of the broker is 0.1. So the server will define the volume as invalid since it turns lesser than the minimum order limit.

Conversely, if you ever try to place an order with more than 200 lots at a time, the MT4 will still refuse to activate the order because it exceeds the maximum trade volume limit.

Your EA is generating inappropriate order parameters

Such problems mainly occur due to an error in EA coding. A malfunction in the programming code may tempt your bot to produce unrealistic trading lot figures which are not recognized as valid parameters by MetaTrader or the broker server.

Apart from an invalid trading lot, your trade can be disallowed for the malfunction of other parameters. For instance, you cannot place a buy order with a stop-loss limit greater than your trade entry or take profit level. These types of problems may happen for two reasons:

  • An error in the EA coding
  • The EA is not compatible with the trading system

How to fix MT4 error 4051?

How to fix OrderSend error for invalid lot amount

  1. Use NormalizeDouble in your code

    When the system confirms an invalid function parameters value, you may consider using the NormalizeDouble function:

    MT4 NormalizeDouble function

    Parameters:
    value – determines a value with a floating point.
    digits – determines the accuracy formate such as the number of digits after the decimal point.
    Please note that you must normalize all the values calculated for stop-loss, take-profit, and pending order prices.

  2. Adjust the value of NormalizeDouble

    Sometimes a normalized number may become greater than the DoubleToString value like the following example:

    MT4 Doubletostring

  3. Make sure normalized figures are rounded

    Here is an example showing how to keep the normalized values round figured:

    MT4 Normalized Values

  4. Broker trading limitations for lot size

    f your system still shows the OrderSend error 4051, it might be an issue with your broker trading limitations. In that case, contact the broker and try to be more specific about their maximum and minimum limit of trading lots.

I’m getting a error 4051 with this code when I use it with a OrderModify function, but only on the take profit part. the stoplose modifies correctly. Any ideas as to why?

double LStopLose = iOpen(NULL, 0,0) — (iATR(NULL, 0, 5, 1) * 2);
double SStopLose = iOpen(NULL, 0,0) + (iATR(NULL, 0, 5, 1) * 2);

double LTakeProfit = iOpen(NULL, 0,0) + (iATR(NULL, 0, 5, 1) * 3);
double STakeProfit = iOpen(NULL, 0,0) — (iATR( NULL, 0, 5, 1) * 3);

Show your order and the calculations that lead up to it.

I was having some 130 errors, so I made two modifies, put alerts on them to see if it was the take profit or stop lose

ok, figured out the src thing, thought it was something in the meta trader program, not this board.

I’ll check your answer sometime tomorrow. good night.

Second. Wat can be it mean?

Please read documentation. OrderTicket returns ticket number for the currently selected order.
Note: The order must be previously selected by the OrderSelect() function. I.e. you can use OrderTicket function only after OrderSelect!

Ok, you get ticket number (for example returned from OrderSend). For example this ticket number is 10002345. What do You mean using SELECT_BY_POS value?

1. You must call OrderSelect function before using OrderTicket

ok, so i look at this code from a sample EA that comes with the meta trader program.

with ‘ticket’ being defined as the OrderSend line, how does that get defined as the ordernumber?

OrderSelect(index, SEL_BY_POSITON); — first time through selects order #4,which is ticket E

int ticket = OrderTicket(); —- returns the ticket number of ticket E — the «selected» ticket

double price = OrderOpenPrice(); — returns the opening price for ticket E — the «selected» ticket

Решил начать программировать на mql. Написал советник , проверяя как открываются и закрываются ордера. Открывается ордер при соответствующих условиях нормально, а при закррытии появляется Error 4051 — Invalid ticket to OrderClose Function. Помогите пожалуйста разобраться, что я делаю не так. Код советника ниже.

double MA;
MA=iMA(NULL,0,MA_Period,0,MODE_SMA,0,0);
int T;
T=OrdersTotal();
int ticket;
bool a;

После открытия позиции тикет у Вас не сохраняется. И при следующем запуске start переменная ticket инициализируется нулём. Нужно объявить ею как статическую или глобальную чтобы её значение сохранялось. Также полезно контролировать выполнение функции OrderSelect , например:

выбираю ордер, узнаю тип, узнаю тиккет, пытаюсь удалить отложенный ордер — выдаёт ошибка 4051

if (a2>1)
OrderDelete(ticket2);
Alert (GetLastError()); // Сообщение об ошибке 4051

Ордера на продажу переводит в без убыток нормально, а тралить начинает с ошибки 4051. Выдает 130. Но если условие соответствует, модифицирует.

2021.04.15 21:18:45.263 2019.01.24 18:51:05 %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263 2019.01.24 18:51:05 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263 2019.01.24 18:51:05 %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263 2019.01.24 18:51:05 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс
2021.04.15 21:18:45.263 2019.01.24 18:51:05 %WR EURUSD,M15: modify #33 sell 0.10 EURUSD at 1.13438 sl: 1.13398 tp: 0.00000 ok
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №130
2021.04.15 21:18:45.263 2019.01.24 18:51:04 %WR EURUSD,M15: OrderModify error 130
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: modify #33 sell 0.10 EURUSD at 1.13438 sl: 1.13418 tp: 0.00000 ok
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс не удалось. Ошибка №4051
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: OrderModify error 4051
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: invalid stoploss for OrderModify function
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: Ордер OP_SELL за №33: модифицирован стоп лосс в безубыток
2021.04.15 21:18:45.263 2019.01.24 18:51:03 %WR EURUSD,M15: modify #33 sell 0.10 EURUSD at 1.13438 sl: 1.13438 tp: 0.00000 ok
2021.04.15 21:18:45.233 2019.01.24 18:15:00 %WR EURUSD,M15: Ордер OP_SELL открыт!

А с ордерами на покупку все ОКей.

ПС. Нормализация не помогает. Да к тому же все нормализовано в OnInit.

Источник

Can´t find the reason why OrderModify Error 4051 is happening

I just can´t find why my EA is showing this error when I use the Trailing Stop option.

I am attaching here the code where I call the function Trailing Stop and then the function itself

After that I am showing the messsages from the Alerts That I have inserted in the code

In short, The StopLoss of the Selected Order is the same as the new Stop Loss that the trailing Stop is calculating

If I am right, I have specifically coded that in such case the EA will not run the OrderModify function

But the Error 4051 is happening even though the OrderModify function is not being called

Well, at least that is my deduction

Will someone please check what is wrong with my code?

This is the Trailing Stop function

so, after I check that Modify==false, there is a break instruction, so the EA should get out of the while(true) loop and should NOT execute the OrderModify instruction, but somehow it is beeing called and if my new SL is equal to the OrderStopLoss then error 4051 is understandable. But why is the OrderModify instruction being executed, will someone please explain?

here are the messages when I backtested the EA:

What I see here is that the new SL (variable SL) is 1.3418 and the OrderStopLoss (variable loss) is exactly 1.3418

That is why the condition if (SL

Have you looked up the meaning of 4051:Invalid function parameter value. So try to change the values of OrderModify(..), like price, SL, and profit.

Check the minimal difference (MODE_STOPLEVEL and MODE_FREEZELEVEL)

Maybe instead of price use either OrderOpenPrice() or 0 as you don’t change a pending order , .

There is another section in my code where I modify the initial Sl and TP values for a recently opened trade.

Might it be possible that the error is being generated THERE and that the sentence Error=GetLastError() is receiving the Error generated on that part of the code?

BTW, thanks for your answer , I will check the parameters ‘ values on both OrderModify funtions.

best regards. JHF

So then why is the EA showing «Occurred error 4051»?

That is the last error that happened . . . it may be completely somewhere else in your code . . . and completely unrelated to your Trailing Stop function, if you want to check this then at the start of your Trailing Stop function add . . . ResetLastError();

Part of the issue is that your trailing stop function returns False even if there was no failure . . . then you go looking for an error . . . why ? you need to fix this design flaw.

That is the last error that happened . . . it may be completely somewhere else in your code . . . and completely unrelated to your Trailing Stop function, if you want to check this then at the start of your Trailing Stop function add . . . ResetLastError();

Part of the issue is that your trailing stop function returns False even if there was no failure . . . then you go looking for an error . . . why ? you need to fix this design flaw.

I am getting the same kind of error message but with openselect function ( OrderSelect returned error of 4051):

Can anyone help please?

Here is copy of my journal:

2014.12.08 15:25:41.375 2014.03.25 00:00 Testing_loop_v1 EURGBP-,Daily: OrderSelect returned error of 4051

2014.12.08 15:25:41.375 2014.03.25 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 1 — Position : 2 Total Trades : 3

2014.12.08 15:25:41.375 2014.03.25 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 1 — Position : 1 Total Trades : 3

2014.12.08 15:25:41.375 2014.03.25 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 0 — Position : 0 Total Trades : 3

2014.12.08 15:25:41.375 2014.03.25 00:00 Testing_loop_v1 EURGBP-,Daily: open #6 sell 0.10 EURGBP- at 0.83859 tp: 0.83429 ok

2014.12.08 15:25:41.375 2014.03.25 00:00 Testing_loop_v1 EURGBP-,Daily: Alert: ### — New BAR (UP) — ### : 4

2014.12.08 15:25:41.093 2014.03.24 00:00 Testing_loop_v1 EURGBP-,Daily: OrderSelect returned error of 4051

2014.12.08 15:25:41.093 2014.03.24 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 1 — Position : 1 Total Trades : 2

014.12.08 15:25:41.093 2014.03.24 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 0 — Position : 0 Total Trades : 2

2014.12.08 15:25:41.093 2014.03.24 00:00 Testing_loop_v1 EURGBP-,Daily: open #5 sell 0.10 EURGBP- at 0.83601 tp: 0.83421 ok

2014.12.08 15:25:41.093 2014.03.24 00:00 Testing_loop_v1 EURGBP-,Daily: Alert: ### — New BAR (UP) — ### : 3

2014.12.08 15:25:40.906 2014.03.21 10:38 Tester: take profit #4 at 0.83650 (0.83650 / 0.83657)

2014.12.08 15:25:40.843 2014.03.21 00:00 Testing_loop_v1 EURGBP-,Daily: OrderSelect returned error of 4051

2014.12.08 15:25:40.843 2014.03.21 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 0 — Position : 1 Total Trades : 2

2014.12.08 15:25:40.843 2014.03.21 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 0 — Position : 0 Total Trades : 2

2014.12.08 15:25:40.843 2014.03.21 00:00 Testing_loop_v1 EURGBP-,Daily: open #4 buy 0.10 EURGBP- at 0.83475 tp: 0.83650 ok

2014.12.08 15:25:40.843 2014.03.21 00:00 Testing_loop_v1 EURGBP-,Daily: Alert: ### — New BAR (DOWN) — ### : 2

2014.12.08 15:25:40.656 2014.03.20 13:47 Tester: take profit #1 at 0.83415 (0.83408 / 0.83415)

2014.12.08 15:25:40.500 2014.03.20 00:00 Testing_loop_v1 EURGBP-,Daily: OrderSelect returned error of 4051

2014.12.08 15:25:40.500 2014.03.20 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 0 — Position : 1 Total Trades : 2

2014.12.08 15:25:40.500 2014.03.20 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 1 — Position : 0 Total Trades : 2

2014.12.08 15:25:40.500 2014.03.20 00:00 Testing_loop_v1 EURGBP-,Daily: open #3 buy 0.10 EURGBP- at 0.83625 tp: 0.83969 ok

2014.12.08 15:25:40.500 2014.03.20 00:00 Testing_loop_v1 EURGBP-,Daily: Alert: ### — New BAR (DOWN) — ### : 1

2014.12.08 15:25:40.437 2014.03.19 22:26 Tester: take profit #2 at 0.83607 (0.83600 / 0.83607)

2014.12.08 15:25:40.125 2014.03.19 00:00 Testing_loop_v1 EURGBP-,Daily: OrderSelect returned error of 4051

2014.12.08 15:25:40.125 2014.03.19 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 1 — Position : 1 Total Trades : 2

2014.12.08 15:25:40.125 2014.03.19 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 1 — Position : 0 Total Trades : 2

2014.12.08 15:25:40.125 2014.03.19 00:00 Testing_loop_v1 EURGBP-,Daily: open #2 sell 0.10 EURGBP- at 0.83967 tp: 0.83607 ok

2014.12.08 15:25:40.125 2014.03.19 00:00 Testing_loop_v1 EURGBP-,Daily: Alert: ### — New BAR (UP) — ### : 2

2014.12.08 15:25:36.718 2014.03.18 00:00 Testing_loop_v1 EURGBP-,Daily: OrderSelect returned error of 4051

2014.12.08 15:25:36.718 2014.03.18 00:00 Testing_loop_v1 EURGBP-,Daily: Type : 1 — Position : 0 Total Trades : 1

2014.12.08 15:25:36.718 2014.03.18 00:00 Testing_loop_v1 EURGBP-,Daily: open #1 sell 0.10 EURGBP- at 0.83672 tp: 0.83415 ok

2014.12.08 15:25:36.718 2014.03.18 00:00 Testing_loop_v1 EURGBP-,Daily: Alert: ### — New BAR (UP) — ### : 1

And here is part my code:

for(int pos=0;pos v_total_trades = OrdersTotal();

// I am just displaying a message for now so I can find the problem,

Print(«Type : «, OrderType() + » — Position : «, pos + » Total Trades : » + v_total_trades);

Print(«OrderSelect returned error of «,GetLastError());

Источник

Adblock
detector

Обнулил СЛ и ТП, и установил их модификацией.

//+------------------------------------------------------------------+
//| ccc.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "VAGEYEV"
#include <stdlib.mqh>

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
extern double StopLoss   = 30;
extern double TakeProfit = 300;
extern double LotSize    = 0.1;
extern int Slippage      = 5;

int SellTicket,UseSlippage;
double PointDigits;
int init()
{
//----
PointDigits=Point*IncreasePoint(); //Нормализация поинта
UseSlippage = GetSlippage(Symbol(),Slippage);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
// Calculate open price, stop loss and take profit
  double OpenPrice = NormalizeDouble(Bid,Digits);
  double tp = NormalizeDouble(Bid-TakeProfit*PointDigits,Digits);
  double sl = NormalizeDouble(Bid+StopLoss*PointDigits,Digits);
  Print(OpenPrice," ",tp," ",sl);
// Open Sell Order
  if (SellTicket==0) {
     SellTicket = OrderSend(Symbol(),OP_SELL,3*LotSize,OpenPrice,UseSlippage,0,0,"Sell Order",0,0,Green);
     if (SellTicket==-1) {
        int ErrorCode = GetLastError();
        string ErrDesc = ErrorDescription(ErrorCode);
        Print(ErrorCode," ",ErrDesc);
        string ErrAlert = StringConcatenate(ErrorCode,": ",ErrDesc);
        Alert(ErrAlert);
     }else{
        Alert("Ура Ордер открылся!!!");
        if (OrderModify(SellTicket,NormalizeDouble(OpenPrice,Digits),sl,tp,0)) {                                          
           Alert("Установка СЛ и ТП тоже прошла успешно!");
           return;
        }Alert("Но установка стопов, провалилась.  , OpenPrice= ",OpenPrice," sl= ",sl," tp= ",tp,", err= ",GetLastError());
     }
  }return(0);
}


// Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency,MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return(CalcSlippage);
}
//+------------------------------------------------------------------+


int IncreasePoint() {
  int d=Digits;
  if(d==3 || d==5)return(10);
  return(1);
}

И добавил правильный расчёт поинта… Ф-ию расчёта поинта, взял на этом форуме.

=D> Наконец-то Вы сняли проклятие пятизнака.

GetLastError() — функция, возвращающая коды ошибок. Кодовые константы ошибок определены
в файле stderror.mqh. Для вывода текстовых сообщений следует использовать функцию
ErrorDescription(), определенную в файле stdlib.mqh.

Константа Значение Описание
ERR_NO_ERROR 0 Нет ошибки
ERR_NO_RESULT 1 Нет ошибки, но результат неизвестен
ERR_COMMON_ERROR 2 Общая ошибка
ERR_INVALID_TRADE_PARAMETERS 3 Неправильные параметры
ERR_SERVER_BUSY 4 Торговый сервер занят
ERR_OLD_VERSION 5 Старая версия клиентского терминала
ERR_NO_CONNECTION 6 Нет связи с торговым сервером
ERR_NOT_ENOUGH_RIGHTS 7 Недостаточно прав
ERR_TOO_FREQUENT_REQUESTS 8 Слишком частые запросы
ERR_MALFUNCTIONAL_TRADE 9 Недопустимая операция нарушающая функционирование сервера
ERR_ACCOUNT_DISABLED 64 Счет заблокирован
ERR_INVALID_ACCOUNT 65 Неправильный номер счета
ERR_TRADE_TIMEOUT 128 Истек срок ожидания совершения сделки
ERR_INVALID_PRICE 129 Неправильная цена
ERR_INVALID_STOPS 130 Неправильные стопы
ERR_INVALID_TRADE_VOLUME 131 Неправильный объем
ERR_MARKET_CLOSED 132 Рынок закрыт
ERR_TRADE_DISABLED 133 Торговля запрещена
ERR_NOT_ENOUGH_MONEY 134 Недостаточно денег для совершения операции
ERR_PRICE_CHANGED 135 Цена изменилась
ERR_OFF_QUOTES 136 Нет цен
ERR_BROKER_BUSY 137 Брокер занят
ERR_REQUOTE 138 Новые цены
ERR_ORDER_LOCKED 139 Ордер заблокирован и уже обрабатывается
ERR_LONG_POSITIONS_ONLY_ALLOWED 140 Разрешена только покупка
ERR_TOO_MANY_REQUESTS 141 Слишком много запросов
ERR_TRADE_MODIFY_DENIED 145 Модификация запрещена, так как ордер слишком близок к рынку
ERR_TRADE_CONTEXT_BUSY 146 Подсистема торговли занята
ERR_TRADE_EXPIRATION_DENIED 147 Использование даты истечения ордера запрещено брокером
ERR_TRADE_TOO_MANY_ORDERS 148 Количество открытых и отложенных ордеров достигло предела, установленного брокером.
Константа Значение Описание
ERR_NO_MQLERROR 4000 Нет ошибки
ERR_WRONG_FUNCTION_POINTER 4001 Неправильный указатель функции
ERR_ARRAY_INDEX_OUT_OF_RANGE 4002 Индекс массива — вне диапазона
ERR_NO_MEMORY_FOR_FUNCTION_CALL_STACK 4003 Нет памяти для стека функций
ERR_RECURSIVE_STACK_OVERFLOW 4004 Переполнение стека после рекурсивного вызова
ERR_NOT_ENOUGH_STACK_FOR_PARAMETER 4005 На стеке нет памяти для передачи параметров
ERR_NO_MEMORY_FOR_PARAMETER_STRING 4006 Нет памяти для строкового параметра
ERR_NO_MEMORY_FOR_TEMP_STRING 4007 Нет памяти для временной строки
ERR_NOT_INITIALIZED_STRING 4008 Неинициализированная строка
ERR_NOT_INITIALIZED_ARRAYSTRING 4009 Неинициализированная строка в массиве
ERR_NO_MEMORY_FOR_ARRAYSTRING 4010 Нет памяти для строкового массива
ERR_TOO_LONG_STRING 4011 Слишком длинная строка
ERR_REMAINDER_FROM_ZERO_DIVIDE 4012 Остаток от деления на ноль
ERR_ZERO_DIVIDE 4013 Деление на ноль
ERR_UNKNOWN_COMMAND 4014 Неизвестная команда
ERR_WRONG_JUMP 4015 Неправильный переход
ERR_NOT_INITIALIZED_ARRAY 4016 Неинициализированный массив
ERR_DLL_CALLS_NOT_ALLOWED 4017 Вызовы DLL не разрешены
ERR_CANNOT_LOAD_LIBRARY 4018 Невозможно загрузить библиотеку
ERR_CANNOT_CALL_FUNCTION 4019 Невозможно вызвать функцию
ERR_EXTERNAL_EXPERT_CALLS_NOT_ALLOWED 4020 Вызовы внешних библиотечных функций не разрешены
ERR_NOT_ENOUGH_MEMORY_FOR_RETURNED_STRING 4021 Недостаточно памяти для строки, возвращаемой из функции
ERR_SYSTEM_BUSY 4022 Система занята
ERR_INVALID_FUNCTION_PARAMETERS_COUNT 4050 Неправильное количество параметров функции
ERR_INVALID_FUNCTION_PARAMETER_VALUE 4051 Недопустимое значение параметра функции
ERR_STRING_FUNCTION_INTERNAL_ERROR 4052 Внутренняя ошибка строковой функции
ERR_SOME_ARRAY_ERROR 4053 Ошибка массива
ERR_INCORRECT_SERIES_ARRAY_USING 4054 Неправильное использование массива-таймсерии
ERR_CUSTOM_INDICATOR_ERROR 4055 Ошибка пользовательского индикатора
ERR_INCOMPATIBLE_ARRAYS 4056 Массивы несовместимы
ERR_GLOBAL_VARIABLES_PROCESSING_ERROR 4057 Ошибка обработки глобальныех переменных
ERR_GLOBAL_VARIABLE_NOT_FOUND 4058 Глобальная переменная не обнаружена
ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE 4059 Функция не разрешена в тестовом режиме
ERR_FUNCTION_NOT_CONFIRMED 4060 Функция не подтверждена
ERR_SEND_MAIL_ERROR 4061 Ошибка отправки почты
ERR_STRING_PARAMETER_EXPECTED 4062 Ожидается параметр типа string
ERR_INTEGER_PARAMETER_EXPECTED 4063 Ожидается параметр типа integer
ERR_DOUBLE_PARAMETER_EXPECTED 4064 Ожидается параметр типа double
ERR_ARRAY_AS_PARAMETER_EXPECTED 4065 В качестве параметра ожидается массив
ERR_HISTORY_WILL_UPDATED 4066 Запрошенные исторические данные в состоянии обновления
ERR_TRADE_ERROR 4067 Ошибка при выполнении торговой операции
ERR_END_OF_FILE 4099 Конец файла
ERR_SOME_FILE_ERROR 4100 Ошибка при работе с файлом
ERR_WRONG_FILE_NAME 4101 Неправильное имя файла
ERR_TOO_MANY_OPENED_FILES 4102 Слишком много открытых файлов
ERR_CANNOT_OPEN_FILE 4103 Невозможно открыть файл
ERR_INCOMPATIBLE_ACCESS_TO_FILE 4104 Несовместимый режим доступа к файлу
ERR_NO_ORDER_SELECTED 4105 Ни один ордер не выбран
ERR_UNKNOWN_SYMBOL 4106 Неизвестный символ
ERR_INVALID_PRICE_PARAM 4107 Неправильный параметр цены для торговой функции
ERR_INVALID_TICKET 4108 Неверный номер тикета
ERR_TRADE_NOT_ALLOWED 4109 Торговля не разрешена
ERR_LONGS_NOT_ALLOWED 4110 Длинные позиции не разрешены
ERR_SHORTS_NOT_ALLOWED 4111 Короткие позиции не разрешены
ERR_OBJECT_ALREADY_EXISTS 4200 Объект уже существует
ERR_UNKNOWN_OBJECT_PROPERTY 4201 Запрошено неизвестное свойство объекта
ERR_OBJECT_DOES_NOT_EXIST 4202 Объект не существует
ERR_UNKNOWN_OBJECT_TYPE 4203 Неизвестный тип объекта
ERR_NO_OBJECT_NAME 4204 Нет имени объекта
ERR_OBJECT_COORDINATES_ERROR 4205 Ошибка координат объекта
ERR_NO_SPECIFIED_SUBWINDOW 4206 Не найдено указанное подокно
ERR_SOME_OBJECT_ERROR 4207 Ошибка при работе с объектом

При работе торгового терминала MetaTrader 4 возникают различные ошибки при обмене информацией с торговым сервером, который в ответ на ошибочные запросы отсылает программе MetaTrader 4 не описание ошибки, а цифровой код ошибки — специальную комбинацию цифр, которая отображается во вкладках Эксперты и Журнал (примеры этих вкладок и описание типичной ситуации при возникновении ошибок можно найти в статье «Обзор торгового терминала MetaTrader 4»). Не все торговые терминалы MetaTrader 4 различных дилинговых центров дают расшифровку цифрового кода, а если она и есть, то — на английском языке. Чтобы понять, почему программа МетаТрейдер 4 работает неправильно, полезно знать расшифровку цифрового кода — какой комбинации цифр соответствует определенное описание ошибки. В некоторых случаях эта информация может сильно облегчить «жизнь» трейдеру и помочь быстрее справиться с возникшей проблемой.

Итак, предлагаем Вашему вниманию расшифровку кодов ошибок, которые можно встретить при работе с торговым терминалом MetaTrader 4:

Коды ошибок, возвращаемые торговым сервером терминалу MetaTrader 4.

  • Error: 0 — Нет ошибки.
  • Error: 1 — Нет ошибки, но результат неизвестен.
  • Error: 2 — Общая ошибка.
  • Error: 3 — Неправильные параметры.
  • Error: 4 — Торговый сервер занят.
  • Error: 5 — Старая версия клиентского терминала.
  • Error: 6 — Нет связи с торговым сервером.
  • Error: 7 — Недостаточно прав.
  • Error: 8 — Слишком частые запросы.
  • Error: 9 — Недопустимая операция, нарушающая функционирование сервера.
  • Error: 64 — Счёт заблокирован.
  • Error: 65 — Неправильный номер счета.
  • Error: 128 — Истек срок ожидания совершения сделки.
  • Error: 129 — Неправильная цена.
  • Error: 130 — Неправильные стопы.
  • Error: 131 — Неправильный объём.
  • Error: 132 — Рынок закрыт.
  • Error: 133 — Торговля запрещена.
  • Error: 134 — Недостаточно денег для совершения операции.
  • Error: 135 — Цена изменилась.
  • Error: 136 — Нет цен.
  • Error: 137 — Брокер занят.
  • Error: 138 — Новые цены.
  • Error: 139 — Ордер заблокирован и уже обрабатывается.
  • Error: 140 — Разрешена только покупка.
  • Error: 145 — Модификация запрещена, так как ордер слишком близок к рынку.
  • Error: 146 — Подсистема торговли занята.
  • Error: 147 — Использование даты истечения ордера запрещено брокером.
  • Error: 148 — Количество открытых и отложенных ордеров достигло предела, установленного брокером.
  • Error: 149 — Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено.
  • Error: 150 — Попытка закрыть позицию по инструменту в противоречии с правилом FIFO.

Коды ошибок выполнения MQL4-программы (советника):

  • Error: 4000 — Нет ошибки.
  • Error: 4001 — Неправильный указатель функции.
  • Error: 4002 — Индекс массива — вне диапазона.
  • Error: 4003 — Нет памяти для стека функций.
  • Error: 4004 — Переполнение стека после рекурсивного вызова.
  • Error: 4005 — На стеке нет памяти для передачи параметров.
  • Error: 4006 — Нет памяти для строкового параметра.
  • Error: 4007 — Нет памяти для временной строки.
  • Error: 4008 — Неинициализированная строка.
  • Error: 4009 — Неинициализированная строка в массиве.
  • Error: 4010 — Нет памяти для строкового массива.
  • Error: 4011 — Слишком длинная строка.
  • Error: 4012 — Остаток от деления на ноль.
  • Error: 4013 — Деление на ноль.
  • Error: 4014 — Неизвестная команда.
  • Error: 4015 — Неправильный переход.
  • Error: 4016 — Неинициализированный массив.
  • Error: 4017 — Вызовы DLL не разрешены.
  • Error: 4018 — Невозможно загрузить библиотеку.
  • Error: 4019 — Невозможно вызвать функцию.
  • Error: 4020 — Вызовы внешних библиотечных функций не разрешены.
  • Error: 4021 — Недостаточно памяти для строки, возвращаемой из функции.
  • Error: 4022 — Система занята.
  • Error: 4050 — Неправильное количество параметров функции.
  • Error: 4051 — Недопустимое значение параметра функции.
  • Error: 4052 — Внутренняя ошибка строковой функции.
  • Error: 4053 — Ошибка массива.
  • Error: 4054 — Неправильное использование массива-таймсерии.
  • Error: 4055 — Ошибка пользовательского индикатора.
  • Error: 4056 — Массивы несовместимы.
  • Error: 4057 — Ошибка обработки глобальныех переменных.
  • Error: 4058 — Глобальная переменная не обнаружена.
  • Error: 4059 — Функция не разрешена в тестовом режиме.
  • Error: 4060 — Функция не разрешена.
  • Error: 4061 — Ошибка отправки почты.
  • Error: 4062 — Ожидается параметр типа string.
  • Error: 4063 — Ожидается параметр типа integer.
  • Error: 4064 — Ожидается параметр типа double.
  • Error: 4065 — В качестве параметра ожидается массив.
  • Error: 4066 — Запрошенные исторические данные в состоянии обновления.
  • Error: 4067 — Ошибка при выполнении торговой операции.
  • Error: 4099 — Конец файла.
  • Error: 4100 — Ошибка при работе с файлом.
  • Error: 4101 — Неправильное имя файла.
  • Error: 4102 — Слишком много открытых файлов.
  • Error: 4103 — Невозможно открыть файл.
  • Error: 4104 — Несовместимый режим доступа к файлу.
  • Error: 4105 — Ни один ордер не выбран.
  • Error: 4106 — Неизвестный символ.
  • Error: 4107 — Неправильный параметр цены для торговой функции.
  • Error: 4108 — Неверный номер тикета.
  • Error: 4109 — Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.
  • Error: 4110 — Длинные позиции не разрешены — необходимо проверить свойства эксперта.
  • Error: 4111 — Короткие позиции не разрешены — необходимо проверить свойства эксперта.
  • Error: 4200 — Объект уже существует.
  • Error: 4201 — Запрошено неизвестное свойство объекта.
  • Error: 4202 — Объект не существует.
  • Error: 4203 — Неизвестный тип объекта.
  • Error: 4204 — Нет имени объекта.
  • Error: 4205 — Ошибка координат объекта.
  • Error: 4206 — Не найдено указанное подокно.
  • Error: 4207 — Ошибка при работе с объектом.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Ошибка 405 что это значит
  • Ошибка 4134 терминал сбербанка сверка итогов как исправить эвотор
  • Ошибка 405 фикбук
  • Ошибка 405 при оплате банковской картой
  • Ошибка 405 плохая подпись некорректная структура подписи

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии