Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 75
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
SELL_Lvl это количество колен (ордеров) sell сетки, а SELL_NoLossLevel это общий уровень (цена) БУ этих ордеров. В общем идея такая: нужно что бы на уровне БУ отрисовывалась линия и соответственно перерисовывалась при открытии новых колен. Как это реализовать не догоняю.
Не догоняешь как определить линию БУ всех ордеров?
Подскажите, как правильнее записать для экономии ресурсов, и получения актуальных цен
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
или вот так?
for(int i=OrdersTotal(); i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
Подскажите, как правильнее записать для экономии ресурсов, и получения актуальных цен
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
или вот так?
for(int i=OrdersTotal(); i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
Подскажите, как правильнее записать для экономии ресурсов, и получения актуальных цен
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
или вот так?
for(int i=OrdersTotal(); i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
Я-бы сказал что это зависит от размера OrdersTotal() и вероятности изменения цен за время работы цикла.
На мой взгляд получение свежих данных непосредственно в цикле правильнее.
И считаю что дополнительные переменные (выделено в коде) абсолютно лишние.
Пример в документации есть.
Тут, наверное будет лучше перебирая ордера в цикле, сразу, при условии, что очередной получается ниже предыдущего, выбирать его для дальнейшей работы с ним. Таким образом после выхода из цикла уже будет выбран ордер для удаления.
Или сначала в цикле запомнить позицию его в списке ордеров и после выхода из цикла выбрать его по запомненному индексу.
Первый вариант более правельнее, во втором эту строку надо так записать SymbolInfoTick(symb,Last_Tick); <<<
Да, просто скопировал, и не заметил.
Интересует сам вопрос того, насколько SymbolInfoTick правильно ставить внутри цикла, нужно-ли оно там, или можно поставить до цикла. Используется в трайлинг-стопе, может тянуть сетку до 50шт.
Да, просто скопировал, и не заметил.
Интересует сам вопрос того, насколько SymbolInfoTick правильно ставить внутри цикла, нужно-ли оно там, или можно поставить до цикла. Используется в трайлинг-стопе, может тянуть сетку до 50шт.
Не догоняешь как определить линию БУ всех ордеров?
Для трайлинг-стопа конечно лучше один раз до цикла.
Раньше стояли обычные Ask и Bid внутри цикла и всё работало отменно, сейчас потихоньку переписываю под пятёрку. Я к тому, что цена может измениться очень быстро, и получиться ситуация что уровень будет менее допустимого стоплевел, что приведёт к ошибке.
Я так понимаю, что эта шляпа "SymbolInfoTick" нужна для получения актуальных цен?