![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
И что теперь? Дверь в квартиру не закрывать? Дорогу на красный свет переходить? Божий дар с яичницей не путайте.
Это оправданный риск, который на самом деле уменьшается. Потому что человек быстрее ошибётся вручную назначать магики. Это лучший вариант. Даже лучше чем сохранение в файл, файл может быть потерян из-за ручного переноса или сбоя системы, работы антивируса.
Так что риск уменьшается, а не наоборот.
Это оправданный риск, который на самом деле уменьшается. Потому что человек быстрее ошибётся вручную назначать магики. Это лучший вариант. Даже лучше чем сохранение в файл, файл может быть потерян из-за ручного переноса или сбоя системы, работы антивируса.
Так что риск уменьшается, а не наоборот.
Вот это как раз глупый риск, и вовсе не оправданный. Если вы этого не понимаете сами, то вам можно только посочувствовать. Сочувствую.
Задача решается четко и однозначно, но им этого не надо, в вот абы кабы - самое то.
Вот это как раз глупый риск, и вовсе не оправданный. Если вы этого не понимаете сами, то вам можно только посочувствовать. Сочувствую.
А обосновать можете?
Могу, но не буду.
А если бы разработчики рассказали, как они создают ID для чартов, то
может быть, и искуственный сдвиг на 2 байта влево не влиял бы на новый magic
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
Добавлено
Ну, и на один, то же было бы хорошо. :)
Добавлено
Лог, что выше с демо, а это с реала
А это с другого реала
Добавлено
Немного "причесал"
//| 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?
Потому что 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
Кстати, если коиу-то достатосно одновременно 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);
}
//+------------------------------------------------------------------+