Bitcoin Forum
May 02, 2024, 09:36:24 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: [1]
1  Economy / Exchanges / Binance API lags on: August 23, 2020, 06:03:33 PM
Notes about the operation of the Binance API from the scalper terimanl and HFT trading point of view

My name is Mike. My team has been developing and promoting MoonBot trading terminal and related resources for 3 years: chat rooms, Telegram channels, signal channel, trading statistics website, forum and so on. The full list of our resources can be found at the end of the article.

In the course of our work, we have successfully overcome many difficulties and solved many interesting problems, but we cannot solve one. It is related to the work of Binance API, the best (despite these API problems) cryptocurrency exchange to date.

This article is intended primarily for our users who trade on the MoonBot terminal. The article may also be interesting for those who use other scalper terminals for trading on binaries and have faced the problems described below. The main purpose of the article is to explain to the users what is going on and to inform Binance representatives that the API can be improved and should be.

The problem with Binance’s API is — lags

This problem is divided into 2:

The first one is a lag when receiving exchange data. This is the delay between the time when the price was established at the exchange (a transaction took place) and the time when the information about the price of this transaction reached your terminal via web socket. More details follow.

The second is the so-called “Order Does Not Exist” problem, synchronization of the exchange database. If you see such entries in the log, it means you have been affected as well.

The essence of the problem: when you place a new order, it is not yet in the database of the Binance, and gets there only after some time. According to Binance, this time does not exceed 1 second normally, which is quite acceptable if it would be true for 100% cases. Actually, this time can exceed 5–10 minutes sometimes, which is absolutely unacceptable!

When we write about it to their tech support, Binance says, “Use the web socket.” Gentlemen, it’s 2020, everybody’s been using the web socket for a long time. The problem is that the information on the web socket is sent only once, and if at the moment of sending, some lag (see paragraph 1), or even a disconnect happens, it does not matter on whose side — information about the order will not come! And it will not be sent again.

Some people will say that the connection is very reliable, and how can the information not arrive? It’s very simple. The most obvious example is to pull the network cable out of the computer for a second and you will see a break on the tick chart. The gap is the period during which the data has not arrived. More complex and more real cases are the various failures and overloads of network equipment all the way from Tokyo (location of BInance servers) to your PC. The result is that the connection falls off after a timeout. MoonBot restores it immediately, but some data is already irrecoverably lost.

Please note that we are talking about trading information that is vital for saving and multiplying your deposit. It is not a problem if, for example, you do not get the weather forecast information, but if you lose important information about an order, you will not be able to close it in time and will lose your funds.

Therefore, in addition to the web socket, MoonBot uses GET /api/v3/order API function to monitor the order status. If for some reason the order update has not been received via the web socket, a secondary function of GET /api/v3/order will be used, but it does not work due to the database de-synchronization! To be more precise, it works, but after an indefinite period of time.

We have collected statistics on how long this function may not work. The chart below:



This chart contains statistics from all trading bots per day. We can see that the API function to check the order status did not work between 200 and 600 seconds!

You can check actual real-time charts for the last 24 hours here


Let’s talk about the lags in their pure form
i.e. about delays between some events on the exchange and receiving information about them via the API.

Please note that we are talking about scalper terminals and bots, such as MoonBot, where the trader cares about every fraction of a second to analyze the market situation and manage orders, while in auto trading, milliseconds are important. If you trade in the medium term, you may not notice lags at all. But if you are scalping, if you want perfect software responsiveness, perfect tick chart accuracy and order management — lags are very important for you! Many MoonBot users have found times when the exchange was operating without lags, so they have something to compare with.

The lag we are talking about is a delay between an event and receiving information about it more than 500 ms later. Many of our users believe that even lower values of 200–300 ms are acceptable for manual trading, while in auto trading at values above 50 ms are a sign that bots should be turned off.

Here’s an example of what lag looks like on the chart:



If you are not a MoonBot user, this chart might scare you, but it’s simple — different lines are BTC/USDT price values on Binance, obtained from different sources (transaction price, ASK price in the order book, mark price, spot market price). Obviously, at each moment the BTC price was actually about the same value, so all lines must match or be close to each other. But they do not coincide due to the fact that the trade data came with a delay of 10–20 seconds compared to the orderbook data, and the chart shows the outdated price also with a huge delay!

We have collected accurate data on lags from all working MoonBots on the chart.

On this chart below is an example of how the delays in receiving transactions from Binance were distributed during the day 23.08.2020


Online lag statistics for the last 24 hours can be found here: https://api.moon-bot.com/latency/
the data is updated every 20 seconds.

A week ago Binance created a new web socket fstream3.binance.com, we were asked to test it in work. It turned out that this socket has no support for data compression (permessage-deflate), so the situation with the lags has become even more complicated: now in addition to depending on Binance’s servers, you also depend on the quality of your Internet: the amount of uncompressed data is too large, and additional lag is added by your ISP.

We immediately reported this issue with compression to Binance, but to our greatest surprise today this socket was published in the news … still without compression correction.



It seems Binance Exchange is in such a hurry to increase trading volumes and attract as many users as possible, that there is no time left for quality control issues.


Brief summary with technical details on how MoonBot works with Binance API

The tick chart is drawn by the following web socket flows:

  • Futures: wss://fstream.binance.com/ws/<symbol>@aggTrade 
  • Spot: wss://stream.binance.com:9443/ws/<symbol>@trade 

A lag on the chart means that data from these streams came with delays. If you see on the chart that trades are lagging by N seconds, it means that your PC receives data from Binance with a lag of N seconds.

If you see gaps on the chart, it means that your PC does not physically receive data from Binance at the above addresses. If you set the logging level in MoonBot to 5, you will most likely see connection timeouts in the log.

You can compare your lag indicators with other users and see the general picture of Binance’s lags for the current day here:
https://api.moon-bot.com/latency/

Our resources:

Website: instructions, downloads, blog https://moon-bot.com

Telegram chats and channels:

Trading statistics on the MoonBot terminal (manual trading and algorithmic trading) contains data on volumes and transactions from all users who have agreed to send deals.

It is updated online at https://stat.moon-bot.com/

Our forum http://forum.moon-bot.com/

Our thread on bitcointalk forum: https://bitcointalk.org/index.php?topic=2234450.msg22522662

2  Local / Кодеры / Лаги API бинанса on: August 23, 2020, 04:34:56 PM
Заметки о работе криптовалютного торгового терминала на примере API Binance и MoonBot

Меня зовут Mike. Моя команда на протяжении 3х лет занимается разработкой и продвижением торгового терминала MoonBot и связанных с ним ресурсов: чатов, каналов в Телеграме, сигнального канала, сайта статистики торгов, форума и проч. Полный перечень наших ресурсов приведен в конце статьи.

В процессе работы мы успешно преодолели множество трудностей и решили множество интересных задач, но одну решить не можем. Связана она с работой API Binance, лучшей (даже несмотря на эти проблемы API) криптовалютной биржей на сегодняшний день.

Данная статья предназначена прежде всего скальперам и HFT-трейдерам. Статья также может быть интересной и тем, кто использует другие скальперские терминалы для торгов на бинансе, и сталкивался с описанными ниже проблемами. Главная цель статьи — объяснить пользователям, что происходит, и донести до бинанса информацию о том, что работу API можно улучшить.

Проблема API бинанса — это лаги.

Данная проблема делится на 2:

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

Вторая- это так называемая проблема “Order Does Not Exist”, рассинхронизация БД биржи. Если вы видите такие строчки в логе, значит вас это тоже коснулось.

Суть проблемы: когда вы поставили новый ордер, он еще отсутствует в базе данных бинанса, и попадает туда лишь спустя некоторое время. По заявлению Бинанса, это время в норме не превышает 1 секунды, что вполне допустимо. На самом деле это время может превышать 5–10 минут, что абсолютно неприемлемо!

Когда мы пишем об этом в тех. поддержку, Бинанс отвечает, “используйте вебсокет”. Господа, на дворе 20 год, уже все давно используют вебсокет. Проблема в том, что по вебсокету информация отправляется только 1 раз, и если в момент отправки случился какой то лаг (см. п.1), или даже дисконнект, не важно на чьей стороне — информация об ордере не дойдет! И повторно уже не будет отправлена.

Некоторые скажут, что вебсокет соединение очень надежно, и как может не дойти информация? Очень просто. Самый наглядный пример — выдерните на секунду сетевой кабель из компьютера, и вы увидите на тиковом графике разрыв. Разрыв — это и есть период, в течении которого данные не поступали. Более сложные, и более реальные случаи — разнообразные сбои и перегрузки сетевого оборудования на всем пути от Токио (местоположения серверов BInance) до вашего ПК. Результат — соединение отваливается по таймауту. МунБот сразу же восстанавливает его, но часть данных уже безвозвратно потеряна.

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

Поэтому помимо вебсокета, МунБот использует для контроля состояния ордера функцию API GET /api/v3/order. Если по каким либо причинам обновление ордера по вебсокету не было получено, в ход идет запасная функция GET /api/v3/order, а она вследствии десинка не работает ! Точнее, работает, но спустя неопределенное время.

Мы собрали статистику, как долго эта функция может не работать. Ниже график:



На этом графике собрана статистика со всех торгующих ботов за сутки. Видно, что API функция для проверки состояния ордера не работала от 200 до 600 секунд !

Данный график обновляется в реальном времени, вместе с другой статистикой работы API Binance его можно посмотреть тут


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

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

Лаг, о котором говорим мы — это задержка между событием и получением информации о нем более, чем в 500мс. Многие наши пользователи считают допустимым еще меньшие значения в 200–300мс при ручной торговле, а в автоторговле при значениях больше 50мс уже стоит выключать ботов.

Вот пример, как выглядит лаг на графике:



Если вы не пользователь МунБота, вид этого графика может вас испугать, но тут все просто — разные линии — это значения цены BTC/USDT, на бинансе, полученные из разных источников (цена сделок, цена ASK в стакане, цена маркировки). Очевидно, что на самом деле в каждый момент времени цена BTC имела примерно одинаковое значение, поэтому все линии должны совпадать. Но они не совпадают из-за того, что цены сделок приходили с задержкой в 10–20 секунд против цен в стакане, и на графике видна старая цена, с огромным запаздыванием!

Мы собрали точные данные о лагах со всех работающих МунБотов на графике.

На этом графике ниже пример того, как были распределены задержки получения сделок с бинанса на протяжении суток 23.08.2020 (очень тихий день, лаг не превышал 900мс)



Онлайн-статистика лагов за последние сутки тут: https://api.moon-bot.com/latency/ru.html
данные обновляются раз в 20 секунд.

Неделю назад Binance сделал новый вебсокет fstream3.binance.com, нам было предложено проверить его в работе. Обнаружилось, что на этом сокете нет поддержки сжатия данных (permessage-deflate), вследствии чего ситуация с лагом еще больше усложнилась: теперь помимо зависимости от серверов Бинанса, вы зависите еще от качества своего интернета: объем данных без сжатия слишком велик, и дополнительный лаг вносится вашим провайдером.

Мы сразу сообщили об этой недоработке с сжатием в Бинанс, однако к нашему глубочайшему удивлению сегодня в новостях был опубликован этот сокет … все еще без исправления сжатия.



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

Краткое резюме с техническими подробностями о работе MoonBot с API Бинанса

Тиковый график строится по следующим вебсокет потокам:

Фьючерсы: wss://fstream.binance.com/ws/<symbol>@aggTrade

Спот: wss://stream.binance.com:9443/ws/<symbol>@trade

Лаг на графике означает, что данные с этих потоков приходят с задержками. Если вы видите на графике, что сделки отстают на N секунд, значит ваш ПК получает данные с Бинанса с отставанием в N секунд.

Если вы видите на графике разрывы, значит в эти моменты ваш ПК физически не получает данные с Бинанса на указанных выше адресах. Если в МунБоте поставить уровень логирования на 5, то вы скорее всего увидите в логе тайм-ауты соединения.

Сравнить свои показатели лагов с другими пользователями и посмотреть общую картину лагов на Бинансе за текущие сутки можно на этом сайте https://api.moon-bot.com/latency/ru.html

Наши ресурсы:

Telegram чаты и каналы:

1. Сайт: инструкции, загрузки, блог https://moon-bot.com

2. Новостной канал MoonBot https://t.me/MoonBotNews

3. Общие вопросы, тех вопросы, обсуждения, предложения по Мун Боту https://t.me/moon_bot_crypto

4. Чат по обсуждению спец. канала Мун бота с торговыми сигналами в Телеграмме https://t.me/crypto_moon_mafia

5. Чат по вопросам настроек Мун Бота https://t.me/MoonBotSettings

6. Теория трейдинга и общефилософские вопросы https://t.me/moon_bot_kurilka

7. Англо-говорящая аудитория MoonBot https://t.me/Moon_Bot_Public

Статистика торгов на терминале MoonBot (ручная торговля и алготрейдинг) приведены данные по объемам и сделкам от всех пользователей, кто дал согласие на отправку сделок.
Обновляется онлайн https://stat.moon-bot.com/

Наш форум

http://forum.moon-bot.com/

Наш топик на крупнейшем крипто-форуме bitcointalk: https://bitcointalk.org/index.php?topic=2234450.msg22522662

English bitcointalk topic: https://bitcointalk.org/index.php?topic=2234450.msg22522662
3  Alternate cryptocurrencies / Announcements (Altcoins) / [ANN] [ICO] MoonTrader ($MOON) Trading Terminal and ecosystem on: May 16, 2019, 02:30:13 PM

Why us?

  • We already have a working product. We have launched the first-generation trading terminal Moon-Bot.com in October 2017.
  • We already have an experienced team of professional software developers and active traders.
  • We have over 30 000 registrations in the system.
  • We support both Russian and English-speaking communities consisting of 4000+ active daily traders.
  • We are constantly developing and improving the product. Most of the changes are implemented based on the recommendations and requests of the community members.
  • We make the product both for ourselves and for our community.


Key Features of the MoonTrader terminal

  • Cross-platform implementation
  • User-friendly interface with configurable customization options
  • Lightning fast execution of orders on the exchange, and order status update
  • Advanced orders. OCO orders
  • Trade Assistant
  • Algorithmic trading and Modular Algorithm Builder
  • Candlestick chart and indicators
  • Tick ​​chart display, with all market orders placed onto the chart
  • Advanced functions for manual trading. Indicators
  • Automatic signal trading (Telegram and Tradingview)
  • Automatic detection of market conditions and reaction to its changes
  • Trusted Management (TM) and Social Trading
  • Platform for user content and Marketplace for algorithms and services
  • Back-testing module on historical data
  • Many exchanges to choose from. Arbitrage trading
  • Corporate product

Read more about our plans for the ICO and the project development on the website MoonTrader.io

 

Tokensale 1st Round is scheduled for June 20 2019






4  Local / Альтернативные криптовалюты / [ICO] MoonTrader ($MOON) — Торговый терминал on: May 16, 2019, 01:48:29 PM

Почему мы?

  • У нас уже есть рабочий продукт. Мы запустили в октябре 2017 года торговый терминал первого поколения Moon-Bot.com.
  • У нас уже есть сформированная команда профессиональных разработчиков и трейдеров.
  • У нас есть русско- и англо-язычное сообщество, состоящее из 4000+ активных ежедневных трейдеров.
  • Мы постоянно развиваем и улучшаем продукт. Большинство изменений внедряется по рекомендациям участников сообщества.
  • Мы делаем продукт и для себя лично, и для нашего сообщества.


Ключевые характеристики MOONTRADER

  • Мультиплатформенность
  • User-Friendly интерфейс с возможностью индивидуальной настройки
  • Молниеносное исполнение ордеров на бирже и обновление статусов открытых ордеров
  • Смарт ордера
  • Аналитический помощник
  • Алгоритмическая торговля и модульный конструктор стратегий
  • Свечной график, база индикаторов по свечным графикам
  • Тиковый график. Отображение всех ордеров на графике
  • Расширенный функционал для ручной торговли. Индикаторы
  • Автоматическая торговля по сигналам
  • Автоматическое определение состояния рынка и реакция на его изменения
  • Доверительное Управление (ДУ) и Социальный Трейдинг
  • Платформа для контента пользователей и Маркетплейс
  • Модуль тестирования алгоритмов на исторических данных
  • Множество бирж на выбор. Арбитражная торговля
  • Корпоративный продукт

Более детально о наших планах проведения ICO и развития проекта читайте на сайте MoonTrader.io

 

1й Раунд токенсейла назначен на 20 Июня 2019











5  Local / Трейдеры / Конкурс трейдеров от МунБота on: March 15, 2019, 02:10:55 AM
Команда МунБота рада сообщить о начале практики регулярных соревнований, в которых принимают участие пользователи бесплатной версии Мун Бота.

Правила:

  • Соревнование начинается каждый 1й и 3й понедельники месяца, в 00:01 по GMT+0 и длится ровно неделю
  • Участвуют только пользователи бесплатной версии. Допустимы любые способы торгов - ручной, авто по стратегиям, по сигналам, по ДУ и тп.
  • Обязательна актуальная версия бота.
  • Обязательно указание действующего логина в Телеграме, по которому с Вами можно связаться
  • Победитель отбирается по макс. профиту в USD за неделю
  • Приз: ПРО версия на 1 месяц
  • Рейтинг участников ведется нашим сервером полностью автоматически, в реальном времени. Наблюдать можно на странице статистики МунБота, закладка Competition.
  • Администрация оставляет за собой право в случае спорных результатов затребовать у претендентов любые подтверждающие материалы: скриншоты отчетов из бота, скриншоты сделок с биржи и тп. Результаты могут быть пересмотрены Администрацией в одностороннем порядке без объяснения причин.

Первое соревнование начнется 18 марта

Как принять участие:

Просто скачайте МунБота, на странице "Настройки - Логин" поставьте галочку "Согласен отправлять результаты торгов на сервер статистики" и начните торговать. Ваши сделки будут автоматически появляться на странице статистики МунБота.

Эта тема посвящена только конкурсу и награждениям участников.  Вопросы по МунБоту задавайте задавайте в наших чатах:

1. https://t.me/moon_bot_crypto Общие вопросы, тех вопросы, обсуждения, предложения по Мун Боту
2. https://t.me/crypto_moon_mafia Чат по обсуждению спец. канала Мун бота с торговыми сигналами в Телеграме
3. https://t.me/MoonBotSettings  Чат по вопросам настроек бота
4. https://t.me/moon_bot_kurilka    курилка Moon Bot
6  Alternate cryptocurrencies / Service Announcements (Altcoins) / [BOT] Moon Bot - trading terminal for Bittrex, Binance and Huobi on: October 03, 2017, 06:14:22 PM
The Moon Bot is a bot-terminal for playing on mid-term Telegram signals, flash signals (pumps), manual trading and scalping. Currently supports Binance, Huobi and Bittrex. Designed as a portable x64 windows app.

Super promotion !
Register on binance at our referral link (more details on our site), and get an unprecedented discount of 75% on the PRO version with both modules MoonScalper and Futures with the code MoonBonus, as well as the following bonuses:

 + 20% commission discount on all binance Spot trades (as well as 10% off all futures trades for the first month)
 + 300 Moon credits as a gift
 + Option to auto-buy BNB when trading USDT-M futures
 + The MoonHook Strategy
 + Price emulation tool on the chart with "Pencil"
 + Charts monitoring module in separate windows (no limits on the number of charts, does not load API)



The main goal of the bot is to make a reasonable decision, is it worth buying a pumping coin, If yes then
buy a coin as fast as possible at the very beginning of a pump and sell fast with profit.

To achieve this the bot can do:
  • auto read from the Telegram and detect coins in channels messages
  • auto detect coin name in clipboard text
  • auto detect altcoin market activity
  • analyze all the coins to determine their "pumping quality"
  • adjust variety of settings helping to make fast automatic decision whether or not to buy the coin, at what price and so on
  • Tools for manual trading: rapid orders moving with a mouse, real time order book visualization, 1-second resolution charts, displaying all exchange's executed orders, volume indicator
  • Pending orders: Buy Stop pending order (for trading on breakdowns), Buy pending order (for trading in dumps, order doesn't reserve balance until placed on the exchange)
  • Stop Loss, Trailing Stop
  • and much more, read in details at Bot's site

The Bot is not intended for trading in a fully automatic mode. The Bot only automates routine operations and provides convenient tools, which gives a gain in time.
All Bot's tools are for fastest possible automating and fastest decision-making.

The Bot has pumps auto-detection algorithm but its not perfect yet, so the best results you will get using the bot in conjunction with a Telegram  pump channel.

Links to actual pump examples you can find here

The Bot's workflow model:
You are waiting for a pump signal in a channel. Immediately as the message with pumping coin appears, The bot reads it, analyze the coin, place a buy order (in case the coin and the pump are good enough) and show you visual trading chart.
Immediately after the buy order has been executed, the Bot will put a sell order. Buy orders that are not executed in a pre-defined time will be cancelled automatically.

Another scenario when the bot is useful is scalp trading.

The main window screenshot:


My Bittrex last orders screenshot:


Download free version, the only difference from the full version is that the volume of each buy order is limited to 40 usdt.  http://cryptopump.info/download


Moon Bot's public chat: https://t.me/Moon_Bot_Public
Please read pinned message when you join it.



ATTENTION !  FRAUD SITES !


There are already 2 fraud sites containing malware instead of genuine Moon Bot. Be careful !
cryptopump.pro и crypto-pump.online

Make sure you download the bot from the original site https://moon-bot.com/  !
7  Local / Трейдеры / Moon Bot - Бот-терминал для Битрекс, Бинанс и Хуоби on: October 03, 2017, 04:23:07 PM
Moon  Bot - Бот-терминал для скальпинга, торговли по сигналам, реализации разнообразных стратегий (18 типов стратегий с сотнями настроек на все случаи рынка), ручной торговли. Текущая версия работает с Бинансом (спот и фьючерсы), Хуоби, битрексом.. Представлен x64 портативным приложением под Windows.

Супер-акция !

Зарегистрируйся на бинансе по ссылке (подробнее на нашем сайте) и получи небывалую скидку в 75% на ПРО версию с модулями MoonScalper и Futures по коду MoonBonus, а также следующие бонусы:

 + Скидка на комиссию 20% со всех сделок на binance Spot (а также в первый месяц 10% со всех сделок на фьючерсах)
 + 300 Мункредитов в подарок
 + Опция автопокупки BNB при торговле USDT-M фьючерсами
 + Стратегия MoonHook
 + Инструмент эмуляция цены на графике с помощью "Карандаша"
 + Модуль мониторинга графиков в отдельных окнах (без ограничений по кол-ву графиков, не нагружает API)


Видео, как работает бот: https://youtu.be/4ZemL_g5Fjc

Страница статистики МунБота.

Канал в Телеграме, где можно задать вопросы по боту: https://t.me/moon_bot_crypto

Скриншот главного окна:


Скриншот Битрекса с моими последними ордерами:


Загрузка бесплатной версии (отличается от полной ограничением на сумму buy order'ов и отсутствием пар USDT) https://moon-bot.com/ru/download


ВНИМАНИЕ !  ПОДДЕЛКИ!


Обнаружено уже 2 подделки, замаскированные под настоящего Мун Бота:
cryptopump.pro и crypto-pump.online

Убедитесь, что скачали Мун Бота с настоящего сайта https://moon-bot.com/  !

Pages: [1]
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!