п.с. судя по условию задачи в коде должно быть слово close. а его там (суда по показаниям поисковика) не встречается. поэтому и не работает.
Ошибок несколько. По порядку, первый же перебор ордеров (// Если есть открытый ордер то выходим через return) при наличие отложника (они тоже попадают в перебор) "непускает" выполнение дальше, соответственно удаляться ничего не будет.
Дальше, пояcните смысл конструкции:
bool Yes; if (!Yes) { for (int i = OrdersTotal() - 1; i >= 0 ; i--) { if (OrderSelect(i, SELECT_BY_POS)) OrderDelete(OrderTicket()); }
????
Это основное, дальше пока не вникал, но несуразности есть. Судя по всему, навыки програмирования у Вас есть, но из другой области/языка. Думается Вам надо просто детально разобрать какой-нибудь советник, может пролистать учебник и Вы сами легко исправите все ошибки.
Дальше, пояcните смысл конструкции:
Дальше, пояcните смысл конструкции:
До нее дело даже не доходит...) Просто интересно, что человек хотел сделать
Дальше, пояcните смысл конструкции:
Ошибок несколько. По порядку, первый же перебор ордеров (// Если есть открытый ордер то выходим через return) при наличие отложника (они тоже попадают в перебор) "непускает" выполнение дальше, соответственно удаляться ничего не будет.
Дальше, пояcните смысл конструкции:
bool Yes;if (!Yes) {
for (int i = OrdersTotal() - 1; i >= 0 ; i--) {
if (OrderSelect(i, SELECT_BY_POS)) OrderDelete(OrderTicket());
}
????
Это основное, дальше пока не вникал, но несуразности есть. Судя по всему, навыки програмирования у Вас есть, но из другой области/языка. Думается Вам надо просто детально разобрать какой-нибудь советник, может пролистать учебник и Вы сами легко исправите все ошибки.Здравствуйте, спасибо всем за ответы!:-)
представленная выше конструкция, вызывает пользовательскую функцию Yes, которая в свою очередь ищет открытые рыночные ордера. Если она их не находит, то следующим шагом являеться поиск отложенного ордера и удаление его. Это так должно быть:-) но так не происходит...
Хотя если вместо этой функции просто написать следующий код:
for (q = OrdersTotal() - 1; q >= 0 ; q--) {
if (OrderSelect(q, SELECT_BY_POS))
if (OrderMagicNumber()==Magic)
OrderDelete(OrderTicket());
}
}
return(0);
то отложенный ордер удаляеться сразу же, после того как установился, то есть управление все же доходит до этих функций...
и если честно, то навыков программирования у меня нет....это результат чтения учебника.
Наведите на путь истинный!!!
бедняга компилятор.
п.с. судя по условию задачи в коде должно быть слово close. а его там (суда по показаниям поисковика) не встречается. поэтому и не работает.
а где оно (слово close)должно быть?
бедняга компилятор.
п.с. судя по условию задачи в коде должно быть слово close. а его там (суда по показаниям поисковика) не встречается. поэтому и не работает.
а где оно (слово close)должно быть?
Не надо Close, надо Delete, а он там есть... только не работает) Почему?- писал выше.
бедняга компилятор.
п.с. судя по условию задачи в коде должно быть слово close. а его там (суда по показаниям поисковика) не встречается. поэтому и не работает.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Советник открывает 1 ордер по рынку и выставляет 1 отложенный ордер. Заминка в том что он должен удалять отложенный ордер при срабатывании профита, а он этого не делает.
Подскажите, пожалуста, если кто знает, в чем может быть проблема?
//1. Открываем по рынку ордер, при условии отсутствия открытых ордеров
extern double Lot = 0.1; // Размер позы
extern int SL = 50; // Размер лося
extern int TP = 100; // Размер профита
extern int LimLvl=50; // Уровень выставления Limit-ордера
int Magic=100,ticket;
int start() // Функция старта вычислений
{
// Если есть открытый ордер то выходим через return
int total=OrdersTotal();
for (int q=total-1; q>=0; q--)
{
if (OrderSelect (q,SELECT_BY_POS))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) return(0);
}
}
//--
//1.1 Запрос информации для открытия ордера
double bid =MarketInfo(Symbol(),MODE_BID); // Запрос значения Bid
double ask =MarketInfo(Symbol(),MODE_ASK); // Запрос значения Ask
double point =MarketInfo(Symbol(),MODE_POINT);//Запрос Point
//1.2 Открытие ордера BUY по цене запрошенной
ticket=OrderSend(Symbol(),OP_BUY,Lot,ask,3,ask-SL*Point,ask+TP*Point,"",Magic,0);
if (ticket<0)
{
Alert (GetLastError()); // Сообщение об ошибке
return(0);
}
// Обновление цены
if (OrderSelect(ticket,SELECT_BY_TICKET))
{
double op=OrderOpenPrice()-LimLvl*Point;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,op,0,op+SL*Point, op-TP*Point,"",Magic,0)<0)
Alert (GetLastError()); // Сообщение об ошибке
}
{
bool Yes;
if (!Yes) {
for (int i = OrdersTotal() - 1; i >= 0 ; i--) {
if (OrderSelect(i, SELECT_BY_POS)) OrderDelete(OrderTicket());
}
}
return(0);
}
{
Yes = false;
for (i = 0; i < OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS)) {
if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) {
if (OrderMagicNumber()==Magic){
Yes = true;
break;
}
}
}
}
}
return(0);
}