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

 
psyman:

neverness, зачем вы сюда это пишите?

Заведите отдельную ветку во флейме и раздавайте там слонов, снимая шляпу.

Так я же об этом сразу сказал Модератору.

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

Модератор пока против этого.

Наверное у Модератора "теории трейдинга" своей нет.

 
inter78:

Здравствуйте! Я тоже спросить про переключения между графиками. Открыто 28  или 30 графиков. Я их переключаю вдумчиво ярлычками и если подходит по условию открываю позиции. Штук  10 или 20. Или 5. Не важно. Важно, что остальные мешают и нет информации по открытым  позициям. Попробовал отправить ID в глобальные  переменные. Но возвращается совсем другие цифры. Мне объяснили что ID большой и искажается. Попробовал через файл. Возвращает в ТХТ и в лонг не преобразуется. Внес ID вручную в код - вроде заработало. Сдвигаю поле и открывается нужный график.  Как бы сделать правильно?

Дабл и лонг имеют одинаковую длину - 8 байт.

Чтобы сохранить лонг в дабл (и обратно) можно использовать "union".


Например:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long id=ChartID();
   
   double X=LongToDouble(id);
   long   Y=DoubleToLong(X);
   
   Print("id=",id," X=",X," Y=",Y);
  }


//+------------------------------------------------------------------+
union eightbytes
   {
   double   dbl;
   long     lng;
   } VALUE;

double LongToDouble(long value)
   {
   VALUE.lng=value;
   return(VALUE.dbl);
   }

long DoubleToLong (double value)
   {
   VALUE.dbl=value;
   return(VALUE.lng);
   }
 
neverness:

Так я же об этом сразу сказал Модератору.

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

Модератор пока против этого.

Наверное у Модератора "теории трейдинга" своей нет.

Вам в ветку клоунов теоретиков, там любят рисовать не понятно что, и не понятно зачем

И подобных веток на форуме полно - хоть заобсуждайтесь!

От теории к практике
От теории к практике
  • 2017.12.01
  • www.mql5.com
Добрый вечер, уважаемые трейдеры! Решил было на какое-то время покинуть форум, и сразу как-то скучно стало:)))) А просто читать, увы - неинтересно...
 
Taras Slobodyanik:

Дабл и лонг имеют одинаковую длину - 8 байт.

Чтобы сохранить лонг в дабл (и обратно) можно использовать "union".


Например:

Извините, Тарас , нельзя ли кусочек кода как отправить ID в глобальную переменную и извлечь без искажения? 
 
inter78:
Извините, Тарас , нельзя ли кусочек кода как отправить ID в глобальную переменную и извлечь без искажения? 

так все уже готово, нужно только добавить запись/чтение

string GVname="gvName";

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   //создаем временную глобальную переменную
   if (!GlobalVariableCheck(GVname))
      GlobalVariableTemp(GVname);
   
   long  id=ChartID();
   
   //сохраняем long как double
   GV_Save(LongToDouble(id));
   
   //читаем double и переводим в long
   long  Y=DoubleToLong(GV_Read());
   
   Print("id=",id," Y=",Y);
  }

//+------------------------------------------------------------------+
union eightbytes
   {
   double   dbl;
   long     lng;
   } VALUE;

double LongToDouble(long value)
   {
   VALUE.lng=value;
   return(VALUE.dbl);
   }

long DoubleToLong (double value)
   {
   VALUE.dbl=value;
   return(VALUE.lng);
   }


//+------------------------------------------------------------------+
double GV_Read()
{
if (!GlobalVariableCheck(GVname))
   GlobalVariableTemp(GVname);
   
return(GlobalVariableGet(GVname));
}
//+------------------------------------------------------------------+
void GV_Save(double value)
{
GlobalVariableSet(GVname, value);
}
 
Taras Slobodyanik:

так все уже готово, нужно только добавить запись/чтение

Большое спасибо! Интересно, а раньше кто-нибудь пытался сделать такой индикатор? Я сколько не искал не мог найти. Мне кажется это было бы многим интересно.
 
Vitaly Muzichenko:

Делать в OnInit() инициализацию

Нет, не сигналит на текущем баре. Может быть можно обнулить переменную _time после того как индикатор всё посчитает первый раз после присоединения к графику.

Как узнать что индикатор посчитал всё один раз?
 
Ghabo:

Кидаю индикатор на график и... АЛЕРТ но сигнал далеко на 5 баров. Во время дальнейшей работы сигналит как положено. 

Как сделать чтоб при старте не сигналил?

if(М_А>0.0)  
{
if(time!=Time[0])
   {
    time=Time[0]; 
    AL(Symbol()+" "+Period()+" УХ ТЫ",2);//
   }
 }

В функции AL(), все возможные уведомления.

Что такое M_A ? Что содержит, и откуда берёт данные?

Вам нужно вместе с проверкой времени проверять валидность сигнала на текущем баре. А вы просто проверяете значение M_A. Откуда его берёте?

 
Artyom Trishkin:

Что такое M_A ? Что содержит, и откуда берёт данные?

Вам нужно вместе с проверкой времени проверять валидность сигнала на текущем баре. А вы просто проверяете значение M_A. Откуда его берёте?

Вызываю индикатор.

М_А =NormalizeDouble(iCustom(NULL,0,"Morning_All_Best",0,i),Digits);

Как валидность проверять?

 
Ghabo:

Вызываю индикатор.

Как валидность проверять?

1. Зачем делаете нормализацию? Это слишком дорогая операция для работы в цикле индикатора, и тут она не нужна.

2. Что значит "больше нуля"? Какие сигналы выдаёт этот пользовательский индикатор? Что отображается в значениях буфера этого индикатора в окне данных (Ctrl+D) ?

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