Здравствуйте.Пока стояла в очереди читала учебник по MQL4 и закодировала практически всё что нужно однако столкнулась с проблемой. Не могу переставить лимитник на тейкпрофит рыночного ордера. Итак всё по порядку: есть два лимитных ордера, когда один становится рыночным второй удаляю а хочу не удалять а переставить на Т/П рыночного.Шутите? Это хорошо!
в вашем случае, необходимо переделывать тех задание! иначе "девиз" не будет действовать!
ПИШИТЕ ТОЧНО!, предполагать, например будете у себя на тестировании потом.., если всё получиться конечно....
ну вот. объяснение приравнивается к написанию робота, так что можете считать что первого бота я вам уже сделал, а за вторым, в конец очереди пожалуйста!
Вот так удаляю
// просматриваю все открытые позиции и выставленные ордера int pos; for(pos=0; pos<OrdersTotal(); pos++) { // выделяю текущий ордер, чтобы получить о нем информацию if (OrderSelect(pos, SELECT_BY_POS)) { // Если маг. совпадает и это ОТКРЫТАЯ ПОЗИЦИЯ if ((OrderMagicNumber()==magic) && (OrderType()<=OP_SELL)) { // ищу второй отложенный ордер for(i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)) { if ((OrderMagicNumber()==magic) && (OrderType()>OP_SELL)) { // ордер найден - удаляю его.ВОТ ЗДЕСЬ ХОЧУ СДЕЛАТЬ МОДИФИКАЦИЮ ПЕРЕСТАВИТЬ ОРДЕР НА Т/П ОТКРЫТОЙ ПОЗИЦИИ if (OrderDelete(OrderTicket())) { Print("Ордер удален"); } else { Print("Ошибка ", GetLastError(), " при удалении ордера"); } } } } // выхожу из цикла break; } }При том что уже переставляю лимитные ордера вслед за изменениями Хай / Лоу индикатора вот так:
for(i=OrdersTotal()-1; i>=0; i--) {OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic ) {//пересчитываю количество ордеров: if(OrderType()==OP_BUY) {op_b++; } if(OrderType()==OP_SELL) {op_s++; } if(OrderType()==OP_BUYLIMIT) {b_lm++; if(low>0.2 && OrderOpenPrice()!=low) {//переношу лимитник на новый уровень modify_limit_order(OP_BUYLIMIT, low); Sleep(1000*10); } } if(OrderType()==OP_SELLLIMIT) {s_lm++; if(high>0.2 && OrderOpenPrice()!=high) {//переношу лимитник на новый уровень modify_limit_order(OP_SELLLIMIT, high); Sleep(1000*10); } } }Вот сама функция модификации
bool modify_limit_order(int type, double price) { bool modify = false; if(type == OP_BUYLIMIT) //снизу { price_op=price; price_sl=price_op-StopLs*Point; price_tp=price_op+TakePr*Point; if(!OrderModify(OrderTicket(),nd0(price_op),nd0(price_sl), nd0(price_tp),0,RoyalBlue) ); // print_error("Передвижка ","BUY-LIMIT"); } if(type == OP_SELLLIMIT) //сверху { price_op=price; price_sl=price_op+StopLs*Point; price_tp=price_op-TakePr*Point; if(!OrderModify(OrderTicket(),nd0(price_op),nd0(price_sl), nd0(price_tp),0,OrangeRed)); // print_error("Передвижка","SELL-LIMIT"); } return(modify); }Предполагаю что после перестановки лимитного ордера на уровень Т/П противоположного рыночного нужно запретить переставлять по high / low индикатора.
Пожалуйста вместо удаления переставьте на Т/П.