Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пойду попкорном запасаться!
Во, не хотите поработать?
Немного... На благо сообщества?
Во, не хотите поработать?
Немного... На благо сообщества?
Мартышкин труд.
Спасибо, понятно.
Добавлено
Только тогда не понятны Ваши "заботы" о новичках и пр. ...
Извините, конечно... что обратился.
Добавлено
И... аккуратнее с попкорном, не подавитесь, не дай боже...
Количество байтов посчитайте в магике и в том, что вы в него будет пытаться впихнуть. В любом случае проблема потери ордера при перезапуске эксперта остается.
Забавно так - когда не понимаешь как что-то работает, кажется оно обладает магической силой. Да?
Не остаётся, магик жёстко привязывается к символу/таймфрейму/имени эксперта/параметрам(кому что надо). Это означает, что используя тот же символ/таймфрейм/..... будет генериться один и тот же магик.
Не влезет это все в ulong.
Даже если бы влезло, это бы не решало проблему двух экземпляров одного эксперта на одном символе и таймфрейме. Еще раз повторю - это глупость.
Всё хорошо, когда мы НЕ хотим использовать несколько магиков в одном советнике, тогда просто
Но, при использовании диаппозона магиков (н-р для нескольких отложенных ордеров),
приходится "кастрировать" старшие 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 байт.
Не влезет это все в ulong.
Даже если бы влезло, это бы не решало проблему двух экземпляров одного эксперта на одном символе и таймфрейме. Еще раз повторю - это глупость.
Да, не влезет. Но проблему решает на 99.99999% и выше.
Вот реальный тест, который сами можете повторить:
Например, составляем такие строки для каждого сочетания эксперта, инструмента и тайфрейма:
- EURUSD_M1_MyProfitExpert
- EURUSD_M2_MyProfitExpert
- EURUSD_M3_MyProfitExpert
- EURUSD_H1_MyProfitExpert
- EURUSD_D1_MyProfitExpert
- 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 одинаковые и дают одинаковый хеш.
Всё просто, и довольно надёжно.
Да, не влезет. Но проблему решает на 99.99999% и выше.
Вот реальный тест, который сами можете повторить:
Например, составляем такие строки для каждого сочетания эксперта, инструмента и тайфрейма:
- EURUSD_M1_MyProfitExpert
- EURUSD_M2_MyProfitExpert
- EURUSD_M3_MyProfitExpert
- EURUSD_H1_MyProfitExpert
- EURUSD_D1_MyProfitExpert
- 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 одинаковые и дают одинаковый хеш.
Всё просто, и довольно надёжно.
Авось прокатит. Уповать на случайность - это ненормальное решение.
И вы не хотите уповать на случайность на форексе)))?!
Тогда что вы вообще хотите от рынка? Без риска тут вообще никак.
И вы не хотите уповать на случайность на форексе)))?!
Тогда что вы вообще хотите от рынка? Без риска тут вообще никак.
И что теперь? Дверь в квартиру не закрывать? Дорогу на красный свет переходить? Хранить деньги в почтовом ящике? Божий дар с яичницей не путайте.
Риск это риска, а глупость это глупость.