Глупые вопросы от Fduch - страница 3

 

Есть объект на графике, уровни фибоначчи. Меня интересует значение на графике второго по счету уровеня(например 38.2). Как эту цену получить? В хелпе не нашел =(

 
Fduch писал(а) >>

Есть объект на графике, уровни фибоначчи. Меня интересует значение на графике второго по счету уровеня(например 38.2). Как эту цену получить? В хелпе не нашел =(

Вот так:

ObjectGet("FiboName",OBJPROP_FIRSTLEVEL+2);
P.S. Не правильно я написал. Чуть позже исправлюсь :)
Исправляюсь вот скрипт: 
#property show_inputs                //------Вводимые параметры------

extern int    Num  = 2;              // Номер уровня
extern string Name = "";             // Имя фибо
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start() {
   double pr1,pr2,fibo;
   string txt="";
//----
   pr1=ObjectGet(Name,OBJPROP_PRICE1);
   pr2=ObjectGet(Name,OBJPROP_PRICE2);
   fibo=ObjectGet(Name,OBJPROP_FIRSTLEVEL+Num);
   if(pr1>pr2) {
      txt=DoubleToStr((pr1-(pr1-pr2)*fibo),Digits);
   }  else txt=DoubleToStr((pr2-(pr2-pr1)*fibo),Digits);
   Comment("Уровень fibo = ",fibo,"\nЦена на уровне = ",txt);
   Sleep(10000);
   Comment("");
   return;
}
//+------------------------------------------------------------------+
 

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

Для этого нужно знать имя объекта или хотя бы быть уверенным, что такой объект на графике один. Тогда его можно найти по типу объекта:

#property show_inputs

extern double Percents = 38.2;

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(ObjectsTotal(OBJ_FIBO) == 1)
     {
      for(int i = 0; i < ObjectsTotal(); i++)
       if(ObjectType(ObjectName(i)) == OBJ_FIBO)
         break;
      string Name = ObjectName(i);
      double ZeroLevel = ObjectGet(Name, OBJPROP_PRICE2);
      double Level100 = ObjectGet(Name, OBJPROP_PRICE1);
      if(ZeroLevel > Level100)
         double FindLevel = ZeroLevel - (ZeroLevel - Level100)*(Percents/100);
       else
         FindLevel = ZeroLevel + (Level100 - ZeroLevel)*(Percents/100);
      Alert("Значение искомого уровня = ", FindLevel);   
     }
    else
     Alert("Количество Fibo-сеток на графике не равно 1!"); 
//----
   return(0);
  }
 
Спасибо огромное! Жаль, что в MQL не предусмотрена ф-ция для получения этого значения..Надеюсь, это исправят в MQL5
 

А можно работать с МТ4 извне? То есть, например, посылать торговые сигналы с помощью .exe файла?

P.S. Хочу написать советник на С++, обрабатывающий тиковую историю, полученную с помощью DDE.

 
Fduch >>:

А можно работать с МТ4 извне? То есть, например, посылать торговые сигналы с помощью .exe файла?

P.S. Хочу написать советник на С++, обрабатывающий тиковую историю, полученную с помощью DDE.

Нет, максимум - Вы можете писать приказы в файл или передавать "пожелания" с помощью dll советнику, написанному на MQL4 и приаттаченному к графику цены.

 

А в MQL реализованы указатели на переменные и ф-ции? В справке ничего по этому поводу не нашел..

Дело в том, что при первых попытках реализовать генетические скрипт для построения алгоритма прогнозирования тиков из нескольких заранее определенных функций я столкнулся с проблемой реализации генерации: для этого необходимо перебирать различные комбинации из нескольких ф-ций. а без массива указателей на функции это сделать для проблематично.. Может, кто-нибудь знает как обойтись без указателей на ф-ции для того, чтобы организовать перебор функций?

 

через switch() можно сделать.

 

Хм, попробовал перевести код в С++. Оказалось, массив указателей на функции - плод моей фантазии.. Как же быть.Был бы массив - не сложно было бы перебирать по очереди каждую ф-цию в цикле, а так..никак =(

Integer >>:

через switch() можно сделать.

Хм, даже не знаю и как.. Скажем, есть 50 000 функций с двумя параметрами и переменные a,b. Необходимо поочередно подсчитать каждую из 50 000 ф-ций для чисел а и b, записывая результат в массив answer[50 000]. Это можно сделать с помощью switch?

 

Есть не указатели на функции, а вызов функций по адресу. Но всеравно надо будет 50000 строк кода для получения адресов. Есть такая фича, как вычисления кода, на С++ не знаю как, я с ним не очень дружу, например на JavaScript оператор Eval() (кажется так).

Если ограничится только mql4, надо написать срипт вспомогательный для генерации кода пусть железная машина напечатает в файл код вызова 50000 функций. Интересно, а эти 50000 функций вы вручную набрали?

Со switch() примерно так:

switch(FunctionID){

case 0: return(Func_0());

case 1: return(Func_1());

}

Причина обращения: