Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1109

 
LRA:
Вопрос актуален, например, для системы обучения. Для получения дистрибутива установите МТ4 на флэшку. Или скопируйте на флэшку папку терминала. Потом эту папку можно копировать на любое количество компьютеров любое количество раз. Полезен такой дистрибутив для целей резервного копирования, резервирования, восстановления... Запускать терминал лучше с ключом /portable   иначе на компьютере будут создаваться малоудобные лишние папки. Пространнее этот вопрос рассмотрен в другой теме по ссылке

Как установить?

У меня установщик, который я скачиваю, ничего не устанавливает из интернета.

 

Запускаю установщик, открывается окошко индикатора загрузки файлов.

А потом появляется другое окошко

Установщик требует чтобы я указал настройки прокси-сервера, которого у меня нет.

 
 
polpolpol:

Запускаю установщик, открывается окошко индикатора загрузки файлов.

А потом появляется другое окошко

Установщик требует чтобы я указал настройки прокси-сервера, которого у меня нет.

Антивирь выключить и вызгузить из памяти.
 

Здравствуйте. Будет ли корректна следующая запись? Функция при вызове должна удалить все отложенные ордера.

 

void DeletedOrders()
         {
         for (int i=0; i<=OrdersTotal(), i++)
             {
             if (OrderSelect(i,SELECT_BY_POS))
                type=OrderType();
             if (type==2 || type==3 || type==4 || type==5)
                OrderDelete(i,clrNONE);
             }
         return();
         }  
 
bobrush:

Здравствуйте. Будет ли корректна следующая запись? Функция при вызове должна удалить все отложенные ордера. 

Нет, конечно. Тикет надо указывать, а не порядковый номер в цикле:  OrderDelete(OrderTicket(),clrNONE); 

 Ну и  условие достаточно такое: if(type>1).

И вывод кода ошибки рекомендую почаще делать, помогает. 

Ах, да, функции типа "void" ничего не должны возвращать, не нужен return() в штатном исполнении, только при предусмотренном каким-либо условием преждевременном выходе из функции.

 
bobrush:

Здравствуйте. Будет ли корректна следующая запись? Функция при вызове должна удалить все отложенные ордера. 

Имейте в виду, что есть еще недокументированные типы ордеров с type=6 и с type=7 соответственно для операций над балансом и над кредитом счета.

Вместо i<=OrdersTotal() лучше было бы i<OrdersTotal(), без лишнего вызова OrderSelect

И цикл надо проходить от конца к началу.  В противном случае, если массив ордеров успел обновиться после удаления i-го элемента в нем, попавший на  i-е место бывший i+1-м элемент будет пропущен. Лучше начинать с конца.

Если учесть, что разработчики не гарантируют никакой упорядоченности в массиве ордеров, то, собственно, нет и гарантии того, что последовательность ордеров в их массиве после удаления одного из них сохранится. Совсем надежно было бы сделать так. Крутим цикл до выявления отложенного ордера. Цикл прекращаем. Удаляем найденный ордер. Ждем  Sleep (100) для обновления массива ордеров. Затем опять цикл поиска отложенного ордера, уже с новым массивом ордеров. Полный перебор, а не путем возобновления прежнего цикла. И так тройками (цикл поиска, удаление одного ордера, ожидание обновления массива) до момента, когда отложенный ордер найти уже не удастся.

 
evillive:

Нет, конечно. Тикет надо указывать, а не порядковый номер в цикле:  OrderDelete(OrderTicket(),clrNONE); 

 Ну и  условие достаточно такое: if(type>1).

И вывод кода ошибки рекомендую почаще делать, помогает. 

Ах, да, функции типа "void" ничего не должны возвращать, не нужен return() в штатном исполнении, только при предусмотренном каким-либо условием преждевременном выходе из функции.


Спасибо!
 
Vlad143:

Имейте в виду, что есть еще недокументированные типы ордеров с type=6 и с type=7 соответственно для операций над балансом и над кредитом счета.

Вместо i<=OrdersTotal() лучше было бы i<OrdersTotal(), без лишнего вызова OrderSelect

И цикл надо проходить от конца к началу.  В противном случае, если массив ордеров успел обновиться после удаления i-го элемента в нем, попавший на  i-е место бывший i+1-м элемент будет пропущен. Лучше начинать с конца.

Если учесть, что разработчики не гарантируют никакой упорядоченности в массиве ордеров, то, собственно, нет и гарантии того, что последовательность ордеров в их массиве после удаления одного из них сохранится. Совсем надежно было бы сделать так. Крутим цикл до выявления отложенного ордера. Цикл прекращаем. Удаляем найденный ордер. Ждем  Sleep (100) для обновления массива ордеров. Затем опять цикл поиска отложенного ордера, уже с новым массивом ордеров. Полный перебор, а не путем возобновления прежнего цикла. И так тройками (цикл поиска, удаление одного ордера, ожидание обновления массива) до момента, когда отложенный ордер найти уже не удастся.


Т.е. for(OrdersTotal()-1,i=0,i--) и в конце цикла sleep и break?
 
Vlad143:   Ждем  Sleep (100) для обновления массива ордеров.
ИМХО, IMHO, Мое личное мнение вместо  Sleep (100) лучше   while(!RefreshRates()); обязательно точка с запятой в конце