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

 
Vasiliy Sokolov:
Пойду попкорном запасаться!

Во, не хотите поработать?

Немного... На благо сообщества?

 
prostotrader:

Во, не хотите поработать?

Немного... На благо сообщества?

Мартышкин труд.
 
Vasiliy Sokolov:
Мартышкин труд.

Спасибо, понятно.

Добавлено

Только тогда не понятны Ваши "заботы" о новичках и пр. ... 

Извините, конечно... что обратился.

Добавлено

И... аккуратнее с попкорном, не подавитесь, не дай боже... 

 
Dmitry Fedoseev:

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

Забавно так - когда не понимаешь как что-то работает, кажется оно обладает магической силой. Да? 

Не остаётся, магик жёстко привязывается к символу/таймфрейму/имени эксперта/параметрам(кому что надо). Это означает, что используя тот же символ/таймфрейм/..... будет генериться один и тот же магик.
 
Aliaksandr Hryshyn:
Не остаётся, магик жёстко привязывается к символу/таймфрейму/имени эксперта/параметрам(кому что надо). Это означает, что используя тот же символ/таймфрейм/..... будет генериться один и тот же магик.

Не влезет это все в ulong.

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

 

Всё хорошо, когда мы НЕ хотим использовать несколько магиков в одном советнике, тогда просто

ulong cur_magic=ulong(ChartID());

Но, при использовании диаппозона магиков (н-р для нескольких отложенных ордеров),

приходится "кастрировать" старшие 2- байта из ChartID()

Не зная каким образом разработчики присваивают чарту ID,

решил (на всякий случай) не выбрасывать старшие 2-а байта из ChartID(), а

"прикрутить" их в "новоиспечённый" магик.

//+------------------------------------------------------------------+
//|                                                    AutoMagic.mq5 |
//|                                      Copyright 2017 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.01"
//
ulong m_magic;
input bool UseDiap=true; //Использовать диаппозон магиков
//-------------------------------------------------------------------+
// Get Magic function                                                |
//+------------------------------------------------------------------+
ulong GetMagic()
  {
   ulong cur_magic=ulong(ChartID());
   if(UseDiap)
     {
      ulong temp_magic= cur_magic;
      ulong byte_high =(temp_magic>>= 56) & 255;
      temp_magic=cur_magic;
      ulong byte_low=(temp_magic>>=48)  &255;
      cur_magic=((cur_magic<<=16)^(byte_high<<=56)^(byte_low<<=48));
      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)
  {
   ulong cur_magic=m_mag;
   ulong s_magic=GetMagic();
   if(UseDiap)
     {
      cur_magic>>=16;
      s_magic>>=16;
     }
   if(s_magic == cur_magic) return(true);
   return(false);
  }
//-------------------------------------------------------------------+
int OnInit()
  {
   m_magic=GetMagic();
   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));
        }
      //Минус 1 диаппозона
      Print(IsMyMagic(m_magic-1));
      //Превышение диаппозона
      Print(IsMyMagic(m_magic+65536));
     }
   return(INIT_SUCCEEDED);
  }

Добавлено

Если не использовать одновременно более 255 ордеров на одном чарте,

то можно сдвигать новый магик только на 1 байт. 

 
Dmitry Fedoseev:

Не влезет это все в ulong.

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

Да, не влезет. Но проблему решает на 99.99999% и выше.

Вот реальный тест, который сами можете повторить:

Например, составляем такие строки для каждого сочетания  эксперта, инструмента и тайфрейма:

  1. EURUSD_M1_MyProfitExpert
  2. EURUSD_M2_MyProfitExpert
  3. EURUSD_M3_MyProfitExpert
  4. EURUSD_H1_MyProfitExpert
  5. EURUSD_D1_MyProfitExpert
  6. EURUSD_D1_MyProfitExpert
Total Commander выдал такие хеши CRC32 для каждой строки, ниже полный текст результата:

 ; Generated by WIN-SFV32 v1.0

; (Compatible: Total Commander 8.51a)

1.txt 8B2DE2A4

2.txt A2E55656

3.txt 0C8DC7C7

4.txt 7F830E28

5.txt EA9B6679

6.txt EA9B6679

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

Обращаю ваше внимание, что  строки 5 и 6 одинаковые и дают одинаковый хеш.

Всё просто, и довольно надёжно. 

 
Aliaksandr Hryshyn:

Да, не влезет. Но проблему решает на 99.99999% и выше.

Вот реальный тест, который сами можете повторить:

Например, составляем такие строки для каждого сочетания  эксперта, инструмента и тайфрейма:

  1. EURUSD_M1_MyProfitExpert
  2. EURUSD_M2_MyProfitExpert
  3. EURUSD_M3_MyProfitExpert
  4. EURUSD_H1_MyProfitExpert
  5. EURUSD_D1_MyProfitExpert
  6. EURUSD_D1_MyProfitExpert
Total Commander выдал такие хеши CRC32 для каждой строки, ниже полный текст результата:

 ; Generated by WIN-SFV32 v1.0

; (Compatible: Total Commander 8.51a)

1.txt 8B2DE2A4

2.txt A2E55656

3.txt 0C8DC7C7

4.txt 7F830E28

5.txt EA9B6679

6.txt EA9B6679

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

Обращаю ваше внимание, что  строки 5 и 6 одинаковые и дают одинаковый хеш.

Всё просто, и довольно надёжно. 

Авось прокатит. Уповать на случайность - это ненормальное решение.
 
Dmitry Fedoseev:
Авось прокатит. Уповать на случайность - это ненормальное решение.

И вы не хотите уповать на случайность на форексе)))?!

Тогда что вы вообще хотите от рынка? Без риска тут вообще никак.

 
Aliaksandr Hryshyn:

И вы не хотите уповать на случайность на форексе)))?!

Тогда что вы вообще хотите от рынка? Без риска тут вообще никак.

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

Риск это риска, а  глупость это глупость. 

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