Форум » Консультации по программированию » Я в шоке! Подскажите. » Ответить

Я в шоке! Подскажите.

Sergey: Всем привет! Я в шоке! Выпал из рынка на 3,5 месяца, а тут такие перемены. Игорь подскажи, где можно ознакомиться с изменениями в MQL4? Хотел перенести все данные на новый комп, но некоторые индикаторы после компиляции перестают работать. Вот один из них. http://gfile.ru/a8cCP Хотя не перекомпилированные файлы работают. Компиляция ошибок в коде не выявляет. Но при отладке выдается ошибка формирования массива стр.67. Но в чем ошибка не пойму. Буду благодарен, если найдешь время исправить.

Ответов - 203, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 All

Genry: Sergey пишет: Остался вопрос: Чтобы осознать не бесполезность своих действий, подскажите где хранятся глобальные переменные? Я к примеру не знаю, думаю и большинство трейдеров тоже. Сергей, список появится при нажатии в терминале клавиши F3, его можно менять и удалять. Могу добавить, что время тестового периода явно прописанное в программе, по крайней мере в старых билдах интерпретатора, видно при открытии файла в редакторе (типа FAR, например). Т.е получив сообщение о том, что тестовый период истек - нажимается F4, поиск по дате, а потом год меняется с 2014 на 3014... ву а ля. Поэтому после компиляции имел смысл обработать код программой защиты от декомпиляции - программой типа ex4_protector.

Sergey: Хреново! Идея была неплохой, как мне казалось. Развалилась простым нажатием F3. У кого есть идеи по-лучше?

Genry: Sergey пишет: Хреново! Идея была неплохой, как мне казалось. Развалилась простым нажатием F3. У кого есть идеи по-лучше? Перечитай мой пост выше - я его дополнил. Достаточно эффективно - перенос части кода в dll. Хотя в защите, как и во всем, лучше соизмерять затраты на защиту с доходами от продажи.


Sergey: А если в коде прописать создание отдельного файла хранящего информацию о времени. И затем, при необходимости, вызывать эти данные. Такое возможно? Если да, то где об этом почитать?

Genry: Sergey пишет: А если в коде прописать создание отдельного файла хранящего информацию о времени. И затем, при необходимости, вызывать эти данные. Такое возможно? Если да, то где об этом почитать? тогда надо будет шифровать данные в файле или подписывать, иначе их можно просто поменять. А чем плох вариант Игоря? Или есть желание менять только файл лицензии с демо на коммерческий без замены самой программы?

Sergey: Genry пишет: А чем плох вариант Игоря? Этот вариант я знаю и применяю. Но он больше подходит под отдельного пользователя. А хочется не заморачиваться под каждого. Дать возможность пользователям скачивать, но автоматически ограничивать время с начала первого запуска.

Genry: Sergey пишет: Если да, то где об этом почитать? Например здесь: Методы защиты и взлома программ для торговли на Форекс. Если все элементы секрета находятся у злоумышленника - то взлом это вопрос времени, добавит трудностей взломщику перенос части кода в dll. Наиболее стойкая защита - это когда разделен и секрет, и алгоритм работы программы. Здесь повторюсь: надо соизмерять собственные затраты на защиту (и неудобство от ее применения - например, пользователь не понимая значения файла с датой его случайно удалил, получил сбой в торговле большими деньгами и выкатил претензию) с доходами от продажи.

Genry: Sergey пишет: А хочется не заморачиваться под каждого. Дать возможность пользователям скачивать, но автоматически ограничивать время с начала первого запуска. Сергей, это путь сопряжен с различными проблемами. Отследить внешний файл и удалить его трудностей не составит, и снова наступил 1 запуск. Лучше сделать полноценное Демо для какого-то экзотического инструмента, а остальные валюты - в коммерческой версии. Короче дать полное представление о возможностях работы и ограничить по функционалу. Например история берется только за несколько дней назад, а не вся. Или работать будет только на Демо-счете или закрыт прогон в тестере. Вот и будут две версии, одна - демо доступная всем и всегда, вторая - коммерческая, которая берется с закрытого раздела сайта после оплаты или еще как-нибудь

Sergey: Genry пишет: Сергей, это путь сопряжен с различными проблемами. Отследить внешний файл и удалить его трудностей не составит Чисто с психологической точки зрения, не многие поймут, что ограничение можно снять удалив файл или гл.переменную. Именно потому, что это может быть так просто. Одни по незнанию, другие от большого знания. Genry пишет: Лучше сделать полноценное Демо для какого-то экзотического инструмента, а остальные валюты - в коммерческой версии. Короче дать полное представление о возможностях работы и ограничить по функционалу. Например история берется только за несколько дней назад, а не вся. Или работать будет только на Демо-счете или закрыт прогон в тестере. Этот стандартный подход хотелось немного дополнить. А что касается 1% спецов, то любая защита для них не проблема. И вряд ли они могут заинтересоваться моими продуктами.

Scriptong: Наиболее оптимальный способ демо-версии для советников - это пожизненная демо-версия для демо-счетов. В MQL4 тип счета определяется так: ENUM_ACCOUNT_TRADE_MODE accountType = (ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE); switch (accountType) { case ACCOUNT_TRADE_MODE_DEMO: Print("Демо-счет"); break; case ACCOUNT_TRADE_MODE_CONTEST: Print("Конкурсный счет"); break; case ACCOUNT_TRADE_MODE_REAL: Print("Реальный счет"); break; } Для индикаторов и скриптов придется придумывать что-то другое. Как вариант, если есть свой сайт, то можно проверять лицензию через WebRequest. Если же распространение не через сайт, то вполне достаточно того варианта, который я предложил в своем предыдущем посте. Перекомпиляция программы перед отправкой - секундное дело, больше времени потратите на отправку письма.

Sergey: Игорь пишет: Наиболее оптимальный способ демо-версии для советников - это пожизненная демо-версия для демо-счетов. Идея была в защите демо-версии от копировальщиков ордеров. Так или иначе, но Спасибо Всем! Есть вещи о которых не знал, теперь картина немного прояснилась.

Genry: Sergey пишет: Так или иначе, но Спасибо Всем! Есть вещи о которых не знал, теперь картина немного прояснилась.

Scriptong: Sergey пишет: Идея была в защите демо-версии от копировальщиков ордеров. Против лома нет приема, т. е. универсального способа. Поэтому потрудитесь защищать каждую версию индивидуально. В этом нет ничего сложного. Не думаю, что поток запросов на демо-версии больше, чем десяток в день (это огромная цифра!). А для каждого из этих запросов в день у Вас будет одна версия. Новый день - следующая версия. Скомпилили - раскидали по запросам.

Sergey: Столкнулся с такой проблемой. При выводе StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL)*Point; // текущий уровень стопов через Alert StopLevel=0.0 Однако в реалии брокер не дает устанавливать уровень столосс ближе 30 pip на пятизнаке.(Пробовал в ручную перетащить не получилось.) При этом TP перетащить на Ask для Buy ордеров можно. Получается, что функция проверки расчета уровней SL и TP и корректной установки или модификации ордеров, использующие StopLevel в качестве минимального уровня - бутафория. Как выяснить действительный уровень? И почему они разные для SL и TP. Даже с учетом спреда ни чего не стыкуется. Спред всего 10-15 pip.

Scriptong: Sergey пишет: Столкнулся с такой проблемой. При выводе StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL)*Point; // текущий уровень стопов через Alert StopLevel=0.0 Однако в реалии брокер не дает устанавливать уровень столосс ближе 30 pip на пятизнаке. Этим грешит Alpari. Возможно, есть другие брокеры. Стоплевел у них завуалированный - устанавливать стопы и отложки не ближе, чем 2 спреда. В своей библиотеке пришлось извратится следующим образом: m_symbolInfo.digits = (int) SymbolInfoInteger(m_symbol, SYMBOL_DIGITS); m_symbolInfo.point = SymbolInfoDouble(m_symbol, SYMBOL_POINT); m_symbolInfo.tickSize = SymbolInfoDouble(m_symbol, SYMBOL_TRADE_TICK_SIZE); m_symbolInfo.ask = SymbolInfoDouble(m_symbol, SYMBOL_ASK); m_symbolInfo.bid = SymbolInfoDouble(m_symbol, SYMBOL_BID); m_symbolInfo.spread = m_symbolInfo.ask - m_symbolInfo.bid; m_symbolInfo.freezeLevel = NormalizeDouble(MarketInfo(m_symbol, MODE_FREEZELEVEL) * m_symbolInfo.point, m_symbolInfo.digits); m_symbolInfo.stopLevel = MarketInfo(m_symbol, MODE_STOPLEVEL) * m_symbolInfo.point; // Коррекция Stop Level ля тех ДЦ, в которых его вроде бы нет (но на самом деле есть - скрытый) и для тех ДЦ, у которых есть. Для последних увеличивается на тик для повышения надежности if (m_symbolInfo.stopLevel == 0) { if (!m_isECN) m_symbolInfo.stopLevel = NormalizeDouble(2 * m_symbolInfo.spread, m_symbolInfo.digits); } else m_symbolInfo.stopLevel = NormalizeDouble(m_symbolInfo.stopLevel + m_symbolInfo.tickSize, m_symbolInfo.digits); Здесь m_isECN указывает программе, что нулевому стоплевелу можно верить. В противном случае используется вариант для Альпари.



полная версия страницы