Назначение автоматического меджика для валютной пары

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ivan Ovchinnikov
1827
Ivan Ovchinnikov  

Всем привет! Ребята, поскажите пожалуйста, как у советника для определенной валютной пары сгенерировать меджик. 

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

Но в то же время на одной валютной паре чтобы он был одинаковый, даже после перезагрузки совы, терминала и тд

Ivan Ovchinnikov
1827
Ivan Ovchinnikov  
и без привязки к таймфрему
Dmitry Fedoseev
57499
Dmitry Fedoseev  
Обычно при работе с ордерами выполняется две проверки: на символ и на магик. Поэтому, что бы советники отличали ордера только своего символа, с магиком не нужно заморачиваться. Вот когда на одном символе несколько советников - тогда да.
Artyom Trishkin
Модератор
56528
Artyom Trishkin  
Ivan Ovchinnikov:

Всем привет! Ребята, поскажите пожалуйста, как у советника для определенной валютной пары сгенерировать меджик. 

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

Но в то же время на одной валютной паре чтобы он был одинаковый, даже после перезагрузки совы, терминала и тд

Копируете посимвольно строку в массив при помощи StringToCharArray(), а затем складываете содержимое всего массива.

Документация по MQL5: Преобразование данных / StringToCharArray
Документация по MQL5: Преобразование данных / StringToCharArray
  • www.mql5.com
Посимвольно копирует преобразованную из unicode в ansi строку в указанное место массива типа uchar. Функция возвращает количество скопированных элементов. [in]  Количество элементов массива для копирования. Определяет длину результатной строки. По умолчанию -1, что означает копирование до конца массива, либо...
Taras Slobodyanik
38239
Taras Slobodyanik  
Artyom Trishkin:

Копируете посимвольно строку в массив при помощи StringToCharArray(), а затем складываете содержимое всего массива.

лучше посчитать CRC

Artyom Trishkin
Модератор
56528
Artyom Trishkin  
Taras Slobodyanik:

лучше посчитать CRC

Вполне. Тогда уж сразу же и пример был бы уместен, чем просто слово.

Alexandr Gavrilin
43455
Alexandr Gavrilin  
Artyom Trishkin:

Вполне. Тогда уж сразу же и пример был бы уместен, чем просто слово.

примеры находятся сразу по "подсчет CRC", там от 8 бит решения до 64 бит, но так как у нас меджик в мт4 int, а в мт5 long то решения могут быть разные.

Artyom Trishkin
Модератор
56528
Artyom Trishkin  
Alexandr Gavrilin:

примеры находятся сразу по "подсчет CRC", там от 8 бит решения до 64 бит, но так как у нас меджик в мт4 int, а в мт5 long то решения могут быть разные.

У меня в поиске по сайту появляются лишь две страницы - эта, и ещё одна, где нужно всё перечитать.

Я же просто предложил сюда запостить то, что считается лучше, а не просто сказать.

Я сказал первое же простейшее решение пришедшее в голову - сумма кодов символов в наименовании инструмента. И чем, и как её подсчитать. И эта сумма влезет и в int, и в long.

Dmitry Fedoseev
57499
Dmitry Fedoseev  

Если считать, что для символа используются только заглавные буквы, то вот так можно вмять в инт 7 букв:

int SymToInt(string s){
   int m=1;
   int rv=0;
   for(int i=StringLen(s)-1;i>=0;i--){
      ushort ch=StringGetChar(s,i);
      if(ch>=65 && ch<=90){
         ch-=64;
         rv+=ch*m;
         m*=27;
      }
   }
   return(rv);
}
Особо не проверял функцию, ежели чего...
Taras Slobodyanik
38239
Taras Slobodyanik  
Artyom Trishkin:

Вполне. Тогда уж сразу же и пример был бы уместен, чем просто слово.

//+------------------------------------------------------------------+
//| Return CRC-32 sum on source data 'array'                         |
//+------------------------------------------------------------------+
uint CRC32(uchar &array[])
  {
   uint crc_table[256];
   ArrayInitialize(crc_table,0);
   uint crc=0;
   for(int i=0; i<256; i++)
     {
      crc=i;
      for(int j=0; j<8; j++)
         crc=(crc  &1)>0 ?(crc>>1)^0xEDB88320 : crc>>1;
      crc_table[i]=crc;
     }
   crc=0xFFFFFFFF;
   int len=0,size=ArraySize(array);
   while(len<size)
      crc=crc_table[(crc^array[len++])  &0xFF]^(crc>>8);
   return crc ^ 0xFFFFFFFF;
  }
Ivan Ovchinnikov
1827
Ivan Ovchinnikov  
я так подумал, проще потратить 5 минут и указать меджик вручную на 10 парах, нежели делать что подобное))
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий