Перевести из MT3 в MT4

 
Может кто помочь перегнать это в MT4 плиз


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

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" надо смотреть в контексте всей проги.
 
спасибо огромное!

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

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

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

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

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

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

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

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