[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 51

 
vikon писал(а) >>

Я вкурсах насчет открытия ордера с помощу кода.

Мне другое нужно, созать полуавтоматическую систему со свойствами менеджмента.

Открываю вручную позицию но размер лота отслеживает советник и изменяет его по умолчанию в МТ (сервис\настройки\торговля\объем по умолчанию)

Это возможно зделать?

Нет. По крайней мере не на MQL4

 
granit77 >>:

Справочка подскажет:

double iWPR( string symbol, int timeframe, int period, int shift)

Следовательно, правильно будет:

ОГРОМНОЕ СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
Люди, а как в MACD вытащить время образования определенного столбца, не используя график цен?
 
Noterday >>:
Люди, а как в MACD вытащить время образования определенного столбца, не используя график цен?

Столбец соответствует времени образования бара на графике цен,

то есть нужно знать номер определённого бара.

 

а какие есть правила для оптимизации кода? интересуют правила написания, а не алгоритма.

чтобы выразиться точнее приведу пример:

есть два "одинаковых" скрипта:

int start()
  {
//----
  int start=GetTickCount();
  int Massiv[100000000];
  int x=ArraySize(Massiv);
  for (int a=0;a<=x;a++)
    {
    Massiv[a]=a;
    }
  Alert("прошло времени: ",GetTickCount()-start);
//----
   return(0);
  }

и

int start()
  {
//----
  int start=GetTickCount();
  int Massiv[100000000];
  for (int a=0;a<=ArraySize(Massiv);a++)
    {
    Massiv[a]=a;
    }
  Alert("прошло времени: ",GetTickCount()-start);
//----
   return(0);
  }

первый быстрее второго в два раза. (у меня это 4 секунды)

понятно что массивы в сто миллионов используются нечасто :-) и в реальности выигрыш составит пару миллисекунд для обычного массива и и что основная проблема в корявых алгоритмах а не в подобных мелочах, но все же...

 
beruk >>:

а какие есть правила для оптимизации кода? интересуют правила написания, а не алгоритма.

чтобы выразиться точнее приведу пример:

есть два "одинаковых" скрипта:

и

первый быстрее второго в два раза. (у меня это 4 секунды)

понятно что массивы в сто миллионов используются нечасто :-) и в реальности выигрыш составит пару миллисекунд для обычного массива и и что основная проблема в корявых алгоритмах а не в подобных мелочах, но все же...

Как таковых правил нет. То есть Вы можете писать так, как считаете нужным и это будет работать. С разной эффективностью, естественно.

Для каждой операции извстна ее стоимость во временном выражении - можете найти в стандартах языка, равно как и порядок работы циклов и прочих языковых конструкций (стандарт С - упоминаю так, как сомневаюсь, что Вы пытались разбираться, начиная с основ - производитель рекомендовал во всех неуказанных явно случаях обращаться именно к стандарту этого языка).

Во втором случае у Вас постоянно происходит вызов функции ArraySize(Massiv) - это самая дорогая по затратам операция (вызов функции - любой, а не конкретно этой), а операция сравнения вызывается на каждом цикле.

В таком варианте: цикл

for (int a=ArraySize(Massiv)-1;a>0;a--)

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

Есть одно "но" - если Вы используете тестер или переобучаемые сети - там разница будет весьма существенной и будет проявляться весьма и весьма....

Да, еще один момент: у Вас ошибка в первом скрипте - выход за границы массива. Читайте руководства - там все написано. Правильно так :

 int x=ArraySize(Massiv);
 for (int a=0;a<x;a++)

Успехов.

 

Добрый день

Пожалуйста объясните как толоковать этот пассаж в учебнике про FileOpen

===

Содержание записей в файлах

При любой комбинации режимов записи данных заносятся в файл без промежутков. При формировании файлов в режиме FILE_BIN записи данных заносятся подряд. В зависимости от типа данных, записываемых в файл (и используемых для этого функций записи), между группами записей может прописываться комбинация символов конца строки ("\r\n"). При формировании файлов в режиме FILE_CSV записи данных отделяются файловым разделителем (обычно ';'), а группы записей (составляющих строки) разделяются с помощью комбинации символов конца строки ("\r\n").

===

с "int FileOpen(string filename, int mode, int delimiter=';') " все понятно

а куда ставить ("\r\n") ? можно ли пользоватся им при FILE_CSV ? дайте пример с ("\r\n") пожалуйста, туплю о.0

 
Здравствуйте! Нужно написать эксперт по этому: https://www.mql5.com/ru/code/8663 индикатору, я имею ввиду HP.mq4 (если растет покупаем, если падает продаём). Он хоть и перерисовывается, но при использовании больших периодов например 100-200 перерисовывание терпимо. Или например можно добавить сигнальный MA если сигналка ниже этого индюка то покупаем если выше то продаём Кто нить возьмётся?
 
teetrinker >>:

Добрый день

Пожалуйста объясните как толоковать этот пассаж в учебнике про FileOpen

===

Содержание записей в файлах

При любой комбинации режимов записи данных заносятся в файл без промежутков. При формировании файлов в режиме FILE_BIN записи данных заносятся подряд. В зависимости от типа данных, записываемых в файл (и используемых для этого функций записи), между группами записей может прописываться комбинация символов конца строки ("\r\n"). При формировании файлов в режиме FILE_CSV записи данных отделяются файловым разделителем (обычно ';'), а группы записей (составляющих строки) разделяются с помощью комбинации символов конца строки ("\r\n").

===

с "int FileOpen(string filename, int mode, int delimiter=';') " все понятно

а куда ставить ("\r\n") ? можно ли пользоватся им при FILE_CSV ?

Ни куда. В руководстве написано же ясным русским языком: "группы записей (составляющих строки) разделяются с помощью комбинации символов конца строки ("\r\n")".

 

подскажите, пжлст

в советнике несколько алертов стоят подряд в одном блоке, несколько подряд в другом блоке

на тесте в журнале ставятся не по порядку, а вразнобой - 2 алерта из первого блока, 3 из второго, потом 3 из первого и последние 2 из второго

поставил после каждого слип 500, то есть полсекунды и ничего - все также вразнобой и за 1 сек могут поставиться все 10

в чем причина?

как сделать так, чтобы алерты шли по порядку?