Создаю ТС под новости, помогите please разобраться со временем

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

Программируем так чтобы система узнала ASK за 5 минут до выхода новости, и поставила два
взаимоотменяемых ордера на открытие позиций (длинной/короткой) на 10 пунктов выше/ниже чем тот самый ASK.

Первая спекулянтская волна открывает один из ордеров (второй самооотменяется).
Вокруг открывшегося ордера ставим Take Profit в 15 и Stop Loss в 8 пунктах (пока без всяких ухищрений).

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

Проблема моя в том, что из за отсутствия опыта я путаюсь с форматами переменных, и мне не удается заставить ТС
действовать в точное время (то есть за 5 минут и сразу после новости).

Буксую вот где:

if(CurTime()=EventTime - 5 min)
{BeforePrice=Ask;
if CurTime()+EventTime
{ TicketBuy=OrderSend(Symbol(),OP_BUYLIMIT,Lots,BeforePrice+10*Point, 2,
BeforePrice+2*Point, BeforePrice+(TakeProfit+10)*Point,
"momentumbollinger", 16384, 0,Green);
TicketSell=OrderSend(Symbol(),OP_SELLLIMIT,Lots,BeforePrice-10*Point,2,
BeforePrice-2*Point, BeforePrice-(TakeProfit-10)*Point,
"momentumbollinger", 16385, 0,Green);
if Ticket=TicketBuy
OrderDelete(TicketSell);
if Ticket=TicketSell
OrderDelete(TicketBuy);



EventTime - переменная указывающая время вместе с датой,
BeforePrice - тот самый Ask за 5 минут

Чувствую что форматы несогласованы, и приравнивание тоже корявое.

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

Ставим на 10 п выше курса BuyStop с ТР= 50 и SL=30 и постоянно модифицируем ордер так, чтоб при незначительных колебаниях ордер постоянно находился на заданном расстоянии от курса.

Пришло время. Объявлена неслыханная безработица в Америке.
Курс свечой в 100п пробивает наш ордер, .. но ордер почему-то не открывается. В чём дело? А в том, что брокер не гарантирует открытие на сильных движениях, а гарантирует только при "обычной" волатильности. Наконец-то брокер решил, что "уже можно" открыть наш ордер и открывает его на самой верхушке свечи. Последующий откат сбивает StopLoss.

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

Но с временем то как быть?
 
Никакое проскальзывание на гепах не поможет.
Эта технология в принципе порочная.
Заботиться в этом деле о подробностях алгоритма (в данном случае какающихся времени) -
всё равно что беспокоиться о причёске перед восхождением на плаху.

А сами функции времени описаны здесь https://docs.mql4.com/ru/dateandtime

В приведенном коде масса ошибок. Например, if() имеет другой формат (используются скобки),
для сравнение на предмет равенства используется ==, а не =, что такое + в этом операторе вообще не ясно..  и т.д.
 
Для информации: брокеры начинают массово проскальзывать такие "новостные" ордеры, активируя отложенные ордеры на самом гребне волны со слиппажом в 50-80-100 пунктов. Скользят все ордеры, включая stop loss, take profit. Когда трейдеры видят такие проскальзывания на новостях, то закатывают истерики.

Брокеры не хотят брать (и не будут брать) на себя все нарастающие убытки от такой новостной торговли. Они сами не могут перекрыться по несуществующим ценам на гепах и новостях.
 
2 Sk

не судите строго, я всего три дня за MQL, а до этого программировал только на TP7 и то еще в школе.

2 Everyone

Значит отложенные ордера проскальзывают... а что если задать условия, для торговли *с рынка*

Например, новость выходит в 18 00, если 1минутный моментум растет с 18 05,
тогда осуществить операцию Buy...а как только 5ти минутный моментум станет падать - закрыть позицию так же - *с рынка*.

То есть не ставить отложенные ордера, а ставить ордера с рынка по условию. Я думаю что это не так проскальзывает.

Что скажете?
 
Renat писал (а):
Для информации: брокеры начинают массово проскальзывать такие "новостные" ордеры, активируя отложенные ордеры на самом гребне волны со слиппажом в 50-80-100 пунктов. Скользят все ордеры, включая stop loss, take profit. Когда трейдеры видят такие проскальзывания на новостях, то закатывают истерики.

Брокеры не хотят брать (и не будут брать) на себя все нарастающие убытки от такой новостной торговли. Они сами не могут перекрыться по несуществующим ценам на гепах и новостях.

Поддерживаю. Поставьте себя на место брокера. И все поймете.
Я в свое время читал, что некоторые успешные трейдеры имеют стратегии, по которым нужно покупать тогда, когда все продают, и наоборот. В этом случае вообще нет никаких проблем с брокерами, но нужно все многократно просчитывать. Но то, что такой метод существует - стопудово.
 
AVS:
В таком случае мы можем увеличить уровень проскальзывания.

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

это понятно, вопрос собственно в том чтобы запрограммировать вход на рынок на определенное время, согласовать временные форматы во фразе

if CurTime()==EventTime

Ordersend(..........
 




Вот один из вариантов
просто кусок кода
один из новостных советником у меня именно так и работает


int РАЗНИЦА_GMT = 3; // в моем терминале + 3 часа разницы от GMT

extern string ДАТА_ВРЕМЯ_НОВОСТИ = "2006.08.17 12:28:00"; // GMT выход новости

....



datetime timnews = StrToTime(ДАТА_ВРЕМЯ_НОВОСТИ ) ;


if (
TimeYear(timnews) == TimeYear(CurTime()) &&
TimeMonth(timnews) == TimeMonth(CurTime()) &&
TimeDay(timnews) == TimeDay(CurTime()) &&
TimeHour(timnews) == (TimeHour(CurTime()+(РАЗНИЦА_GMT*3600))) &&
(
(TimeMinute(timnews) <= TimeMinute(CurTime()) && TimeSeconds(timnews) <= TimeSeconds(CurTime()) )
)
)
{


... выставляй ордера что угодно можно делать
 
AVS:
2 Reshetov,

это понятно, вопрос собственно в том чтобы запрограммировать вход на рынок на определенное время, согласовать временные форматы во фразе

if CurTime()==EventTime

Ordersend(..........

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