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

 
Profitov:
Вопрос такой возник,можно ли написать советник или скрипт,который бы по достижению например в день 2% убытка закрывал бы все сделки ?

можно.
 
Помогите -- купила новый ноутбук --там установлен вин.8- загрузила терминал с альпари последний обновленный- загружаю индикаторы с которыми я работала до этого, в папку MQL4- индикаторс- они там появляются-- а в самом терминале в пользовательсих их нет, служба поддержки нечего толком не пишет-что делать?
 
galinka:
Помогите -- купила новый ноутбук --там установлен вин.8- загрузила терминал с альпари последний обновленный- загружаю индикаторы с которыми я работала до этого, в папку MQL4- индикаторс- они там появляются-- а в самом терминале в пользовательсих их нет, служба поддержки нечего толком не пишет-что делать?

В системном меню "Файл" есть новый пункт "Открыть каталог данных". Туда теперь надо класть.
 
нет неполучается- нет их в терминале
 

я наверное не поняла как надо сделать- програмные файлы-- у мена альпари-открыть ----там папки---- MQL4- indikators-- я вставляю- появляются- закрываю --- открываю терминал в пользовательских их нет

 
может в моих индикатрах надо чтото поменять
 

спасибо это помогло

 
1mql:

Ниже последнего экстерна:
extern int slippage = 2; //проскальзывание цены при закрытии рыночных позиций

вставь еще один:
extern bool total_symb = true; //по всем парам

а каждую из строк:
if ((OrderSymbol() == Symbol()))
и
if (OrderSymbol() == Symbol())

замени этой:
if (OrderSymbol() == Symbol() || total_symb)

теоретически должно работать, проверь.


нет не получается . все как и прежде. закрывает только пару графика где активируется. а на другие выдает ошибку закрытия 4107 . Пробовал менять в extern bool Buy = false; //удалять/закрывать направление buy ордеров
extern bool Sell = false; //удалять/закрывать направление sell ордеров . на true . не помогло. а если например ставишь на график без открытой позиции то ни одна не закрываеться вежде ошибка 4107.
 
Profitov:
Вопрос такой возник,можно ли написать советник или скрипт,который бы по достижению например в день 2% убытка закрывал бы все сделки ?
Уже написан.
 
alsu:

Значит, где-то еще используется Ticket в старом варианте. Надо зачищать код...

Сделал следующим образом:

 Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   int order[7];//буффер для семи ордеров
   int ord;//количество ордеров
   ArrayInitialize(order,0);//обнуляем количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1){Alert("Обнаружен отложенный ордер. Эксперт не работает.");return;}
         Total++;                               // Счётчик рыночн. орд
         if (Total>7){Alert("Более 7 ордеров. Эксперт не работает.");return;}
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         order  [OrderType()]++;                    // ПОЛУЧАЕМ КОЛИЧЕСТВО ОРДЕРОВ         
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
     ord=order  [OrderType()];

 while(true)                                  // Цикл закрытия орд.
     {
      if (Tip==0 && Cls_B==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         Ans=OrderClose(Ticket,Lot,Bid,2);      // Закрытие Buy
         if (Ans==true){Alert ("Закрыт ордер Buy ",Ticket);if (ord ==0){Alert ("Закрыты все ордера ",ord);break;}}
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }

Позиции закрываются полностью. Правда выходит ошибка ноль, в доках пишется, что она означает нет ошибок. И не могу найти в журнале сообщения "Закрыты все ордера ".

Жирным выделил строки, что изменил. Вроде работает, досконально пока не проверял.

Не совсем понимаю как работают циклы. Допустим есть код сверху и снизу, посредине цикл. Если условия цикла совпадают, то работа кода выполняется только внутри цикла, не давая исполняться строкам кода, что ниже цикла? Рассматривая данный пример оператор break прерывает работу цикла? Разрешая исполниться строкам ниже или программа начинает вычисления с самого начала?

Поправьте, если не прав: break прерывает цикл в котором он находится, а continue исполнение вычисления оператора, что над ним, тогда не понятно, если есть второй оператор будет ли прервано его вычисление или continue прерывает вообще весь код и отправляет программу исполнять код сначала?