Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Хочешь стать известным разработчиком? Выполняй заказы трейдеров в сервисе Фриланс!
EvgeniX
79
EvgeniX 2006.02.15 20:59 
Может кто помочь перегнать это в MT4 плиз


i = 1; while Ord(i,VAL_TICKET) != TicketSWS { i++; } CloseOrder(Ord(i,VAL_TICKET),Ord(i,VAL_LOTS),Ask,Slippage,Yellow); T41Cnt++; Exit;
mandor
369
mandor 2006.02.16 07:33  
Например так:

int i, result; ... result=0; for (i=0;i<OrdersTotal();i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if (OrderSymbol()!=Symbol() && OrderTicket()!=TicketSWS) continue; if (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage)) result=1; break; } if (result>0) T41Cnt++;

Насчет "Exit" надо смотреть в контексте всей проги.
EvgeniX
79
EvgeniX 2006.02.18 05:39  
спасибо огромное!

и еще один вопросик?

стоитли выходить из еа (return(0)) после каждого OrderClose(...) если нужно закрыть неприер 4 ордера (3 Buy и 1 Sell ) или мт4 может закрыть их подрят и без ошибок?

зарание блогодарен!
mandor
369
mandor 2006.02.18 16:44  
Теоретически можно, но ...
1. Перед выполнением любой торговой функции делаем проверку:

// // в начале функции start() if(IsTradeAllowed()!=true) return; // в цикле if(IsTradeAllowed()!=true) continue;

2. Из опыта следует, что надёжнее после запроса любой торговой фунции выйти до прихода нового тика (перед выходом выполнить проверку возвращаемого значения и напечатать код ошибки, если терминал версии 4.xx). Хотя выход после вызова любой торговой функции был строго небходим при использовании терминала 3.xx версии, не вижу препятствий для использования этого способа и при использовании терминала версии 4.xx. Надёжность в реале важнее красивого алгоритма.

3. Частенько в терминале на нескольких графиках висит по советнику. Будет лучше, если они будут выполнять свои операции минимально короткое время и не будут мешать друг другу. Поэтому такую "классную" фичу как Sleep(), а тем более в циклах, старательно игнорируем.
Евгений Панин
702
Евгений Панин 2006.02.18 17:16  
EvgeniX:

стоитли выходить из еа (return(0)) после каждого OrderClose(...) если нужно закрыть неприер 4 ордера (3 Buy и 1 Sell ) или мт4 может закрыть их подрят и без ошибок?
Эксперт или скрипт не выпустит одновременно несколько торговых приказов.
Более того, он не выпустит очередной приказ до тех пор, пока не получит ответ сервера по факту исполнения или неисполнения предыдущего приказа. Советник просто не передаст управление следующей командной строке (оператору), находящейся непосредственно за функцией, отправляющей торговый приказ, до ответа сервера. Это значит, что не будет являться некоррекным код, кот. поочерёдно посылает торговые приказы по нескольким ордерам в рамках одного запуска ф-ии Start().

Нужно только следить, чтобы перед отправкой приказа был проанализирован текущий курс, например, использовать RefreshRates(). Если курс изменился, то необходимо откорректировать значения параметров торговой функции. При хорошей связи ордера могут быть закрыты с периодичностью приблизительно 0,5 - 1 сек, что зачастую меньше, чем промежуток времени между тиками.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий