Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У вас не тот случай когда нужна пауза.
Глобально есть 2 путя:
1) анализ окружения (подсос истории сделок, проверка открытой позиции или объёма позиции);
2) анализ транзакций.
Первое работает медленнее. Зато надёжнее. Нужен компромисс. Наверное здесь нужно смотреть на стратегию и от неё плясать...
Да, на ФОРТСе есть полноценный стакан, так что работать нужно не с тиками, а с событием BookEvent.
Странно, что по теме не высказался Василий Соколов. Интересна его точка зрения...
В общем, имхо, итог такой.
Глобально есть 2 путя:
1) анализ окружения (подсос истории сделок, проверка открытой позиции или объёма позиции);
2) анализ транзакций.
Первое работает медленнее. Зато надёжнее. Нужен компромисс. Наверное здесь нужно смотреть на стратегию и от неё плясать...
Да, на ФОРТСе есть полноценный стакан, так что работать нужно не с тиками, а с событием BookEvent.
Странно, что по теме не высказался Василий Соколов. Интересна его точка зрения...
В общем, имхо, итог такой.
Глобально есть 2 путя:
1) анализ окружения (подсос истории сделок, проверка открытой позиции или объёма позиции);
2) анализ транзакций.
Первое работает медленнее. Зато надёжнее. Нужен компромисс. Наверное здесь нужно смотреть на стратегию и от неё плясать...
Да, на ФОРТСе есть полноценный стакан, так что работать нужно не с тиками, а с событием BookEvent.
Странно, что по теме не высказался Василий Соколов. Интересна его точка зрения...
т.е. полностью перенести туда свою стратегию?
Работал я как-то по этому заказу, писал класс CiOnTrade:
Так вот, оптимальное решение, которое я нашёл, заключалось в обработке состояний. А их было вот столько:
{
TRADE_STATE_NONE=0, // "ничего"
TRADE_STATE_ORDERS=1, // "только ордера"
TRADE_STATE_POSITION=2, // "только позиция"
TRADE_STATE_ALL=3, // "все"
};
2) "Только ордера" - это состояние, когда выставлены ордера.
3) "Только позиция" - это состояние, когда ордера полностью исполнены.
4) "Все" - это состояние, когда ордера исполнены не полностью, и есть в рынке уже позиция.
Вот каждое состояние нужно было обработать... да, кстати, допускаю, что есть и промежуточные состояния. Так что мой класс можно усовершенствовать.
А кстати, возник вопрос, с событием BookEvent можно пользоваться так же как и Тиком или Таймером?
т.е. полностью перенести туда свою стратегию?
Таки да! Но учтите, что стакан чаще генерирует события. Поэтому нужен некоторый фильтр, чтобы отсеивать ненужное. Например, цены не поменялись, а только объёмы некоторых заявок...
В общем, имхо, итог такой.
Глобально есть 2 путя:
1) анализ окружения (подсос истории сделок, проверка открытой позиции или объёма позиции);
2) анализ транзакций.
Первое работает медленнее. Зато надёжнее. Нужен компромисс. Наверное здесь нужно смотреть на стратегию и от неё плясать...
Предполагаю, что инфа о сделке ещё не успела прийти. Вот тут (выделил красным) Вы полагаетесь на удачу. А она капризная дама :-))
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
Даже при ORDER_STATE_FILLED у Results.order может возникнуть проблема - Results.deal нулевой. 100%-е воспроизведение такой ситуации достигается на сервере FXOpen-MT5.
Рекомендую открыть много демок на разных серверах и добиться от кода полной работоспособности. Так сделал для MT4-библы. Поэтому с сабжем нет проблем.
Вариант OrderSend+Sleep(0) не работает медленней, чем OrderSend+OnTradeTransaction. Замерял. Поэтому второй вариант не для асинхронных транзакций не использую.
Вариант OrderSend+Sleep(0) - временный, т.к это недоратока разработчиков (не стоит приврдить это как пример :) ).
Кода поправят, останется только OrderSend