0
Претензия у компилятора к двум строкам
maxRstCr = (RUp[0]-RDn[minIdx])/((RUp[maxIdx]-RDn[minIdx])/100);
   minRstCr = (0-RDn[0])/((RUp[maxIdx]-RDn[minIdx])/100);

Но в них идёт вызов данных из ячеек массивов, компилятор предупреждает о неинициализированных переменных, хотя массивы объявлены и заполнены*???* 
avatar

AlGriS

  • 11 ноября 2017, 12:07
0
До создания отдельного индикатора руки так и не дошли. Но сравнение решить удалось сразу в советнике:
<code>
   // направление тренда и тенденции движения цены
   double   trcrup=0,trcrdn=0,trcr=0,trup=0,trdn=0,trCr=0,trUp=0,trDn=1000,maxRstCr,minRstCr;
   double   RUp[500];
   double   RDn[500];
   int      maxIdx,minIdx;

   trend=0;
   
   trcrup=iCustom(pairName,PERIOD_H4,"Use\\FL Trend Direction",48,3.0,16,false,0,1);
   trcrdn=iCustom(pairName,PERIOD_H4,"Use\\FL Trend Direction",48,3.0,16,false,1,1);
   if (trcrup<1000) trcr=trcrup;
   if (trcrdn<1000) trcr=trcrdn;

   for (int i=1 ; i<500; i++)
      {
      trup=iCustom(pairName,PERIOD_H4,"Use\\FL Trend Direction",48,3.0,16,false,0,i);
      trdn=iCustom(pairName,PERIOD_H4,"Use\\FL Trend Direction",48,3.0,16,false,1,i);
      if (trup<1000 && trup>trUp) trUp=trup;
      if (trdn<1000 && trdn<trDn) trDn=trdn;
      }
      
   trCr=(trcr-trDn)/((trUp-trDn)/100);

   for (int i=0; i<500; i++)
      {
      RUp[i] = iCustom(pairName,PERIOD_H4,"Use\\FL Restriction",11,12,2.3,2.3,71,1,i);
      RDn[i] = iCustom(pairName,PERIOD_H4,"Use\\FL Restriction",11,12,2.3,2.3,71,2,i);
      }
   maxIdx = ArrayMaximum(RUp,WHOLE_ARRAY,0);
   minIdx = ArrayMinimum(RDn,WHOLE_ARRAY,0);
   
   maxRstCr = (RUp[0]-RDn[minIdx])/((RUp[maxIdx]-RDn[minIdx])/100);
   minRstCr = (0-RDn[0])/((RUp[maxIdx]-RDn[minIdx])/100);
   
   if (trCr<=minRstCr) trend=1;
   if (trCr>=maxRstCr) trend=-1;

   // отладочная информация
   if (messInd==true)
      {
      string messageTr=StringConcatenate(pairName," | тренд вверх ",trcrup," | тренд вниз ",trcrdn," | текущий ",trcr);
      MessageBox(messageTr);
      string messageMMTr=StringConcatenate(pairName," | максимальный тренд ",trUp," | минимальный тренд ",trDn);
      MessageBox(messageMMTr);
      string messageR=StringConcatenate(pairName," | индекс верха ",maxIdx," | индекс низа ",minIdx);
      MessageBox(messageR);
      string messageRCr=StringConcatenate(pairName," | максимальный верх ",RUp[maxIdx]," | минимальный низ ",RDn[minIdx]);
      MessageBox(messageRCr);
      string messageCrTr=StringConcatenate(pairName," | текущий относительный тренд ",trCr," | текущий верх ",maxRstCr," | текущий низ ",minRstCr);
      MessageBox(messageCrTr);
      string messageIdTr=StringConcatenate(pairName," | текущий индекс тренда ",trend);
      MessageBox(messageIdTr);
      }
 </code>

Выкладываю, может быть понадобиться как образец сравнения несравнимого.
Есть одно но. Компилятор выдаёт сообщение:

Что не так, я не разобрался — всё-таки математик, не программист. Может кто знает и подскажет?
Названия индикаторов другие, но это те же FL20 и FL22, только переименованные для моего удобства.
avatar

AlGriS

  • 11 ноября 2017, 01:58
0
Обязательно, если конечно получится.
Видите, пока что никто из программистов за полную реализацию не берутся, а у меня знания MQL на минимальном уровне.
Так жалко — с этими индикаторами в ручной торговле работаю несколько лет. Входы подтверждают отменно, только замучиваешься листать инструменты, чтобы их найти.
avatar

AlGriS

  • 23 октября 2017, 13:37
0
Огромное, спасибо!*hi* 
Надеюсь, расчёт и алерт уже смогу сделать сам. Вот в циклах пока ещё туго разбираюсь.
avatar

AlGriS

  • 21 октября 2017, 23:05
0
Может быть хотя бы сделаете, как получать текущее, минимальное и максимальное значение по индикаторам (заготовку), а формулу я попробую применить сам, может и получится?
avatar

AlGriS

  • 20 октября 2017, 22:52
0
Да ещё. В одном из индикаторов минимальное значение отрицательное. На диапазон это не влияет.

129-(-29)=158

Но вот текущее отрицательное значение нужно приводить к диапазону:

скажем текущее значение -13, для нормализации нужно сдвинуть 0 на -29:

0-(-29)+(-13)=16 и уже 16/((129-(-29))/100).
avatar

AlGriS

  • 20 октября 2017, 01:36
0
Математически все просто.
У индикатора есть максимальное значение и минимальное. Нужно найти их (я обратил внимание, что во вкладке параметров общие есть «закрепить максимум», «закрепить минимум» — может быть это можно использовать?). Затем вычисляем разницу между максимумом и минимумом и делим её, например, на сто (можно брать любую шкалу — в данном случае получится процентная шкала), получаем значение на условную единицу. Берём текущее значение и делим на условную единицу — получаем количество условных единиц в текущем значении. Делаем тоже с другим индикатором и уже можем сравнивать их по условным единицам, так как они уже в одном масштабе.

Формула:
текущее значение в усл.ед.=текущее значение/((максимальное-минимальное)/100).

Сейчас я говорю о шкале сравнения 0-100, то есть о процентной шкале (хоть раньше упоминал шкалу 0-1), так как это мне кажется более привычным.

Грубо говоря мы просто сравниваем процент текущего значения ко всему диапазону для каждого индикатора, а это сравнимые величины.

Надеюсь, не перемудрил.
avatar

AlGriS

  • 20 октября 2017, 01:21
0
Эх уровень, уровень…
Может кто поручится?..
С индикаторов значения считываются, но без нормализации или нормирования к единой шкале (не знаю как точно это называется) их никак не сравнить. Математически я это понимаю, но навыков программирования нет.
avatar

AlGriS

  • 19 октября 2017, 18:24
0
Да, я полагаю, что это применимо ко всем, кто в течение жизни заботится не только о своем теле, о своей диете, о своей изворотливости в жизни, но ёще не забывает тренировать свой мозг, так как он тоже орган человеческого тела и деградирует без тренировки.
А если мозг у человека не тренирован, то что ему делать в трейдинге, кроме как отдавать кому-то свои деньги.
Кстати трейдинг, освоение MQL — это и есть тоже тренировка мозга.
Да, забыл ответить, что опыт имел до этого лишь Exel, Access — но тоже самоучка.
avatar

AlGriS

  • 17 октября 2017, 17:32
0
Не знаю насчёт экселя, но MQL — простейший и прозрачнейший язык для интерпретатора.
У меня получилось так. Заинтересовал простой советник открывавший bay выше MA и sell ниже. Автор дорабатывать его не захотел. Тогда я взял исходник этого советника и нескольких других советников и через месяц у меня уже был комбайн в котором: добавлен фильтр по MA с большим периодом или другим TF, фильтр по 3 Level Semafor, тралл ордеров, закрытие по профиту bay sell all, локирование позиций, перекрытие дальних убыточных ордеров и т.д…
Для этого понадобилась лишь голова и справка метаэдитора.
avatar

AlGriS

  • 17 октября 2017, 16:34
Начать торговлю с Альпари