Очарованый magic

 

... и разочарование от применения...

:(((

Написал простецкую функцию для генерации магика от имени символа.

int OcharMag(string s)
{ string och, txt; int char; 
for(int i=0; i<StringLen(s); i++)
{och=StringGetChar(s,i); txt=txt+och;}
char=StrToInteger(txt);
return(char);
}

1. Ошибка номер раз:

- предполагал что StrToInteger() тупо переводит "12345" в 12345

Да! переводит, но... докуда, вот вопрос... и например 698582858368

уже показывает фигушки... в данном случае это: -1496810880

*

1.1. Что делается...

EURUSD,Daily: Alert: txt: 698582858368

// сформированое из EURUSD "текстовое" число
EURUSD,Daily: Alert: car: :-1496810880

// перевод строки в целые числа StrToInteger()
EURUSD,Daily: Alert: stmag: -1496810880

// присвоеный и считаный магик у позиции...

*

2. Номер два.

В едиторе нет проверки магика на валидность, что позволит ошибиться

и получать магик неведомого числа... в качестве пробы ставил:

16384012345678901234567890123456789001234567890123456789016384012345678901234567890123456789001234567890123456789

едитор не ругнулся, в ответ получил это: 1628012821

Откуда оно взялось так и не нашел...

Судя по вернутому числу магик имеет максимум в 10 знаков.

 

Магик ограничен значением, а не количесивом знаков. Максимальное значение равно константе EMPTY_VALUE. Магик лучше явно задавать, чтобы была совместимость с другими советниками. Если вычислять магик, то неизвестно полученное значение и есть вероятность накладки с каким-нибудь другим работающем в терминале советником.

 
int MagicfromSymbol() // Генирит Magicnumber для каждого символа и ТФ
{  
   int MagicNumber=0;  
   for (int i=0; i<5; i++) 
   {  
      MagicNumber=MagicNumber*3+StringGetChar(Symbol(),i)+5;  
   }  
   MagicNumber=MagicNumber*3+Period();  
   return(MagicNumber);  
}
 
kombat писал(а) >>

- предполагал что StrToInteger() тупо переводит "12345" в 12345

Да. Только вы сначала преобразуете каждую букву в ее код, поэтому такой результат.

 
Figar0 писал(а) >>

Что-то есть сомнения. Больше четырех буквочек в int никак не получится загнать, еще таймфрейм.

 
Integer писал(а) >>

Магик ограничен значением, а не количесивом знаков. Максимальное значение равно константе EMPTY_VALUE. Магик лучше явно задавать, чтобы была совместимость с другими советниками. Если вычислять магик, то неизвестно полученное значение и есть вероятность накладки с каким-нибудь другим работающем в терминале советником.

то бишь 2147483647

ну да, значение... верно...

но и по количеству знаков не ошибся... ;)))

*

Дык вот и нежелательны эти нетзвестнополученыекак магики,

ибо не только с вычислениями можно ошибиться, хотя и поддаётся

некой проверке: маг>2147483647 error!, но и ручному выставлению.

Ищи потом пока не догадаешся проверить количество знаков магика...

2147483647 и 21474836147

 
Integer писал(а) >>

Что-то есть сомнения. Больше четырех буквочек в int никак не получится загнать, еще таймфрейм.

Да я и сам не проверял, как-то написал на скору руку....) Но люблю навешать экспертов как собак, и разные пары и разные ТФ, и ни разу проблем не возникало... Что еще требуется?)

Дмитрий, может напишите пограммотней нам на радость?

 
Integer писал(а) >>

Да. Только вы сначала преобразуете каждую букву в ее код, поэтому такой результат.

Да, об этом и написано выше:

EURUSD,Daily: Alert: txt: 698582858368

// сформированое из EURUSD "текстовое" число

*

Ранее с этой функцией плотно не работал, просто знал о ней,

и предполагал что будет хорошим подспорьем при обработке например новостей

или там публикаций разных уровней Акселя-мокселя... ;)))

А тут копнул разок в попутной теме, и нате нам...

Видимо результат на выходе тоже ограничен EMPTY_VALUE

а всё что сверху и выводит мусор... судя по отрицаловке.

*

Figar0, спасиб конечно, но задача иная и проста как шесть буков.

Создать магика из имени символа, по возможность и обратно...

Проблем с простым применением магика, например 123 или там 147852 нету!!!

как впрочем и с более простым автосозданием...

 
Figar0 писал(а) >>

Да я и сам не проверял, как-то написал на скору руку....) Но люблю навешать экспертов как собак, и разные пары и разные ТФ, и ни разу проблем не возникало... Что еще требуется?)

Дмитрий, может напишите пограммотней нам на радость?

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

 
Integer писал(а) >>

Миссия не выполнима, ...

Теперь это выяснено... :)))

Хотя идея была неплохА.

Ить не токма строку в цифирь переводить имя символа,

но и другие, например для "новостных экспертов".

*

Обратное преобразование магика предполагалось на основе

добавки лидирующих нулей к текстовому числу...

= 0
...
! = 33
...
я = 255

Соотв: 000, 033,255

*

Но и тут засада...

Если переводить в цифру, то на первом знаке числа по идее должно

быть обрезано незначащие первые нолики...

т.е. текст 015025100 в цифре получится 15025100

 
kombat >>:

Написал простецкую функцию для генерации магика от имени символа.

В генерации магика из имени символа смысла нет вообще. Символ ордера можно проверять явно.

Магик должен идентифицировать именно эксперта, и только для одновременной работы нескольких копий эксперта на одном символе.


Для новостных экспертов можно придумать свою систему генерации магиков. Например, использовать время выхода новости (ГММДДЧЧММ) - 901130138. И извлечь время из магика тоже не составит труда.

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