Здравия!
Брокер начал мошенничать. Ну как? Ну просто не выполняет приказы.
Стандартный код на отправку ордера
void PutOrder(int type, double price, double stoploss, double takeprofit)
{
int r=0,co=0;
color clr=Green;
double sl=0,tp=0;
if(type==1 || type==3 || type==5)
{
clr=Red;
if(stoploss>0) sl=NormalizeDouble(price+stoploss*Point,Digits);
if(takeprofit>0) tp=NormalizeDouble(price-takeprofit*Point,Digits);
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(stoploss>0) sl=NormalizeDouble(price-stoploss*Point,Digits);
if(takeprofit>0) tp=NormalizeDouble(price+takeprofit*Point,Digits);
}
if(AutoLot<=0){lot=Lots;}
if(AutoLot>0){lot=MoneyManagement();}
r=OrderSend(NULL,type,lot,NormalizeDouble(price,Digits),Slip,sl,tp," Момент ",Magic,TimeCurrent()+Expir*60*60,clr);//
Sleep (1000);
// co=GetLastError();
// if (co!=0) if ( co==2||co==4||co==6||co==129||co==128||co==135||co==136||co==137||co==138||co==139)
return;
}
Хотел спросить: Возможно ли вернуться к выполнению команды заново или к конкретной строчки?
Спасибо
Комментарии (30)
13 axe44 Автор Сообщений: 1149 - Алек
13 axe44 Автор Сообщений: 1149 - Алек
14 Syte Сообщений: 399
13 axe44 Автор Сообщений: 1149 - Алек
14 Syte Сообщений: 399
35 AM2 Сообщений: 16247 - Андрей
Повторный запрос я реализовал через функцию PutOrderReal(type,price); прямо в функции PutOrderReal(...). Но там ещё одна проблемка. Допустим в одно и тот же момент два советника на разных графиках одновременно выставляю ордера, соотвествеено два запроса никак не обработаются и у двух советников выскакивает ошибка „ордер не принят“. Получается что два робота спамят потом ордерами?
13 axe44 Автор Сообщений: 1149 - Алек
Редактирован: 4 августа 2020, 21:44
13 axe44 Автор Сообщений: 1149 - Алек
Ься… граматей…впринципе и ошибку 128 дважды вписал…
ну… вроде сам и исправился
13 axe44 Автор Сообщений: 1149 - Алек
13 axe44 Автор Сообщений: 1149 - Алек
При первом же вызове ошибки второй робот даже при ошибке получает информацию о её отсутствии… Теперь понятно что одну функцию и МТ4 можно выкинуть — это меджик , ни и что теперь один терминал — один робот .
Кто не согласен? Редактирован: 5 августа 2020, 07:45
13 axe44 Автор Сообщений: 1149 - Алек
14 Syte Сообщений: 399
Ответ очевиден: вызвать код ошибки. Теперь очень интересно как понять двум роботам по чьей заявке выскочила ошибка? К ошибке меджик номер не прикручен, и повторный вызов ошибки выдаёт в любом случаи круглый ноль. Вот не задача, что им двоим делать? А если их пять?
Более того интересный факт, я часто замечал, что и закрытие ордеров не всегда гладко проходит.
И для статистики: у типа брокера Альпари при выходе новостей заявки не обрабатываются по 3 часа иногда, и брокера Форекс клуб заявки утром обрабатываются часто по 5 минут, если обрабатываются.
Если поставить цикл отправлять заявки до результата, может закончиться депозит.
Как бы это проблема, и я пытаюсь её решить и совместно написать код безотказного выставления ордера
13 axe44 Автор Сообщений: 1149 - Алек
13 axe44 Автор Сообщений: 1149 - Алек
14 Syte Сообщений: 399
13 axe44 Автор Сообщений: 1149 - Алек
13 axe44 Автор Сообщений: 1149 - Алек
24 ShamanHand Сообщений: 1092 - Наношу добро, причиняю пользу.
13 axe44 Автор Сообщений: 1149 - Алек
17 vis Сообщений: 200 - ♫♪♫♪
16 ssg Сообщений: 817
Этот кад похож на беседу брокера и купца:
— ты примешь заявку?
— нет.
— ну тогда попью чая.
13 axe44 Автор Сообщений: 1149 - Алек
Тогда простой вариант вариант (можно использовать как заготовку)
16 ssg Сообщений: 817
Потом функции err пока ничего не присвоено
Спамить попытками выставить ордер пока предыдущий обрабатывается, может привести к открытию всех заявок.
Проще сделать паузу, потом по истории выцепить последний ордер и проверить его время открытия, например час открытия с текущим, и если ордера нету, повторить попытку.
Я пока обдумываю как проще Редактирован: 5 августа 2020, 16:41
13 axe44 Автор Сообщений: 1149 - Алек
Можно в разных советниках ставить разное время ожидания Sleep(1000);
Что касается перебора ордеров, то перебираю с конца только при закрытии позиций.
Вот еще одна функция Кима, может пригодиться:
16 ssg Сообщений: 817
16 ssg Сообщений: 817
Спасибо конечно, но просто взять OrderOpenTime(); не вариант. Нужно его ещё и сравнить.
Если сравнивать с Тайм Корент() получим опять вариант в секундах. Ну может кому то и вариант… Я считаю, что в часах сравнивать проще.
В любом случае кода пока нет
13 axe44 Автор Сообщений: 1149 - Алек
16 ssg Сообщений: 817
13 axe44 Автор Сообщений: 1149 - Алек
Единственный минус в атолоте. Он выставляет ордер в любом случае, даже если нету денег на минимальный лот.
Для начала два вспомогательных кода. Встречайте!
Автолот:
Проверка на наличие ордеров
Ну и сам код выставления ордеров
13 axe44 Автор Сообщений: 1149 - Алек
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий