Вопрос: может ли функция OrderSend() после исполнения вернуть значение "0", или меньше "-1"?? Кто-нибудь встречался с подобным? Или информация, приведённая в "документации" достоверна:
P.S.: работаю Телепатом, ищу ошибку в чужом коде...
Хай!
Ну а почему нет? Если например по реквоте ордер не открыт...
Для этого существует цикл для реала открытия ордеров, например, типа этого - кол-во попыток открытия с обработкой ошибок:
int NumberOfTry = 25;
//+------------------------------------------------------------------+//| Установка ордера |//+------------------------------------------------------------------+void WmOrderSend(string symbol, int cmd, double volume, double price, double stoploss, double takeprofit, string comment, int magic, datetime expiration = 0)
{
color clr;
datetime opentime;
int ticket;
int error;
comment = WindowExpertName() + " " + GetNameTF(Period()) + " " + comment;
int msl = MarketInfo(symbol, MODE_STOPLEVEL);
clr = CLR_NONE;
if (cmd == OP_BUY) clr = ColorBuy;
elseif (cmd == OP_SELL) clr = ColorSell;
if ((expiration > 0) && (expiration < TimeCurrent())) expiration = 0;
for (int try = 1; try <= NumberOfTry; try++)
{
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
opentime = TimeCurrent();
ticket = OrderSend(symbol, cmd, volume, price, SlipPips, stoploss, takeprofit, comment, magic, expiration, clr);
if (ticket > 0)
if (UseSound) {PlaySound("ok.wav"); break;}
else
{
error = GetLastError();
if (error == ERR_TRADE_TIMEOUT)
{
Sleep(1000*66);
if (ExistOrders(symbol, cmd, magic, opentime))
{
if (UseSound) {PlaySound("ok.wav"); break;}
}
}
Print("Error(", error, ") set order: ", ErrorDescription(error), ", try ", try);
continue;
}
Print("Error(", error, ") set order: ", ErrorDescription(error), ", try ", try);
Print("Ask=", Ask, " Bid=", Bid, " symbol=", symbol, " volume=", volume, " cmd=", GetNameOP(cmd), " price=", price, " stoploss=", stoploss, " takeprofit=", stoploss, " magic=", magic);
if ((error == ERR_COMMON_ERROR) || (error == ERR_ACCOUNT_DISABLED) || (error == ERR_INVALID_ACCOUNT) || (error == ERR_TRADE_DISABLED))
{
IsExpertFailed = true;
break;
}
if ((error == ERR_SERVER_BUSY) || (ERR_INVALID_TRADE_VOLUME) || (error == ERR_MARKET_CLOSED))
{
Sleep(1000*300);
break;
}
if ((error == ERR_TOO_FREQUENT_REQUESTS) || (error == ERR_TOO_MANY_REQUESTS)) Sleep(1000*100);
if ((error == ERR_ORDER_LOCKED) || (error == ERR_LONG_POSITIONS_ONLY_ALLOWED) || (error == ERR_TRADE_TOO_MANY_ORDERS)) break;
if (error == ERR_TRADE_CONTEXT_BUSY) while (IsTradeContextBusy()) Sleep(1000*11);
if (error == ERR_TRADE_EXPIRATION_DENIED ) {expiration = 0; continue;}
if ((error != ERR_PRICE_CHANGED) && (error != ERR_REQUOTE)) Sleep(1000*7.7);
}
}
Ну а почему нет? Если например по реквоте ордер не открыт...
Привет, Роман.
Потому что обычно функция OrderSend() при ошибке возвращает значение "-1"... А не "0" и уж точно не меньше "-1". Но всё же может были у Кого-то прецеденты?
Потому что обычно функция OrderSend() при ошибке возвращает значение "-1"... А не "0" и уж точно не меньше "-1". Но всё же может были у Кого-то прецеденты?
Кстати интересная тема на счёт ошибок. Я научился, что если возвращается 0 (ноль) то нет ошибки и ордер принят брокером. Если не принял, то возвращается ошибка, но которая больше нуля. В описании оператора OrderSend() есть запись "...или -1 в случае неудачи". Но какого типа должна быть ошибка чтобы брокер вернул -1? Может кто знает?
Потому что обычно функция OrderSend() при ошибке возвращает значение "-1"... А не "0" и уж точно не меньше "-1". Но всё же может были у Кого-то прецеденты?
Это уж наверно надо торговать на КОНКРЕТНОЙ кухне, если ордерсенд() возвращает "0", а тем более < -1. :-)
paladin80: Кстати интересная тема на счёт ошибок. Я научился, что если возвращается 0 (ноль) то нет ошибки и ордер принят брокером. Если не принял, то возвращается ошибка, но которая больше нуля.
Функция GetLastError() возвращает 0? Или Вы всё же пишете про функцию OrderSend()?
paladin80: В описании оператора OrderSend() есть запись "...или -1 в случае неудачи". Но какого типа должна быть ошибка чтобы брокер вернул -1? Может кто знает?
OrderSend() возвращает "-1". А тип ошибки надо смотреть с помощью функции GetLastError()!! Не путайте это... Есть код ошибки "1", что значит "Нет ошибки, но результат неизвестен"... А вот ошибку с кодом "-1" Я не встречал и думаю такой и нет! :D
MaxZ: Функция GetLastError() возвращает 0? Или Вы всё же пишете про функцию OrderSend()?
OrderSend() возвращает "-1". А тип ошибки надо смотреть с помощью функции GetLastError()!! Не путайте это... Есть код ошибки "1", что значит "Нет ошибки, но результат неизвестен"... А вот ошибку с кодом "-1" Я не встречал и думаю такой и нет! :D
Может действительно я мог напутать. Ещё раз внимательно почитал про OrderSend и ошибки. Наверно дело в том, что если брокер принял ордер то возвращает номет тикета, а GetLastError этой операции покажет 0. Если не принял, то -1 и при этом GetLasError покажет номер ошибки больше нуля.
Доброго времени суток. Подскажите пожалуйста где можно достать period_converter с функцией которая позволяет задавать точку отсчёта. Например мне нужно сделать график D2 из D1, задаю при запуске YYY.MMM.DDD HH.MM и с этой даты он начинает конвертить свечи.
Давно как-то нашёл что-то подобное(по моему даже на этом форуме), но почему-то не хочет начинать конвертить с чётных чисел(начинает с нечётного и всё) Может подскжите что в коде изменить или сами измените. Буду очень признателен. Вот то что нашёл.
Я новичок, и с форекс работаю недавно, хочу попросить совета у местных гуру.
Работаю с терминалом под МТ4
При работе с графиком для валютной пары удобно пользоваться переключением масштаба: "М1", "М5",....
Так вот в масштабе М1 выводится история за последние 38 часов, в виде приблизительно 2000 свечей, в М5 270 часов но тоже около 2000 свечей.
При этом в первом случае таймфрейм для свечи будет 60сек, а во втором уже 470сек. А можно ли как то вытащить историю за 270 часов (или больше) с разбиением на 60сек свечи?
paladin80: Может действительно я мог напутать. Ещё раз внимательно почитал про OrderSend и ошибки. Наверно дело в том, что если брокер принял ордер то возвращает номет тикета, а GetLastError этой операции покажет 0. Если не принял, то -1 и при этом GetLasError покажет номер ошибки больше нуля.
Вот сейчас всё как надо... А то Я немного растерялся от Вашего ответа! :)))
А вот вопрос Мой остаётся в силе. Может ли функция OrderSend() вернуть "0" или значение меньше "-1"??
Я попросил выслать лог-файл... А Мне не высылают. Так бы уже давно понял в чём загвоздка. А пока продолжаю телепатствовать! ;))) Но всё же вдруг функция OrderSend() чудит? :DD
Здравствуйте.
Вопрос: может ли функция OrderSend() после исполнения вернуть значение "0", или меньше "-1"?? Кто-нибудь встречался с подобным? Или информация, приведённая в "документации" достоверна:
P.S.: работаю Телепатом, ищу ошибку в чужом коде...Хай!
Ну а почему нет? Если например по реквоте ордер не открыт...
Для этого существует цикл для реала открытия ордеров, например, типа этого - кол-во попыток открытия с обработкой ошибок:
Хай!
Ну а почему нет? Если например по реквоте ордер не открыт...
Привет, Роман.
Потому что обычно функция OrderSend() при ошибке возвращает значение "-1"... А не "0" и уж точно не меньше "-1". Но всё же может были у Кого-то прецеденты?
Привет, Роман.
Потому что обычно функция OrderSend() при ошибке возвращает значение "-1"... А не "0" и уж точно не меньше "-1". Но всё же может были у Кого-то прецеденты?
Привет, Роман.
Потому что обычно функция OrderSend() при ошибке возвращает значение "-1"... А не "0" и уж точно не меньше "-1". Но всё же может были у Кого-то прецеденты?
Это уж наверно надо торговать на КОНКРЕТНОЙ кухне, если ордерсенд() возвращает "0", а тем более < -1. :-)
Кстати интересная тема на счёт ошибок. Я научился, что если возвращается 0 (ноль) то нет ошибки и ордер принят брокером. Если не принял, то возвращается ошибка, но которая больше нуля.
В описании оператора OrderSend() есть запись "...или -1 в случае неудачи". Но какого типа должна быть ошибка чтобы брокер вернул -1? Может кто знает?
OrderSend() возвращает "-1". А тип ошибки надо смотреть с помощью функции GetLastError()!! Не путайте это... Есть код ошибки "1", что значит "Нет ошибки, но результат неизвестен"... А вот ошибку с кодом "-1" Я не встречал и думаю такой и нет! :D
Функция GetLastError() возвращает 0? Или Вы всё же пишете про функцию OrderSend()?
OrderSend() возвращает "-1". А тип ошибки надо смотреть с помощью функции GetLastError()!! Не путайте это... Есть код ошибки "1", что значит "Нет ошибки, но результат неизвестен"... А вот ошибку с кодом "-1" Я не встречал и думаю такой и нет! :D
Доброго времени суток. Подскажите пожалуйста где можно достать period_converter с функцией которая позволяет задавать точку отсчёта. Например мне нужно сделать график D2 из D1, задаю при запуске YYY.MMM.DDD HH.MM и с этой даты он начинает конвертить свечи.
Давно как-то нашёл что-то подобное(по моему даже на этом форуме), но почему-то не хочет начинать конвертить с чётных чисел(начинает с нечётного и всё) Может подскжите что в коде изменить или сами измените. Буду очень признателен. Вот то что нашёл.
Уважаемые все
Я новичок, и с форекс работаю недавно, хочу попросить совета у местных гуру.
Работаю с терминалом под МТ4
При работе с графиком для валютной пары удобно пользоваться переключением масштаба: "М1", "М5",....
Так вот в масштабе М1 выводится история за последние 38 часов, в виде приблизительно 2000 свечей, в М5 270 часов но тоже около 2000 свечей.
При этом в первом случае таймфрейм для свечи будет 60сек, а во втором уже 470сек. А можно ли как то вытащить историю за 270 часов (или больше) с разбиением на 60сек свечи?
заранее благодарен
Может действительно я мог напутать. Ещё раз внимательно почитал про OrderSend и ошибки. Наверно дело в том, что если брокер принял ордер то возвращает номет тикета, а GetLastError этой операции покажет 0. Если не принял, то -1 и при этом GetLasError покажет номер ошибки больше нуля.
Вот сейчас всё как надо... А то Я немного растерялся от Вашего ответа! :)))
А вот вопрос Мой остаётся в силе. Может ли функция OrderSend() вернуть "0" или значение меньше "-1"??
Я попросил выслать лог-файл... А Мне не высылают. Так бы уже давно понял в чём загвоздка. А пока продолжаю телепатствовать! ;))) Но всё же вдруг функция OrderSend() чудит? :DD