Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1610

 
Vitaly Muzichenko #:

Подскажите, как сократить конструкцию?

Смысл в том, что нужно отсечь пары, в которых уже есть символ

Есть позиция по паре USDCHF

===

Есть позиция по EURGBP, сигнал поступил с AUDUSD - как это обнаружить, что нет позиций ни по AUD, ни по USD ?

У Валерия правильное направление мысли. Но я не понимаю зачем определять валюту, которую ищем в валютах ордеров, на каждой итерации цикла? И мне кажется проще не в строке искать, а взять валюту маржи и валюту прибыли. Посмотрите спецификацию по валютам… Я-бы сделал так

bool Search(string _sy)
 {
  int OT = OrdersTotal();
  string curencyProfit = SymbolInfoString(_sy, SYMBOL_CURRENCY_PROFIT),
         currencyMargin = SymbolInfoString(_sy, SYMBOL_CURRENCY_MARGIN);
  for(int i = 0; i < OT; i++)
   {
    if(OrderSelect(i, SELECT_BY_POS))
     {
      bool res = StringFind(OrderSymbol(), curencyProfit) >= 0 ||
                 StringFind(OrderSymbol(), currencyMargin) >= 0;
      if(res)
        return(true);
     }
   }
  return(false);
 }/******************************************************************/
 
Valeriy Yastremskiy #:

StringFind

вроде 2 строки должно получиться, поиск и 0 и 3 позиции. Что бы в середине отсечь случайное совпадение.

ЗЫ

Тупанул, там же 4 условия. их не сократить.

Не равные A  B и не равные C  D

условие А==С или А==D или В==С или B==D

Короче вряд ли кто сможет написать)))

Тупанул со второй попытки. Видимо время к вечеру подошло.

 
Vitaly Muzichenko #:

Подскажите, как сократить конструкцию?

Смысл в том, что нужно отсечь пары, в которых уже есть символ

Есть позиция по паре USDCHF

===

Есть позиция по EURGBP, сигнал поступил с AUDUSD - как это обнаружить, что нет позиций ни по AUD, ни по USD ?

я бы собирал все открытые валюты ордеров в массив, и при поступлении сигнала перебирал этот массив.

 
Alexey Viktorov #:

У Валерия правильное направление мысли. Но я не понимаю зачем определять валюту, которую ищем в валютах ордеров, на каждой итерации цикла? И мне кажется проще не в строке искать, а взять валюту маржи и валюту прибыли. Посмотрите спецификацию по валютам… Я-бы сделал так

Проверю завтра


Taras Slobodyanik #:

я бы собирал все открытые валюты ордеров в массив, и при поступлении сигнала перебирал этот массив.

Смысл тот-же, только ещё и массив нужен

 

можно еще для каждой валюты свой магик 1 = AUD, 2 = EUR.... и сравнивать магики, 

насчет массивов, имхо, это рационально, сейчас 3 валютные пары 4 условия, завтра 33 валютные пары 34 условия?

 
Vitaly Muzichenko #:

Проверю завтра


Смысл тот-же, только ещё и массив нужен

А чего до завтра-то ждать? Если лениво просматривать спецификации, погоняй скрипт по всем символам которые интересуют и найди совпадение валюты маржи и валюты прибыли.
/********************Script program start function*******************/
void OnStart()
 {

  Comment(SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT), "\n",
          SymbolInfoString(_Symbol, SYMBOL_CURRENCY_MARGIN)
         );
 }/******************************************************************/
Я не все проверил перед тем как писать, но совпадений не обнаружил…
 
Vitaly Muzichenko #:

Смысл тот-же, только ещё и массив нужен

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

 

Помогите с кодом. Мне нужно что бы отложенный ордер смещался с открытием нового бара по трендовой линии.

Т.е. что бы было постоянное пересечение ордера и линии.

Что бы сделать смещение, нужно знать точку пересечения трендовой линии и времени... как посчитать это?

 
Zalevsky1234 #:

Помогите с кодом. Мне нужно что бы отложенный ордер смещался с открытием нового бара по трендовой линии.

Т.е. что бы было постоянное пересечение ордера и линии.

Что бы сделать смещение, нужно знать точку пересечения трендовой линии и времени... как посчитать это?

Вот функция вычисления точки пересечения
 

Вопрос по статической переменной var метода X::doJob(). Есть класс U, который создает объект типа Х, выполняет кое-какую работу и затем уничтожает его. И так периодически. Вопрос: когда удаляется переменная var?


class X {
public:
   void doJob() {
      static int var = 0;
   }
};

class U {
private:
   X *x;
public:
   U(){

   }
   ~U() {
      delete x;
   }
   void U::dojob(){
      x = new X();
      x.doJob();
      delete x;
   }
};
Причина обращения: