Как создать торгового робота своими руками? Robot-Scalper

С чего начать алготрейдинг. Написание роботов с нуля для торговли. Обучение Торговому роботу на python с нуля. Алготрейдинг :

Моя первая мысль о трейдинге появилась на 4 курсе экономического факультета, когда понял, что необходимо иметь пассивный доход. Начинал со вкладов в банке и паевых инвестиционных фондов (ПИФов), затем судьба забросила меня в IT. Я очень увлекся этим, поступил в технический ВУЗ и поставил цель совместить информационные технологии и биржевую торговлю, так как это интересно, перспективно и высокооплачиваемо.

Я расскажу о том, с чего начать освоение алгоритмического трейдинга не имея опыта в торговле и программировании. Точнее это будет серия статей разбитых по этапам с подробным описанием процесса обучения и рекомендациями. Программа обучения подойдет не только новичкам, но и опытным программистам, т.к. она предполагает еще и освоение биржевой торговли. Также, она может быть интересна трейдерам, которые получат необходимые знания в программировании. Каждый этап составлен так, что он не отнимет много времени, возможно совмещение с работой или учебой.

Фондовый рынок — это высокотехнологичная отрасль, которая активно развивается, что делает работу в этой сфере очень привлекательной для IT — специалистов. Мировой валютный рынок, где ежедневный объём торгов оценивается в $5,1 трлн, становится всё менее зависимым от человека. Так, 94 руководителя крупнейших компаний США и Канады по торговым и валютным операциям заявили о намерении перейти на автоматизацию большей части своих операций с иностранной валютой в течение 2018—2020 годов. Развитие автоматизированной торговли на сегодняшний день уже стало необратимым процессом на мировом валютном, фондовом рынке и рынке деривативов.

Пока сложно сказать, что для успешной торговли необходимо обязательно создавать торгового робота, можно торговать и вручную, используя автоматизацию для поиска активов и точек входа, или контроля открытых позиций. Но доля роботов в объеме торгов США в 2005 году перевалившая за 50% говорит об их востребованности среди трейдеров.

Переходим к плану обучения.

В качестве языка программирования для реализации стратегий будет использован Python. Данный язык кроссплатформенный (что для сторонников Linux и macOS является обязательным атрибутом), прост в освоении (по своему опыту изучения Java, могу сказать что Python легче), широко распространен (применяется в Big Data, веб-разработке, автоматизации тестирования, науке, системном администрировании, для прототипирования квантовых моделей в хедж-фондах и «квантовых» трейдерских подразделений в банках и др.)

Подключаем моторы

Простейшим способом подключения моторов к Raspberry Pi будет использование готового контроллера, выбор которого зависит только от предполагаемой мощности моторов. Я выбрал с запасом на базе L298N. Строка для поиска на aliexpress «L298N motor driver board», обойдется Вам примерно в $3 с доставкой.

Также, для питания raspberry, Вам понадобится как минимум один понижающий преобразователь напряжения. Я взял на базе LM2596. Строка для поиска на aliexpress «DC-DC LM2596», обойдется Вам примерно в $1 с доставкой.

При таком подключении, для чтобы заставить машину выполнить одну из наших команд, достаточно выставить высокий уровень на соответствующем GPIO.

Этап 1.1. Изучение основ Python для торгового робота

Обучение по приложению от SoloLearn.

Первым делом будет полезным установить приложение SoloLearn на смартфон. Оно будет особенно полезно тем, кто ранее не программировал. Приложение обучит самым основам языка. Неоспоримое преимущество, что им можно пользоваться в любое время и в любом месте.

Прохождение курса на Stepik.org «Программирование на Python»

Отлично подойдет для новичков, интерактивен, изложение ведется плавно от простого к сложному, достаточно интересные задачи, можно смотреть комментарии от пользователей, что очень полезно если не знаешь решения. Курс бесплатный.

Совет: Некоторые условия задач описаны очень непонятно, в связи с этим сразу смотрите в комментарии, там найдете разъяснение задачи.

В день рекомендую уделять этому ресурсу 1 час.

Ссылка на курс: https://stepik.org/course/67/syllabus

Решение задач в Pythontutor.ru

Для закрепления знаний полезным будет ресурс Pythontutor. Это интерактивный учебник по Python, с большим количеством примеров и хорошими задачами. Интересная особенность в том, что после решения задачи можно посмотреть варианты решений от разработчиков и других участников.

Ежедневно рекомендую решать хотя бы по одной задаче.

Ссылка на учебник: https://pythontutor.ru/

Книги: Swaroop — «A Byte of Python»(Укус питона)

«Укус питона» это бесплатная книга по Python, отличается минимальным количеством «воды» и большим количеством примеров. Содержит всего 150 страниц, при этом отлично показывает возможности языка.

Клуб инвесторов и трейдеров Нью-Йоркской фондовой биржи

Совет: При чтении книг по программированию необходимо запускать пример кода у себя в IDE для лучшего усвоения материала.

В день достаточно читать по 5-10 страниц. В качестве IDE рекомендую бесплатный PyCharm Community.

По желанию: Видео курсы по Python на YouTube

Серия видеоуроков средней продолжительностью в 10 минут, состоящая из 21 эпизода поможет заполнить пробелы в полученных ранее знаниях.

Для знающих английский очень хорошо будет просмотеть курс Learn Python — Full Course for Beginners. В общей сложности материал состоит из четырех с половиной часов обучающего видео.

Совет: Если вы еще не знаете английского, то обязательно начинайте его изучать, т.к. подавляющее большинство необходимых материалов по алготрейдингу будут доступны именно на нем. Впрочем, думаю я не открыл здесь Америку, большинство итак это знают, скорее просто хотел напомнить.

В интернете множество методик и материалов для изучения английского, каждый сможет подобрать подходящее для себя, но не откажусь порекомендовать книгу по грамматике Раймонда Мерфи — Essential Grammar in Use. Написана полностью на английском, но предельно простым языком и со множеством иллюстраций.

Концепция

Концептуально фреймворк представляет собой набор поддерживаемых пользователем модулей реализующих различные функции робототехники. При работе Bubot строит сеть из процессов, которые могут асинхронно получать и отправлять сообщения между собой. Так же вы можете построить сеть из роботов, которые будут общаться между собой.

Сеть процессов строится на базе стандартного Python модуля multiprocessing. Система обмена сообщениями и разделяемая память реализованы при помощи Redis.

Каждый Bubot имеет встроенный веб-сервер веб-сервер Tornado, который позволяет контролировать состояние, управлять роботом, на ходу менять параметры (калибровать) робота, а также закладывается возможность обмена данными между роботами.

Bubot не является системой реального времени, хотя Bubot возможно интегрировать с кодом реального времени.

Этап 1.2. Основы биржевого дела

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

Изучение функционала Trader Workstation от Interactive Brokers:

Для этого вам будет необходимо открыть демо-счет.

Терминал TWS имеет отличный демо-режим, на котором доступен 1 000 000 виртуальных долларов и неограничен по времени. Его можно изучить вдоль и поперек. Но для начала необходимо научиться просто ориентироваться в интерфейсе, уметь искать, выбирать, покупать, продавать активы.

Вот несколько обучающих видеороликов:

  • Горячие Клавиши,
  • Работа с графиками,
  • Индикаторы,
  • Настройка стакана,
  • Как выставлять ордер,
  • Как совершать сделки,
  • Работа с облигациями,
  • Watchlists & scanners.

Interactive brokers — обзор американского брокера номер 1 (интерактив брокер )

Еще стоит потратить время на самостоятельное изучение. Проделайте лично то, что вы посмотрели в видео.

Чтение литературы: Элдер — «Трейдинг с доктором Элдером»

Рекомендую начать с этой книги. В ней автор традиционно много рассказывает о психологии торговли. Помимо этого описывает весь процесс трейдинга. Элдер хорош еще и потому, что он рассказывает о трейдинге во всех деталях, т.е. готовит к сложностям, с которыми необходимо будет столкнуться.

Рекомендую читать 15 страниц в день.

Совет: Если вы никогда не торговали и не знаете как работает биржа, настоятельно рекомендую прочитать первые 180 страниц книги Твардовского и Паршикова — «Секреты биржевой торговли». Чтобы понять, как в целом устроена биржа, виды приказов, кто такие брокеры, маркетмейкеры и т.д.

Автоматическая торговля

Выбрав торговую стратегию, мы можем полностью автоматизировать торговые операции. Чтобы ускорить процесс, мы используем данные с дискретностью 5 секунд, вместо 1 минуты, как было при тестировании. Автоматизировать торговлю можно с помощью одного достаточно компактного класса:

In [5]: class MomentumTrader(opy.Streamer): # 25 def __init__(self, momentum, *args, **kwargs): # 26 opy.Streamer.__init__(self, *args, **kwargs) # 27 self.ticks = 0 # 28 self.position = 0 # 29 self.df = pd.DataFrame() # 30 self.momentum = momentum # 31 self.units = 100000 # 32 def create_order(self, side, units): # 33 order = oanda.create_order(config[‘oanda’][‘account_id’], instrument=’EUR_USD’, units=units, side=side, ENGINE=’market’) # 34 print(‘\n’, order) # 35 def on_success(self, data): # 36 self.ticks += 1 # 37 # print(self.ticks, end=’, ‘) # appends the new tick data to the DataFrame object self.df = self.df.append(pd.DataFrame(data[‘tick’], index=[data[‘tick’][‘time’]])) # 38 # transforms the time information to a DatetimeIndex object self.df.index = pd.DatetimeIndex(self.df[‘time’]) # 39 # resamples the data set to a new, homogeneous interval dfr = self.df.resample(‘5s’).last() # 40 # calculates the log returns dfr[‘returns’] = np.log(dfr[‘ask’] / dfr[‘ask’].shift(1)) # 41 # derives the positioning according to the momentum strategy dfr[‘position’] = np.sign(dfr[‘returns’].rolling( self.momentum).mean()) # 42 if dfr[‘position’].ix[-1] == 1: # 43 # go long if self.position == 0: # 44 self.create_order(‘buy’, self.units) # 45 elif self.position == -1: # 46 self.create_order(‘buy’, self.units * 2) # 47 self.position = 1 # 48 elif dfr[‘position’].ix[-1] == -1: # 49 # go short if self.position == 0: # 50 self.create_order(‘sell’, self.units) # 51 elif self.position == 1: # 52 self.create_order(‘sell’, self.units * 2) # 53 self.position = -1 # 54 if self.ticks == 250: # 55 # close out the position if self.position == 1: # 56 self.create_order(‘sell’, self.units) # 57 elif self.position == -1: # 58 self.create_order(‘buy’, self.units) # 59 self.disconnect() # 60

Следующий фрагмент кода запускает класс MomentumTrader на выполнение. Расчет моментум-стратегии выполняется на основе интервалов по 12 наблюдений. Класс автоматически прекращает торговлю после получения 250 блоков данных. Это значение выбрано произвольно, чтобы быстро продемонстрировать работу класса MomentumTrader.

In [6]: mt = MomentumTrader(momentum=12, environment=’practice’, access_token=config[‘oanda’][‘access_token’]) mt.rates(account_id=config[‘oanda’][‘account_id’], instruments=[‘DE30_EUR’], ignore_heartbeat=True)

Вывод, представленный ниже, показывает отдельные торговые операции, выполняемые классом MomentumTrader, в процессе демонстрации:

{‘price’: 1.04858, ‘time’: ‘2016-12-15T10:29:31.000000Z’, ‘tradeReduced’: {}, ‘tradesClosed’: [], ‘tradeOpened’: {‘takeProfit’: 0, ‘id’: 10564874832, ‘trailingStop’: 0, ‘side’: ‘buy’, ‘stopLoss’: 0, ‘units’: 100000}, ‘instrument’: ‘EUR_USD’} {‘price’: 1.04805, ‘time’: ‘2016-12-15T10:29:46.000000Z’, ‘tradeReduced’: {}, ‘tradesClosed’: [{‘side’: ‘buy’, ‘id’: 10564874832, ‘units’: 100000}], ‘tradeOpened’: {‘takeProfit’: 0, ‘id’: 10564875194, ‘trailingStop’: 0, ‘side’: ‘sell’, ‘stopLoss’: 0, ‘units’: 100000}, ‘instrument’: ‘EUR_USD’} {‘price’: 1.04827, ‘time’: ‘2016-12-15T10:29:46.000000Z’, ‘tradeReduced’: {}, ‘tradesClosed’: [{‘side’: ‘sell’, ‘id’: 10564875194, ‘units’: 100000}], ‘tradeOpened’: {‘takeProfit’: 0, ‘id’: 10564875229, ‘trailingStop’: 0, ‘side’: ‘buy’, ‘stopLoss’: 0, ‘units’: 100000}, ‘instrument’: ‘EUR_USD’} {‘price’: 1.04806, ‘time’: ‘2016-12-15T10:30:08.000000Z’, ‘tradeReduced’: {}, ‘tradesClosed’: [{‘side’: ‘buy’, ‘id’: 10564875229, ‘units’: 100000}], ‘tradeOpened’: {‘takeProfit’: 0, ‘id’: 10564876308, ‘trailingStop’: 0, ‘side’: ‘sell’, ‘stopLoss’: 0, ‘units’: 100000}, ‘instrument’: ‘EUR_USD’} {‘price’: 1.04823, ‘time’: ‘2016-12-15T10:30:10.000000Z’, ‘tradeReduced’: {}, ‘tradesClosed’: [{‘side’: ‘sell’, ‘id’: 10564876308, ‘units’: 100000}], ‘tradeOpened’: {‘takeProfit’: 0, ‘id’: 10564876466, ‘trailingStop’: 0, ‘side’: ‘buy’, ‘stopLoss’: 0, ‘units’: 100000}, ‘instrument’: ‘EUR_USD’} {‘price’: 1.04809, ‘time’: ‘2016-12-15T10:32:27.000000Z’, ‘tradeReduced’: {}, ‘tradesClosed’: [{‘side’: ‘buy’, ‘id’: 10564876466, ‘units’: 100000}], ‘tradeOpened’: {}, ‘instrument’: ‘EUR_USD’}

На рисунке ниже показано приложение Oanda fxTrade Practice, где мы видим класс MomentumTrader в действии.

Все результаты, представленные в данной статье, получены с помощью демонстрационного аккаунта, в котором не используются настоящие деньги. Этот аккаунт является симулятором для пробной реализации алгоритмической торговли. Чтобы перейти к реальным операциям с реальными деньгами, необходимо настроить полноценный аккаунт Oanda, внести необходимые средства, и изменить параметры аккаунта в коде. Сам код изменять не нужно.

Реализуем веб интерфейс

Каждый робот может иметь неограниченное количество веб интерфейсов. В нашем случае, для управления роботом, нам достаточно одного – реализующего 4 кнопки, которые при нажатии будет давать команду, а при отжатии её отменять.

Пользовательские интерфейсы хранятся в каталоге ui. Каждая страница пользовательского интерфейса описывается в отдельном подкаталоге, и состоит как минимум из 2 файлов:

  • [Имя страницы].html — разметка страницы.
  • [Имя страницы].json — описание интерфейса. Каждая страница (сессия) для фреймворка является по сути отдельным сервисом, в данном файле содержится описание событий на которые данная страница подписана, а также сообщения которые она генерирует.
  • [Имя страницы].py — (не обязателен) может содержать серверную логику по обработке команд данного пользовательского интерфейса, в нашем случае не пригодится.

Давайте опять, для улучшения восприятия, ещё немного упростим. В приведенном ниже примере рассмотрим алгоритм одной кнопки вперед. Остальные можно сделать по аналогии.

Итак, создаем в каталоге ui подкаталог scout_easy и в нем два файла scout_easy.html и scout_easy.json следующего содержания (комментарии по тексту).

\ui\scout_easy\scout_easy.html

Обратите внимание на div id=console, если он присутствует, то в него фреймворк будет выводить все консольные сообщения, в т.ч. происходящие на стороне сервера ошибки кода.

bubot_socket.js — должен присутствовать на каждой странице ui, так как именно он отвечает за установку соединения с сервером и обмен сообщениями.

Соединение с сервером происходит через web socket, метод bubot_send_message([название сообщения], [параметры сообщения]) отвечает за передачу сообщений на сервер. На сервере при поступлении сообщения вызывается одноименный метод, которому передаются параметры сообщения. В нашем случае вызывается метод отправляющий запрос set_move_motor_power, имя сервиса получателя сообщения фреймворк берет из файла описания пользовательского интерфейса, названия этих сервисов определяется в заключительном разделе при описании робота.

\ui\scout_easy\scout_easy.json

{ «incoming_request»: { «console»: { «time»: {}, «message»: {} } }, «outgoing_request»: { «set_move_motor_power»: { «name»: «set_power», «buject»: «move_motor», «description»: «команда на установку мощности основного мотора», «param»: { «value»: { «description»: «мощность мотора в процентах, вперед > 0, назад 0, влево

Лучший бот для криптовалютных торгов

Отсутствует, так как каких-либо универсальных утилит, которые бы удовлетворяли потребности поголовно всех трейдеров не существует. Выше отмечалось, что каждое программное обеспечение пишется не только специально под конкретную криптобиржу, но и с учетом требований, выдвигаемых спекулянтом.

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

Боты для криптобиржи Binance

Роботы-советники условно делятся по организации функционала на настраиваемые и скриптовые софты, а также по особенностям применения – торговые или арбитражные. Более того, каждая утилита пишется, учитывая торговые предпочтения трейдеров и непосредственно под конкретную торговую платформу.

Криптобиржа Бинанс выбрана не случайно в качестве примера – крупнейшая централизованная площадка, лидер по ликвидности, листингу, имеет русскоязычный интерфейс и относительно небольшие комиссии, популярна в среде отечественных спекулянтов. Рассмотрим утилиты, которые чаще всего применяются на Binance подробней.

RevenueBot

Официальный сайт: https://app.revenuebot.io/

Определяющие особенности:

  • smart (умная) сетка ордеров;
  • идентификация исключительно благоприятных входов в торги;
  • бэк-тесты;
  • автоматическое переключение торговой связки.

Программа поддерживает несколько криптовалютных пар, позволяя спекулировать не только на Бинанс, но и на других биржах криптовалют. Дает статистику по циклам функционирования ботов, ордерам, прибыли, рефералам. Абонплата, равно как скрытые тарифные планы отсутствуют. Компания-разработчик взимает 20% от реальной прибыли трейдера – средства автоматически перечисляются с аккаунта спекулянта.

3Commas

Официальный сайт: https://3commas.io/

Один из самых многофункциональных роботизированных советников для Binance и еще более 20 торговых площадок. Характеристики:

  • доступен ручной трейдинг через smart-trade;
  • автоматизированная торговля может быть простой или сложной – для одной или нескольких пар;
  • применяются алгоритмы Short/Long;
  • купля/продажа цифровых активов оптимизирована – все в одном окне;
  • поддерживает графику и индикаторы популярного терминала TradingView;
  • предоставляет возможность копировать сделки других трейдеров.

Комиссия с прибыли отсутствует. Компания-разработчик берет абонплату, которая варьируется относительно выбранного тарифа от $14,5 до $49,5 в месяц. VIP-пакет можно бесплатно протестировать в течении 72 часов.

Cryptorg

Официальный сайт: https://cryptorg.net/

Это целый сервис по разработке и конфигурации ботов. Для комфортного трейдинга предусмотрен чат, Телеграмм-месседжи, прочие опции. Выгодные точки входа в торги определяют интеллектуальные стратегии на фундаменте результатов технического анализа.

Одновременно можно запустить огромное количество утилит – на все торговые пары, которые поддерживает Бинанс. Предоставляется возможность двухнедельного бесплатного тестирования. Затем взимается абонплата – $15/месяц. Она может увеличиваться, если трейдер захочет расширить лимит действующих софтов, воспользоваться фьючерсными ботами, получить доступ к другим торговым платформам.

HAASbot

Официальный сайт: https://www.haasonline.com/

Это набор опций для роботизированного трейдинга. Возможности:

  • локальное, облачное решение, скрипт для разработки собственных стратегий, протоколов;
  • бэк-тесты и симуляторы трейдинга минимизируют риски и оптимизируют стратегии;
  • поддержка синтетических ордеров, расширений, сканеров рынка, управления бизнес-кейсом, прочих опций.

В зависимости от функциональных возможностей, стоимость годовой подписки варьируется от 0,031 BTC до 0,088 BTC. Максимальный по цене тариф не имеет лимита на количество ботов, меры безопасности, способы страхования, варианты трейдинга.

Хочу программировать непростого советника? Написание технического задания

Итак, вы уже обладаете некоторым торговым опытом, вы проверили свою идею в торговле или имеете точное представление о том, как она будет работать на реальном рынке. Значит, пора переходить к написанию формальных правил вашей стратегии. Часто на этом шаге начинаются проблемы у большинства последователей гуманитарных наук – люди сталкиваются с непреодолимой стеной непонимания, когда абсолютно идеально отработанная в голове схема перестает работать при переводе на технический язык.

Проблема эта настолько распространенная, что создала целую индустрию по переводу абстрактных идей на формальный язык четко структурированных правил, естественно, не бесплатно. На самом деле, при минимальной подготовке вы не столкнетесь с такой сложностью просто потому, что понимаете механизм работы шестеренок вашего форекс робота до самых мелочей, но некоторого труда разработка все же потребует.

По сути, правильно составленное задание – это уже половина работы. Однако, это не работа программиста. Если вы будете просить программиста написать задание за вас, будьте готовы натолкнуться на непонимание, в лучшем случае, и негодование в абсолютном большинстве ситуаций. Именно разработчик идеи несет ответственность за ее точную формализацию, а никак не реализатор – если хотите, переводчик на язык низкоуровневых команд.

Разработку форекс робота начинаем с идеи

Разработка робота для торговли на рынках – это непрерывный поиск идей и, как частное, поиск Святого Грааля. Вопреки утверждениям непросвещенных граждан, Грааль находится достаточно просто – скажем «спасибо» технологическому прогрессу. Попробуйте вбить в гугл «Святой Грааль Форекс» – скорее всего, советник вашей мечты находится на первой странице выдачи, к тому же абсолютно бесплатен.

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

Уверен, идея вашего советника абсолютно уникальна и не имеет аналогов. Но, в любом случае, глупо не попытаться найти похожие разработки других авторов – масштаб проделанных исследований сложно оценить, пока не столкнешься с ним лицом к лицу. Человечество идет на пути к технологической сингулярности, и новые разработки внедряются настолько быстро, что осмыслить весь выложенный материал часто не представляется возможным. Если же подобных разработок все же не нашлось, и протестировать идею без проведения собственных исследований нельзя, пора переходить к следующему этапу.

Конструктор советников – не проходим мимо!

У новичков на валютном рынке часто возникает множество вопросов, ответы на которые бывают не совсем очевидны, либо являются лишь вопросом неопытности оного. Будучи начинающим трейдером, достаточно прочитать одну книгу Билла Вильямса, чтобы на всю жизнь подменить понятие торгового хаоса торговым порядком. Затем такие люди удивляются, почему вот здесь да не купить, а вот здесь да не продать, и заказывают у программистов советник по пересечению двух скользящих средних. А ведь на начальных этапах обучения это вполне можно отдать на откуп готовым инструментам разработки. Одной из таких как раз является MQL5 Wizard – мастер по созданию советников для MetaTrader 5.

Для реализации простых вещей Мастер идеален. Вам не нужно обладать никакими магическими способностями – навыки программирования здесь не требуются. Несколько простых шагов, и советник готов. Уже готовый советник можно протестировать в том же терминале MetaTrader. Держите комбайн по производству простецких Граалей.

Напишите мне советник по индикатору

Пример плохого задания для создания торгового советника – его отсутствие. Само намерение заказчика может быть и понятно: есть индикатор, нужно написать торгового робота, ну а дальше что?

Как закрывать сделку? Как ее сопровождать? Какие выбирать объемы? Что делать с проскальзываниями и реквотами? Нужно понимать, что программист не обладает экстрасенсорными способностями. Если вы такого найдете, обязательно дайте знать, такие люди не должны пропадать.

Видя ТЗ на создание работа без нужных подробностей, фрилансер внесет свою интерпретацию и, в некоторых случаях, действительно может угадать реальные намерения заказчика. Но, как правило, такие обращения заканчиваются двумя обиженными сторонами и обращением в арбитраж с дальнейшим расторжением договора.

Мораль: чем больше подробностей вы предоставите в задании, тем легче его будет понять, осмыслить и, в конце концов, реализовать.

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]