Пересчитывайте с каждым тиком количество отложенных ордеров.
Если их стало меньше, значит один отложенник превратился в рыночный ордер.
Все оставшиеся (ставшие ненужными) можно удалить.
На момент удаления оба ордера являются рыночными. Но даже если последний отложенный ордер удалён или сработал, то всё-равно срабатывает его тикет и выдаёт ошибку. А предпоследний так и остаётся висеть.
Спасибо за сылку!!! Буду изучать :) С временем, также как и магик номером и по типу ордера (байлимит или селлимит) - хорошая идея. Но Вы, наверное, меня не совсем поняли. У меня проблема не обозначить ордер, а КАК ЕГО УДАЛИТЬ. У меня получается удалить только последний отложенный ордер вне зависимости от того, как я определяю предпоследний.
// ------------------------------------------------Ищете Ваши отложенники---------------------------------int orderType;
for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
{
if (!OrderSelect(orderIndex, SELECT_BY_POS))
{
continue;
}
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
{
continue;
}
orderType = OrderType();
if ((orderType == OP_BUY) || (orderType == OP_SELL))
{
continue;
}
ticket = OrderTicket( ); // Номер ордера
orderLots = OrderLots(); // Lots
SL = OrderStopLoss(); // Значение StopLoss ордера
TP = OrderTakeProfit(); // Значение TakeProfit ордераif (ticket>0) //
{
while(OrderSelect(ticket,SELECT_BY_TICKET)==false) // Если ордер выбран
{
Sleep(100);
}
OrderDelete(ticket,CLR_NONE); // и удаляете их
}
return (0);
}
Как я понял из Вашего первого поста "Использую следующий пример для определения, но закрывает вместо первого только последний отложенный ордер, хотя все условия выполняются для первого отложенного ордера. Помогите найти ошибку!!!!!!!!!!!!!" - Вам необходимо удалить все оставшиеся отложенники, после превраще ния части из них в рыночные ордера - этот код вписываете в Ваши торговые условия и вперед...
Roman.: Как я понял из Вашего первого поста "Использую следующий пример для определения, но закрывает вместо первого только последний отложенный ордер, хотя все условия выполняются для первого отложенного ордера. Помогите найти ошибку!!!!!!!!!!!!!" - Вам необходимо удалить все оставшиеся отложенники, после превраще ния части из них в рыночные ордера - этот код вписываете в Ваши торговые условия и вперед...
Roman.: Как я понял из Вашего первого поста "Использую следующий пример для определения, но закрывает вместо первого только последний отложенный ордер, хотя все условия выполняются для первого отложенного ордера. Помогите найти ошибку!!!!!!!!!!!!!" - Вам необходимо удалить все оставшиеся отложенники, после превраще ния части из них в рыночные ордера - этот код вписываете в Ваши торговые условия и вперед...
На момент удаления оба ордера являются рыночными. Но даже если последний отложенный ордер удалён или сработал, то всё-равно срабатывает его тикет и выдаёт ошибку. А предпоследний так и остаётся висеть.
У меня даже не получается представить, как такое возможно.
Если пересчитав отложенные ордера, Советник не досчитывается одного ордера, то он тотчас отдает команду на удаление оставшихся.
Операция удаления ненужных отложенников обязательно должна предшествовать (стоять до) любой операции на открытие.
Как я понял из Вашего первого поста "Использую следующий пример для определения, но закрывает вместо первого только последний отложенный ордер, хотя все условия выполняются для первого отложенного ордера. Помогите найти ошибку!!!!!!!!!!!!!" - Вам необходимо удалить все оставшиеся отложенники, после превраще ния части из них в рыночные ордера - этот код вписываете в Ваши торговые условия и вперед...
// ------------------------------------------------Ищете Ваши отложенники---------------------------------int orderType;
for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
{
if (!OrderSelect(orderIndex, SELECT_BY_POS))
{
continue;
}
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
{
continue;
}
orderType = OrderType();
if ((orderType == OP_BUY) || (orderType == OP_SELL))
{
continue;
}
ticket = OrderTicket( ); // Номер ордера
orderLots = OrderLots(); // Lots
SL = OrderStopLoss(); // Значение StopLoss ордера
TP = OrderTakeProfit(); // Значение TakeProfit ордераif (ticket>0) //
{
while(OrderSelect(ticket,SELECT_BY_TICKET)==false) // Если ордер выбран
{
Sleep(100);
}
OrderDelete(ticket,CLR_NONE); // и удаляете их
}
return (0);
}
Никогда не пробовали коды компактно писать?
Вот ваш же код:
// ------------------------------------------------Ищете Ваши отложенники---------------------------------int orderType;
for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--) {
if (!OrderSelect(orderIndex, SELECT_BY_POS)) continue;
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
orderType = OrderType();
if ((orderType == OP_BUY) || (orderType == OP_SELL)) continue;
ticket = OrderTicket( ); // Номер ордера
orderLots = OrderLots(); // Lots
SL = OrderStopLoss(); // Значение StopLoss ордера
TP = OrderTakeProfit(); // Значение TakeProfit ордераif (ticket>0) {
while(OrderSelect(ticket,SELECT_BY_TICKET)==false) // Если ордер выбранSleep(100);
OrderDelete(ticket,CLR_NONE); // и удаляете их
}
return (0);
}
artmedia70: Никогда не пробовали коды компактно писать?
Вот ваш же код:
Пробовал... :-))) Еще с Паскаля привычка осталась... Читаемость хуже... особливо для не слишком "посвященных"... :-))) Да и отступы нужны в операциях во вложенных циклах и условиях на ширину табуляции, либо 3 пробела - на крайняк...:-)))
Пересчитывайте с каждым тиком количество отложенных ордеров.
Если их стало меньше, значит один отложенник превратился в рыночный ордер.
Все оставшиеся (ставшие ненужными) можно удалить.
На момент удаления оба ордера являются рыночными. Но даже если последний отложенный ордер удалён или сработал, то всё-равно срабатывает его тикет и выдаёт ошибку. А предпоследний так и остаётся висеть.
Спасибо за сылку!!! Буду изучать :) С временем, также как и магик номером и по типу ордера (байлимит или селлимит) - хорошая идея. Но Вы, наверное, меня не совсем поняли. У меня проблема не обозначить ордер, а КАК ЕГО УДАЛИТЬ. У меня получается удалить только последний отложенный ордер вне зависимости от того, как я определяю предпоследний.
Как я понял из Вашего первого поста "Использую следующий пример для определения, но закрывает вместо первого только последний отложенный ордер, хотя все условия выполняются для первого отложенного ордера. Помогите найти ошибку!!!!!!!!!!!!!" - Вам необходимо удалить все оставшиеся отложенники, после превраще ния части из них в рыночные ордера - этот код вписываете в Ваши торговые условия и вперед...
Спасибо!!! Не ожидал, что всё так сложно :)))
Как я понял из Вашего первого поста "Использую следующий пример для определения, но закрывает вместо первого только последний отложенный ордер, хотя все условия выполняются для первого отложенного ордера. Помогите найти ошибку!!!!!!!!!!!!!" - Вам необходимо удалить все оставшиеся отложенники, после превраще ния части из них в рыночные ордера - этот код вписываете в Ваши торговые условия и вперед...
Думал возможно в пару строк уложиться ... :)
На момент удаления оба ордера являются рыночными. Но даже если последний отложенный ордер удалён или сработал, то всё-равно срабатывает его тикет и выдаёт ошибку. А предпоследний так и остаётся висеть.
У меня даже не получается представить, как такое возможно.
Если пересчитав отложенные ордера, Советник не досчитывается одного ордера, то он тотчас отдает команду на удаление оставшихся.
Операция удаления ненужных отложенников обязательно должна предшествовать (стоять до) любой операции на открытие.
Как я понял из Вашего первого поста "Использую следующий пример для определения, но закрывает вместо первого только последний отложенный ордер, хотя все условия выполняются для первого отложенного ордера. Помогите найти ошибку!!!!!!!!!!!!!" - Вам необходимо удалить все оставшиеся отложенники, после превраще ния части из них в рыночные ордера - этот код вписываете в Ваши торговые условия и вперед...
Вот ваш же код:
Думал возможно в пару строк уложиться ... :)
Ну вот. artmedia70 (24.07.2011 20:01) всё упаковал почти в две строчки. Как Вы и хотели.)))
помогите пожалуйста, где у меня ошибка? Смысл таков, что на баре где закрылся ордер, ордер не должен открыться
но в тестере, после закрытия ордера условия продолжают выполняться и открывается еще 1 ордер в том же направлении
Никогда не пробовали коды компактно писать?
Вот ваш же код:
помогите пожалуйста, где у меня ошибка? Смысл таков, что на баре где закрылся ордер, ордер не должен открыться
но в тестере, после закрытия ордера условия продолжают выполняться и открывается еще 1 ордер в том же направлении
В помощь - это, также наберите в гугле в поиске - что-то типа: открытие и закрытие одного ордера на одном баре site:mql4.com - и будет Вам Щастье.