Как перестать бояться, что у твоего брокера блохи и начать спокойно торговать

Sergey Kovalyov

Элитный участник
Идея ветки -- проверяем брокера на блохастость (прелестные метаковские плагинчики, специально настроенные против трейдера). Ну, вы понимаете, всякие странные скольжения в минус и задержки исполнения, когда счет вышел в заметный плюс. При этом, я настаиваю на том, чтобы проверки делались статистически, по одному случаю далеко идущие выводы делают неграмотные лудоманы, а мы же не такие, правда?! =)

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

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

В связи с этим, с моей точки зрения, минимально разумный минимум, при котором вообще имеет смысл что-то мерять и надеяться получить результаты (а не случайные цифры ни о чем), выглядит так:

1. Никаких WIFI и прочий CDMA. Вообще! То есть, дома до роутера от компа -- кабель, от роутера до Инета -- кабель (не GPRS, не CDMA). В идеала -- VPS со стабильным пингом до торгового сервера вашего брокера. Стабильный не значит "меньше 10ms". Стабильный значит "редко отклоняется от своего среднего значения". Вот пример (это с выделенного сервера):

--- 94.23.97.166 ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 99089ms
rtt min/avg/max/mdev = 44.670/45.172/45.842/0.361 ms

min/avg/max почти не отличаются друг от друга при пинге сотней пакетов.


2. Никаких торрентов и музыки-фильмов вконтактике (я уже говорил, что нам очень желателен VPS?!)


3. В терминале в Market Watch оставляем только те пары, которые торгуем, незачем лишнее качать (хотя и ХЗ, может ли это повлиять на скорость исполнения в какие-то моменты, но лучше перестраховаться).


4. Отучить терминал делать реконнект, который, между прочим, чаще всего и виноват в "ой, а чо так скользнуло-то?!!", так как он занимает 1000 ms в среднем. Вдумайтесь в эту цифру. Все торгуют, а вы, как лох зачем-то ждете 1000 ms (за это время другие могут успеть открыться и закрыться). Скрипт для отучения от реконнекта прикладываю. Он не панацея, но в большинстве случаев поможет. Вешать лучше всего на хорошо тикающую пару (чтобы не было больших зазоров между тиками, и меньше была вероятность, что мы пропустим момент, когда уже пора модифицировать отложку).

_https://github.com/SergeyKovalyov/forex-tools

Продолжение следует...
 
Последнее редактирование модератором:

testopal

Местный житель
привет.
Свой код выложить не смогу, не нахожусь за своим компом, но твой код покритикую с точки зрения своего ;)

1. Предположим что дело ночью, твоя сова находится на валютной паре к которой больше 30 секунд не приходило ни одного тика. Итого, будет торговая пауза. Следовательно, сова в данной ситуации не работает как надо. Я лично вышел из этого таким образом: в советнике создал вечный цикл и сам проверяю время. Что-то типа такого:

while(IsStopped()==false)
{
if(!IsExpertEnabled()) break;
if(IsStopped()==true) return(0);

int t_d =GetTickCount();
if ((t_d-tick_time) >=27000)
{
....
tick_time=GetTickCount();
Sleep(500);
}
}

где 27000 это 27 секунд.
троеточие - код проверка и модификации ордера
в этом случае я не завишу от тиков сервера, модификация будет всегда раз в 27 секунд

и пункт 2
Если во время работы случайно закроем отложенный ордер, то в твоем случае сова снова перестанет работать и даже будет выдавать ошибки.
Я сделал так, на месте троеточий в коде выше вставил цикл проверки ордеров. Если отложка существует, то модифицируем, если не существует, то открываем новую отложку. Код кстати на твой похож. Полный код выглядел бы так (это в start(), init не нужен):

while(IsStopped()==false)
{
if(!IsExpertEnabled()) break;
if(IsStopped()==true) return(0);

int t_d =GetTickCount();
if ((t_d-tick_time) >=27000)
{
int i;
for (i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS);
if (OrderType() != OP_BUYLIMIT || OrderMagicNumber() != magic) continue;
ticket = OrderTicket();
break;
}
if (ticket <=0) ticket = OrderSend(Symbol(), OP_BUYLIMIT, 0.1, Ask - 10000 * Point, 0, 0, 0, "", magic);
else
{
i = Seconds() - 30;
if (i == 0) i = 30;
OrderModify(ticket, OrderOpenPrice() + i * Point, 0, 0, 0);
}

tick_time=GetTickCount();
Sleep(500);
}
}

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

с уважением
 

Sergey Kovalyov

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

2. Все верно, но, опять же, исходя из простоты.


В любом случае, каждый волен модифицировать мой код или брать чей-то другой. Основная идея -- победить реконнект, с целью убрать из замеров эти 1000 ms.

То есть, еще раз сделаю ударение, мы тут будем обсуждать не методы программирования, а методы сбора статистики (которые каждый может взять готовые мои, или сам закодить) и, потом, методы анализа этой статистики.

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

Поэтому, прошу про кодерские-программерские заморочки тут не писать. Если есть код -- выложить, кратко описать и все, договорились? =)
 

testopal

Местный житель
Поэтому, прошу про кодерские-программерские заморочки тут не писать. Если есть код -- выложить, кратко описать и все, договорились? =)

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

Профитмастер

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

По теме ветки - могу, при необходимости, предоставить якобы ЕСН счета, якобы честных дилингов для громких разоблачений в манипуляциях с использованием автодилеров и прочих ублюдошных примочек против клиентов :)
 

Slim33

Гуру форума
Sergey Kovalyov, а нельзя ли для реконнекта использовать более "безобидное" средство?
Так сказать, чтобы меньше "светитья".
Например, функцию MarketInfo() или функцию из группы "Информация о счете" - AccountEquity() и т.п.
 

Sergey Kovalyov

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

С мая еще "в следующем билде" говорят. Все еще ждем... =)

По теме ветки - могу, при необходимости, предоставить якобы ЕСН счета, якобы честных дилингов для громких разоблачений в манипуляциях с использованием автодилеров и прочих ублюдошных примочек против клиентов :)
Учту. Собственно, для того ветка и.
 

Sergey Kovalyov

Элитный участник
Sergey Kovalyov, а нельзя ли для реконнекта использовать более "безобидное" средство?
Так сказать, чтобы меньше "светитья".
Например, функцию MarketInfo() или функцию из группы "Информация о счете" - AccountEquity() и т.п.

Нет. В том-то и дело, что нам надо посветиться на сервере, чтобы сессия не потухла. А все эти функции берут данные из окружения терминала (которое он обновляет по ходу дела, а не по вызову функции) и не вызывают обновление сессии. А если бы вызывали, то это было бы такое же "светиться" как и двигать лимитку. По-другому -- никак. Но услышать список контор, если такие будут, которые обиделись на двигание лимитки я бы тоже хотел. Это ж неспроста будет, обида-то. =)

Если совсем-совсем честно, то есть один метод, который "не светится" -- иметь ТС, которая по своей сути производит какие-то торговые операции (или меняет отложки) чаще чем раз в 30 секунд.

Я чуть позже доработаю скрипт реконнекта, сделаю вечный цикл (да, без цикла, как показала проверка, он не всегда помогает), плюс добавлю глобальную переменную, которую можно будет обновлять в торговом скрипте, и тогда мой скрипт реконнекта будет учитывать торговую активность основого скрипта и двигать лимитку только когда надо.
 

Sergey Kovalyov

Элитный участник
В общем, чтобы постоянно не атачить скрипты, тем более, они будут по ходу времени меняться и дорабатываться, сделал репозитарий и буду все скрипты, программы и прочее такое выкладывать в него:

https://github.com/SergeyKovalyov/forex-tools

Если кто-то хочет выложить свои варианты скриптов подсчета времени открытия позы, борьбы с реконнектами либо что-то другое, связанное с темой ветки -- присылайте на [email protected] с кратким описанинем, я скрипт с описанием выложу там же.
 

Sergey Kovalyov

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

1. Реконнект не нужен. Теперь типичное время OrderSend измеряется числом порядка 100-250 ms. Если ваш брокер все еще исполняет в среднем по секунде-две, то ваш брокер -- блохастый, сто процентов.
2. Торговать лучше с помощью лимитов. Забудете про отрицательное проскальзывание вообще, а у нормальных брокеров еще и получите положительное проскальзывание.
 
Верх