Авто Magic - страница 5

 
Dmitry Fedoseev:
И что теперь? Дверь в квартиру не закрывать? Дорогу на красный свет переходить? Божий дар с яичницей не путайте.

Это оправданный риск, который на самом деле уменьшается. Потому что человек быстрее ошибётся вручную назначать магики. Это лучший вариант. Даже лучше чем сохранение в файл, файл может быть потерян из-за ручного переноса или сбоя системы, работы антивируса.

Так что риск уменьшается, а не наоборот. 

 
Aliaksandr Hryshyn:

Это оправданный риск, который на самом деле уменьшается. Потому что человек быстрее ошибётся вручную назначать магики. Это лучший вариант. Даже лучше чем сохранение в файл, файл может быть потерян из-за ручного переноса или сбоя системы, работы антивируса.

Так что риск уменьшается, а не наоборот. 

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

Задача решается четко и однозначно, но им этого не надо, в вот абы кабы - самое то. 

 
Dmitry Fedoseev:
Вот это как раз глупый риск, и вовсе не оправданный. Если вы этого не понимаете сами, то вам можно только посочувствовать. Сочувствую. 
А обосновать можете?
 
Aliaksandr Hryshyn:
А обосновать можете?
Могу, но не буду.
 
Dmitry Fedoseev:
Могу, но не буду.
Понятно)).
 

А если бы разработчики рассказали, как они создают ID для чартов, то

может быть, и искуственный сдвиг на 2 байта влево не влиял бы на новый magic

2017.02.01 22:16:14.546 Test_AutoMagic (Si-3.17,M1)     Symbol = Si-3.17 Magic =   131304494089950572 Timeframe = PERIOD_M1
2017.02.01 22:16:19.576 Test_AutoMagic (Si-3.17,H1)     Symbol = Si-3.17 Magic =   131304494176825541 Timeframe = PERIOD_H1
2017.02.01 22:16:26.969 Test_AutoMagic (Si-3.17,D1)     Symbol = Si-3.17 Magic =   131304494421489535 Timeframe = PERIOD_D1
2017.02.01 22:16:36.050 Test_AutoMagic (ED-3.17,H1)     Symbol = ED-3.17 Magic =   131304494606850137 Timeframe = PERIOD_H1
2017.02.01 22:16:41.024 Test_AutoMagic (GAZR-3.17,H1)   Symbol = GAZR-3.17 Magic = 131304494783610247 Timeframe = PERIOD_H1

Добавлено

Ну, и на один, то же было бы хорошо. :) 

Добавлено

Лог, что выше с демо, а это с реала

2017.02.01 22:39:20.580 Test_AutoMagic (Si-3.17,H1)     Symbol = Si-3.17 Magic = 131304515369187160 Timeframe = PERIOD_H1

 А это с другого реала

2017.02.01 22:39:20.580 Test_AutoMagic (Si-3.17,H1)     Symbol = Si-3.17 Magic = 131304515369187160 Timeframe = PERIOD_H1

Добавлено

Немного "причесал"

//+------------------------------------------------------------------+
//|                                                    AutoMagic.mq5 |
//|                                      Copyright 2017 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.03"
//

//
ulong m_magic;
input bool UseDiap=true; //Использовать диаппозон магиков
input bool UseMore=true; //Использовать 65535 ордеров одновременно(false - 255 ордеров)
ulong GetMagic(const bool use_diap,const bool ord_more)
  {
   ulong cur_magic=ulong(ChartID());
   if(use_diap)
     {
      ulong byte_high =(cur_magic >> 56) & 255;
      if(ord_more)
        {
         ulong byte_low=(cur_magic >> 48)  &255;
         cur_magic=((cur_magic<<=16)^(byte_high<<=56)^(byte_low<<=48));
        }
      else
        {
         cur_magic=((cur_magic<<=8)^(byte_high<<=56));
        }
      if(cur_magic > 0) return(cur_magic);
     }
   else
     {
      if(cur_magic > 0) return(cur_magic);
     }
   return(0);
  }
//-------------------------------------------------------------------+
// Get Is my magic function                                          |
//+------------------------------------------------------------------+
bool IsMyMagic(const ulong m_mag,const bool u_diap,const bool o_more)
  {
   ulong cur_magic=m_mag;
   ulong s_magic=GetMagic(u_diap,o_more);
   if(u_diap)
     {
      if(o_more)
        {
         cur_magic>>=16;
         s_magic>>=16;
        }
      else
        {
         cur_magic>>=8;
         s_magic>>=8;
        }
     }
   if(s_magic == cur_magic) return(true);
   return(false);
  }  
//-------------------------------------------------------------------+
int OnInit()
  {
   m_magic=GetMagic(UseDiap, UseMore);
   Print("Symbol = ",Symbol()," Magic = ",m_magic," Timeframe = ",EnumToString(Period()));
   if(UseDiap)
     {
      for(int i=0; i<5;i++)
        {
         //Тестовая проверка на 5 магиков из диаппазона (65535)
         Print(IsMyMagic(m_magic+i, UseDiap, UseMore));
        }
      //Минус 1 диаппозона
      Print(IsMyMagic(m_magic-1, UseDiap, UseMore));
//Превышение диаппозона
      Print(IsMyMagic(m_magic+256, UseDiap, UseMore));
     }
   return(INIT_SUCCEEDED);
  }

Добавлено

Так ф-ция сравнения будет работать быстрее + 2-а варианта сдвига magic

//+------------------------------------------------------------------+
//|                                                    AutoMagic.mqh |
//|                                      Copyright 2017 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//#property version   "1.00"
//Переменная для хранения Magic
ulong cur_magic=0;
//-------------------------------------------------------------------+
// Get Magic function                                                |
//+------------------------------------------------------------------+
ulong GetMagic(const bool use_diap,const bool ord_more)
  {
   cur_magic=ulong(ChartID());
   if(cur_magic>0)
     {
      if(use_diap)
        {
         ulong byte_high=(cur_magic>>56)  &255;
         if(ord_more)
           {
            ulong byte_low=(cur_magic>>48) &255;
            cur_magic=((cur_magic<<=16)^(byte_high<<=56)^(byte_low<<=48));
           }
         else
           {
            cur_magic=((cur_magic<<=8)^(byte_high<<=56));
           }
         if(cur_magic > 0) return(cur_magic);
        }
      else return(cur_magic);
     }
   return(0);
  }
//-------------------------------------------------------------------+
// Get Is my magic function                                          |
//+------------------------------------------------------------------+
bool IsMyMagic(const ulong m_mag,const bool u_diap,const bool o_more)
  {
   ulong t_magic=m_mag;
   ulong s_magic=cur_magic;
   if(u_diap)
     {
      if(o_more)
        {
         t_magic>>=16;
         s_magic>>=16;
        }
      else
        {
         t_magic>>=8;
         s_magic>>=8;
        }
     }
   if(s_magic == t_magic) return(true);
   return(false);
  }
//+------------------------------------------------------------------+
 
Почему вы привязываетесь к ID чарта? А как VPS?
 
Aliaksandr Hryshyn:
Почему вы привязываетесь к ID чарта? А как VPS?

Потому что ID чарта 100% уникальное число в терминале

А на VPS советники в "воздухе" работают?

Если у Вас есть VPS - проверьте. 

Добавлено

Лично я не использую одного советника на одинаковых символах, но

мне нужен диаппозон, поэтому я тупо беру в качестве Magic название символа

(н-р GAZR-3.17 "GAZR" - 32 бита, "3" - 8 бит, "17" - 8 бит) Базоввй Magic (со старшими 6-ю байтами) - 100 % уникален

+ 65535 вариантов (2-а младших байта) 100 % уникальных магиков. 

https://www.mql5.com/ru/forum/168395#comment_4049792 

Авто Magic
Авто Magic
  • www.mql5.com
Добрый день! Достаточно часто мы используем одного эксперта на нескольких символах. Но для каждого эксперта необходим свой Magic...
 

Кстати, если коиу-то достатосно одновременно 16 магиков, то

базовый магик можно сдвинуть только на 4 бита практически со 100% гарантией уникальности :) 

//+------------------------------------------------------------------+
//|                                                    AutoMagic.mqh |
//|                                      Copyright 2017 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//#property version   "1.00"
//Перечисление сдвига магика в битах
enum ENUM_SHIFT
{
  SHIFT_ZERO  = 0,
  SHIFT_FOUR  = 4,
  SHIFT_EIGHT = 8,
  SHIFT_SIXT  = 16
};
//Переменная для хранения Magic
ulong cur_magic=0;
//-------------------------------------------------------------------+
// Get Magic function                                                |
//+------------------------------------------------------------------+
ulong GetMagic(ENUM_SHIFT e_shift)
  {
   cur_magic=ulong(ChartID());
   if(cur_magic>0)
     {
       ulong byte_high=(cur_magic>>56)  &255;
       ulong byte_low;
       switch(e_shift)
       {
         case SHIFT_ZERO:
           return(cur_magic);
         break;
         case SHIFT_FOUR:
           cur_magic <<= 4;
           if(cur_magic > 0) return(cur_magic);
         break;
         case SHIFT_EIGHT:
           cur_magic=((cur_magic<<=8)^(byte_high<<=56));
           if(cur_magic > 0) return(cur_magic);
         break;
         case SHIFT_SIXT:
            byte_low=(cur_magic>>48) &255;
           cur_magic=((cur_magic<<=16)^(byte_high<<=56)^(byte_low<<=48));
           if(cur_magic > 0) return(cur_magic);
         break;
       }
     }
   return(0);
  }
//-------------------------------------------------------------------+
// Is my magic function                                          |
//+------------------------------------------------------------------+
bool IsMyMagic(const ulong m_mag, ENUM_SHIFT en_shift)
  {
   ulong t_magic=m_mag;
   ulong s_magic=cur_magic;
   switch(en_shift)
   {
     case SHIFT_FOUR:
       t_magic>>=4;
       s_magic>>=4;
     break;
     case SHIFT_EIGHT:
       t_magic>>=8;
       s_magic>>=8;
     break;
     case SHIFT_SIXT:
       t_magic>>=16;
       s_magic>>=16;
     break;
   }
   if(s_magic == t_magic) return(true);
   return(false);
  }
//+------------------------------------------------------------------+
 
Битва за быстродействие! Вместо того что бы проверить символ и два условия: больше/меньше для магика. Под видом экономии проверка символа не делается, но делается невероятная куча вычислений, городушки какие-то. Да еще с видом великой правильности.