[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 301

 
laveosa:

все делал именно так и не один раз  все ровно есть эта яма. 
Тогда ищите Чебурашку в Вашем жилище! Наверняка, его шалости! ;)
 
laveosa.,держи историю до вчерашнего дня eurusdм1 загружать через импорт в котировках.
Файлы:
eurusd1.zip  548 kb
 
Интересная тут ситуация.ДУмал затестить один индикатор,вывел цифры на график,а сколько не жди они не меняются.попробую сказать по другому,мне от приложенного надо чтобы как крестик встает на зигзаг цена или алертом или принтом фиксировалась,а она застывает на момент подключения.При смене тайм фрейма значения меняются,но стоит вернуться и цифры те же самые,подскажите пожалуйста как это можно исправить.
Файлы:
 

Вопрос к знатокам!

У меня в экспертах частяком присуствуют машки. Дабы не " засорять " код повторяющимися моментами, типа:

double maFast = iMA(NULL, 0, i_maFastPeriod, 0, i_maMethod, i_maPrice, index);
double maSlow = iMA(NULL, 0, i_maSlowPeriod, 0, i_maMethod, i_maPrice, index);

 Таким повторений может быть порядком. Я тут надумал избавится от этого путём написания отдельных функций.

 Начало такое:

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   if (GetMA(1, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex) > 
      GetMA(2, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex))
      return (CROSS_UP);
}

  Можно пойти дальше, объявив на глобальном уровне переменные для машек, например, fastMA и slowMA и по ссылке вернуть их через функцию :

GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)

 Выйдет типа такого:

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA);
   if (fastMA > slowMA)
       return (CROSS_UP);
   if (fastMA < slowMA)
       return (CROSS_DN);
   return (CROSS_NO);
}

 

Вопрос такой:

Я слышал или читал где-то, что оператор switch медленный, не будет ли это влять в данном случает на производительность эксперта в целом? И вообще на  сколько он медленный.

 Так же тут выходит не мало параметров, не будет ли это тормозом для эксперта?

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

 

Виктор, вызов функции гораздо больший тормоз, чем switch. Скорость можно проверить самому. Напишите тестовый код с циклом. Где будете проверять Ваш код. На входе засеките время. Потом сравните со временем на выходе.

Оператор  switch один из самых быстрых операторов. Быстрее, чем перебирать условия.

switch надо с дефолтом на исключение использовать. Чтобы в случае неверного условия Вы бы знали из-за чего не работает код.

 

Хм. А константу для case я так понимаю переменной нельзя использовать, исходя из документации. Написано что какой-то целевой константой, символьной константой или символьным выражением.

Получается тока если букву задать типа стринг есс-но т.е. 1 символ (если больше 1 символа ругается компилятор) или цифру.

 Больше ничего.
А написано что какие-то целевые константы, сивольные выражения и символьные константы. 

 

Где можно почитать про использование глобальных переменных терминала с практическими примерами? Конкретнее, я хочу сделать так, чтобы каждый эксперт торговал только своей долей депозита и его прибыль\просадки не влияли на ММ других экспертов. 

 
Ekburg:

Всем привет

подскажите в чём может быть причина ошибки "shutdown by timeout", при запуске эксперта в терминале и как решить эту проблему?

 

 
[quote=Roman.]Менять кухню.[/quote]в том-то и дело, что кухня вроде ни при чём: ордер на продажу есть в логе советника. можно, конечно, предположить, что брокер внёс изменения в код скачиваемого дистрибутива МТ4 и корректирует направление сделки, но это было бы слишком нагло, кмк.
 
Можно прикреплять коды программ ,а не копировать целиком код сюда? Куда смотрят админы?
Причина обращения: