аааа все понял переделал код, но теперь он выдает ошибку 130, что за фигня? помогите плиз!!! кот теперь такой bool New = false; int KolBars; double price; int ticket; int start() { price = High[1] - Bid; if (MathAbs(price) <= 1*Point && OrdersTotal() == 0) { ticket = OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "Test", 123, 0, Red); OrderModifyX(ticket, Bid, 100, 100, 0, Red); } return(0); } //-------------------------------------------------------------------------------------------------------------------------------+ bool OrderModifyX(int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color) { int err = GetLastError(); err = 0; bool exit_loop = false; int Retry = 10; int cnt = 0; if (price == Bid || price == Ask) { while(!exit_loop) { OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color); err = GetLastError(); switch(err) { case ERR_NO_ERROR: exit_loop = true; break; case ERR_SERVER_BUSY: case ERR_NO_CONNECTION: case ERR_OFF_QUOTES: case ERR_BROKER_BUSY: case ERR_TRADE_CONTEXT_BUSY: case ERR_INVALID_STOPS: cnt++; break; case ERR_INVALID_PRICE: case ERR_PRICE_CHANGED: case ERR_REQUOTE: RefreshRates(); continue; default: exit_loop = true; break; } if (cnt > Retry) exit_loop = true; if(err != ERR_NO_ERROR) Print("Ошибка : " + err); if(err == ERR_NO_ERROR) { OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); return; } Print("Ошибка открытия ордера после " + cnt + " попыток."); return; } } }
Может переделаете свои посты через кнопку SRC?
О, а так действительно удобней, спасибо за совет. Со своим вопросом разобрался... не знал что стопы нужно указывать в цене, а не в пунктах.
bool exit_loop = false; ... if (price == Bid || price == Ask) { while(!exit_loop) { OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);
Выделенное красным кажется подозрительным. Попытка модифицировать цену открытия ордера, притом установить текующю рыночную цену.
Integer:
Хмммм, если честно этот код я так и не использовал, но модифицировать цену открытия ордера уже открытого ордера нельзя. Я новичек в этом деле, но по моему в данном случае он просто копирует одну и туже цену и вреда от этого не будет.
Выделенное красным кажется подозрительным. Попытка модифицировать цену открытия ордера, притом установить текующю рыночную цену.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Помогите разобраться что за ошибка 4051, появляется когда я пытаюсь модифицировать ордер. Вот кот
bool New = false;
int KolBars;
double price;
int ticket;
int start()
{
price = High[1] - Bid;
if (MathAbs(price) <= 1*Point && OrdersTotal() == 0)
{
OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "Test", 123, 0, Red);
OrderModifyX(ticket, Bid, 100, 100, 0, Red);
}
return(0);
}
//-------------------------------------------------------------------------------------------------------------------------------+
bool OrderModifyX(int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color)
{
int err = GetLastError();
err = 0;
bool exit_loop = false;
int ticket = -1;
int Retry = 10;
int cnt = 0;
if (price == Bid || price == Ask)
{
while(!exit_loop)
{
OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);
err = GetLastError();
switch(err)
{
case ERR_NO_ERROR:
exit_loop = true;
break;
case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
case ERR_INVALID_STOPS:
cnt++;
break;
case ERR_INVALID_PRICE:
case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates();
continue;
default:
exit_loop = true;
break;
}
if (cnt > Retry)
exit_loop = true;
if(err != ERR_NO_ERROR)
Print("Ошибка : " + err);
if(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
return;
}
Print("Ошибка открытия ордера после " + cnt + " попыток.");
return;
}
}
}