Всем привет друзья.
пишу робота под америку и столкнулся вот с такой проблемой:
писал всегда на СИ подобном языке )) МКЛ это усеченный до нельзя СИ. и тем не менее все хорошо писалось..
сейчас же пишу под нинзю, а в нинзе си шарп. и вот с такой задачей уже долгое время не могу справиться:
как писал на МКЛ:
создаю структуру:
//--------------------------------------------------------------------------------------------
struct sDataBar { ... };
//--------------------------------------------------------------------------------------------
создаю 2 экземпляра стуктуры:
sDataBar OsnDataBar; // Структура с ДАННЫМИ на баре для основного ТФ
sDataBar HlpDataBar; // Структура с ДАННЫМИ на баре для вспомогательного ТФ
далее в теле программы:
передаю в цикле на каждый бар обе структуры
MathDataForBar(OsnDataBar, i, 1);
MathDataForBar(HlpDataBar, i, 2);
в самой функции принимаю структуру так:
void MathDataForBar(sDataBar &DataBar,int i, int variant)
{
...
//делаю с данными шпили вили ))
...
}
ключевая фишка в СИ это передача по ссылке &
я просто передаю в функцию указатель на необходимую мне структуру, и уже непосредственно в функции работаю с той структурой — ссылку на которую передал.
но блин не тут то было в СИ ШАРПЕ (( заветная & нифига не работает ((
а читать пруфы не могу ибо туп (( мне надо на пальцах ((
люди добрые программисты, если вы есть, и если вы можете для чайника на пальцах описать как это воплотить в шарпе — буду крайне признателен и благодарен!
Если вам нужно менять структуру в методе, передавая её как параметр, то есть ключевые слова ref и out.
Передача по ссылке применяется только для того, чтобы изменить в методе и получить это изменение снаружи.
Кроме того, в C# есть разница между Value и Reference type сущностями.
Вторые всегда передаются по ссылке, поэтому & не требуется.
Но Struct — это value type.
Спасибо ОГРОМНОЕ!!!
public struct Book
{
public string Name;
}
Book b;
protected override void OnBarUpdate()
{
b.Name = «b»; Print(b.Name);
func(ref b, «BookName»); Print(b.Name);
}
public void func(ref Book Tek, string txt)
{
Tek.Name = txt;
}
и все работает
выводит:
b
BookName
вот этого
вообще не понял ))
Тихая Гавань, тогда определяйте метод так
А вызывайте его так
Для внеклассного чтения
docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/ref
docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/out
stackoverflow.com/questions/1516876/when-to-use-in-vs-ref-vs-out
доки не могу читать… ибо туп ))
Тихая Гавань, если программировать интересно, то разбирайтесь и задавайте вопросы.
Со временем мозг привыкнет к докам.
Если нужен качественный софт, то ищите разработчика.
Он вас ещё и поднатаскает.
это вы зря предложили )) я же замучаю вопросами ))
по поводу качественного софта — согласен, но до него еще достаточно далеко, необходимо все еще формализовать для робота.
ибо то что видно глазу не совсем понятно как объяснить программе.
на данный момент я столкнулся с проблемой как научить программу думать «примерно», тоесть обобщать некоторые неточности, и округлять понятия формаций.
блин я даже не знаю как это по научному сказать))
в общем есть некая формация которая по сути видна глазу, но есть ДОПУСКИ и обобщения — +-несколько тиков тут, несколько тиков там, мозг человека допускает и пропускает как сформировавшийся паттерн.
а вот как программу научить «думать» не четко алгоритмически, а с допусками на некоторый +- придется попотеть… ))
Тихая Гавань, пожалуйста.
Касательно формализации я вас прекрасно понимаю.
Потому как почти каждый день сталкиваюсь с подобным.
Не так много людей, которые способны уложить стратегию в логику.
Но и сильно заморачиваться тоже не стоит.
Довольно часто случается так, что некоторыми элементами(не формализуемыми) можно пожертвовать без особого урона для стратегии.
если она есть — то можно входить в рынок, если отсутствует то ничего не делаем.
так вот сама проторговка зачастую выглядит иначе чем в предыдущийраз..
то чуть не дойдет до уровня, то чуть залезет на него, причем некоторые бары выбиваются из строя, какойто посредине может выскочить из диаппазона проторговки, и все, робот считает что тут нет никакой формации, а она как тот суслик — ЕСТЬ ))
Тихая Гавань, а уровни кто строит ?
Человек или программа ?
весь мой «затык» это формализовать поведение цены около автоматически вычисленного уровня.
вопрос в ДОПУСКАХ и ОБОБЩЕНИЯХ стоит очень насущно.
очень часто бывает так, что прописывая допуск в каком то математическом выражении — на выходе получаешь отказ рассматривать ситуацию как торговый паттерн всеголишь из за того что допуск превышен всеголишь на ОДИН ТИК
да и не хочу время тратить, своих идей море в голове да времени и ума нет чтобы запрогать ))
учите самостоятельно МКЛ — он достаточно легкий
ANt0sh, есть такое дело.
Хороший программист с человеческим языком — это золото.
А со знанием трейдинга вообще алмаз.
там море примеров, море нубских вопросов и ответов ))
А можно ТСЛаб освоить, если есть хоть какое-то знание информатики школьного уровня. Если в Лабе получится — любой программист порадуется возможности переписать на MQL и сделает это за 1 день.
Только вот не всё простое в ручном трейдинге
так же просто при объяснении роботу…
самое простое это заявки и сделки, которые так и просятся объединить. создаёте базовый класс с общими свойствами и функциями от него наследуете классы ордер и трейд, а дальше уже сам код подскажет как с этим добром жить :)
я по природе своей тугодум, мне крайне сложно читать теорию если я сразу же не вижу как это может быть воплощено на практике. причем голый код меня не впечатлит, нужен переводчик с кода на человеческий язык… пока таких книжек не придумали, а потому я иду от обратного — не изучаю теорию и потом практикую, а ставлю практическую задачу и копаюсь в теории в поисках что поможет для ее решения — путь гораздо более трудо и ресурсоемкий, однако я только так и могу что то изучить — через непосредственную практику.
в программировании вообще ничего сложного нет, музыку написать или картину в разы сложней.
не знаю как люди умудряются учиться по книгам, обычно достаточно справочника по функциям. в книгах нужно опыт перенимать: почему применялся такой то подход или алгоритм, а на начальном этапе это лишнее.
разбиваешь проект на модули, эти модули на задачи по одной делаешь. а после завершения на этапе оптимизации можно и книжки почитать, а когда наберетесь опыта будет проще выбрать правильный способ ещё на первом этапе.
и вообще новичкам я бы сейчас рекомендовал, что то попроще чем шарп, он слишком гибкий. если софт с gui то я бы выбрал angular.
Тихая Гавань, классы понадобятся, когда будете реализовывать более сложные и функциональные сущности.
Содержащие/ссылающиеся на другие классы.
я честно не совсем понимаю о чем вы, но постараюсь перевести для себя таким образом:
пока я научился использовать структуры дабы избежать повторяющегося кода.
у меня есть структура и есть методы в отдельной функции.
я передаю структуру в функцию и сторонние методы работают с данными и результат записывают в структуру, наверняка это не совсем правильно, я не знаю ))
скорее всего было бы правильней создать класс, и в него передать данные, чтобы в самом классе их обработать и записать результаты.
может быть это и есть правильно, но чесс слово я бы так и поступил, если бы знал как в класс передать массив истории котировок.
причем у меня мультитаймфреймовая система, соответственно необходимо передавать разные данные, а этого я пока не умею делать…
в русскоязычном сегменте поддержки Нинзи — все идет лишь — заплати денег и мы тебе напишем, а англоязычный сегмент поддержки не доступен по причине капитального баранизма в английском языке ))
PS от слова СУЩНОСТИ меня сразу бросает в легкую панику )) ибо последний раз когда мне попадалось это слово — это когда читал Блаватскую ))
Тихая Гавань, примерно так.
Класс в котором набор свойств и методов.
А почему выбор пал на ниндзю ?
IB предоставляет хорошие условия, как по комиссиям, так и по спектру рынков ?
API достаточно стройный, функциональный и гибкий.
вы же понимаете мой уровень )) я такого ни в жизть не напишу ))
к томуже мне совершенно не нравится тех поддержка в IB, зимой они меня можно сказать обманули на 400 долларов, потом признали свою ошибку, но деньги не вернули под предлогом — САМ ДУРАК.
в нинзе я хорошо знаком с Ланой Орловской, на мой взгляд это самая лучшая тех поддержка вообще во всем мире среди вообще ВСЕХ брокеров!
Тихая Гавань, API у них, как и везде.
Подключаешься, посылаешь команды, получаешь результат.
Он менее интегрирован с визуальной частью терминала, чем Ninja, но это плюс, а не минус.
Потому как лишних зависимостей нет, а значит и потенциальных проблем.
Для контроля работы робота есть масса других вариантов.
От логов до таблиц в программе(графиков при необходимости).
Это не сложно.
А по комиссиям кто выгоднее IB или Ninja ?
так как необходим не просто код робота, но и оболочка.
с нинзей проще — в качестве оболочки выступает сама нинзя ))
комиссии в принципе одинаковы что там что там…
Тихая Гавань, ну ок.
В IB я значительно сильнее, чем в Ninja.
Хотя при необходимости разобраться не проблема.
Принципы везде едины.
Спрашивайте в случае чего.
Алексей Васильев, это проблеск параллельной реальности.
Исключение так сказать.
а зачем нагромождать?
Тихая Гавань, если нужна скорость, то имеет смысл сбивать всё в кучу, уменьшая количество команд и переходов.
Если нет, то гораздо ценнее модульная структура программы с понятными, взаимозаменяемыми элементами.
Т.е. гибкость.
Тихая Гавань, вот и я о том же.
HFT — это вообще жуткий, дорогой головняк.