Я правильно понимаю, что если в советнике стоит трейлинг стоп, в терминале включен трейлинг стоп и я еще с руки пытаюсь передвинуть стоп или закрыть позицию (заметьте, что в каждом случае свой канал), то в принципе тоже могут быть накладки одновременной торговли, и сервер построит заявки в очередь на исполнение, или одну возьмет, а другие отклонит?
Как я указал ранее, три разных потока могут работать без конфликтов: 1) ручная операция в терминале 2) автоматический трейлинг терминала 3) любая торговая операция из эксперта
Огромное спасибо Renat за подробный расклад. Много что объясняет.
Есть такая мысль: если эксперт совершает множество сделок (десятки и сотни) в сутки, то это явно неправильный путь. Да, он может и будет работать в демо. Но в реальном исполнении будут серьезные проблемы.
Не понял? :) Неправильный путь чего? Торговли или логики написания советника?
Неправильный путь использования терминала, написания советников и самого трейдинга в первую очередь. На торговых серверах каждый день генерируется статистика, по которой видна активность разных счетов. Некоторые умудряются на демо-счетах в сутки несколько десятков тысяч торговых транзакций проводить - их адреса зачастую блокируются администраторами за чрезмерную активность.
Практически всегда это неправильно написанные эксперты или явное непонимание самого трейдинга, когда человек думает, что одна торговая транзакция в 2-5 секунд - это нормально.
На реале такой необходимости(закрыть сразу множество ордеров) практически не будет. Чаще всего, большое количесвто ордеров (в 90 с лишним %) закрывает достаточно быстро брокер по стопауту :) И никаких проблем с исполнением.
На реале такой необходимости(закрыть сразу множество ордеров) практически не будет. Чаще всего, большое количесвто ордеров (в 90 с лишним %) закрывает достаточно быстро брокер по стопауту :) И никаких проблем с исполнением.
:)))
Я про реал и говорю. И работаю на реале. Стопы вещь необходимая в любом случае.
Но вопервых - стоп близко к цене не предвинешь.
Вовторых я вижу, что рынок развернулся и не хотелось бы терять разницу между ценой рынка и S/L.
Тем более, что это = разница*количество позицийй.:))
Если используются несколько терминалов на одном счете, то ничего хорошего не получится. Сервер не примет более трех одновремененных заявок и будет отказывать в приеме новых заявок пока не завершатся предыдущие.
Можно ли изменить ограничение в 3 заявки на один счет или нет? Если да, то кто это может сделать? С чем связано это ограничение? Какая ошибка будет выдаваться, если превышено число одновременных заявок? Пример: 10 экспертов сопровождают 10 открытых позиций на одном счету и, при открытии новой свечи, подтягивают стоп. Как правильно их развести?
Можно ли изменить ограничение в 3 заявки на один счет или нет? Если да, то кто это может сделать? С чем связано это ограничение? Какая ошибка будет выдаваться, если превышено число одновременных заявок? Пример: 10 экспертов сопровождают 10 открытых позиций на одном счету и, при открытии новой свечи, подтягивают стоп. Как правильно их развести?
Я думаю так. Раз торгуют эксперты, то для них всего один канал. И придется всех построить в очередь. А два других канала свободны ( один для трейлингов терминала, другой для ручных сделок). Советники в эти каналы не могут залезть по определению.
Вывод: разруливай в советнике. Я сделал такую вещь, пока работает на ура:
А также посмотреть в справке, какие ещё бывают Market information identifiers, кроме MODE_STOPLEVEL.
Ну, и тип ордера проверить OrderType() == OP_BUY.
Кстати, если IsTradingAllowed() возвращает false в случае занятости "торгового канала", то как отличить случай собственно занятости этого "канала", от случая установок настроек, когда снята галочка "Разрешить советнику торговать"?
Я вообще-то пользовался этой функцией для того, чтобы определить состояние настроек, сообщить пользователю об этом и подсказать, где искать галочку.
Почему-то в справке по IsTradingAllowed() тема "торговых каналов" не раскрыта.
Я не удивлюсь, если ответ на вопрос, как отличить - никак. :)
Но на самом деле это не смешно.
Не придирайтесь к мелочам :)
Я выложил не готовый к использованию код, расчитанный на все рынки и ДЦ, а вырезку работы Трейлинг стопа в своем советнике.
У меня не самоцель - объять необьятное.
Но кому этот блок интересен, может доработать под себя.
Что касается IsTradeAllowed(), то со своей функцией в моем коде она справляется прекрасно.
И вообще, я считаю, нужно не придираться к языку MQL4, а использовать то, что есть максимально эффективно.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Как я указал ранее, три разных потока могут работать без конфликтов:
1) ручная операция в терминале
2) автоматический трейлинг терминала
3) любая торговая операция из эксперта
Никаких. При разумном количестве терминалов.
Не спрашивайте только что такое "разумном количестве" - над этим каждый должен сам думать.
Есть такая мысль: если эксперт совершает множество сделок (десятки и сотни) в сутки, то это явно неправильный путь. Да, он может и будет работать в демо. Но в реальном исполнении будут серьезные проблемы.
Не понял? :) Неправильный путь чего? Торговли или логики написания советника?
Неправильный путь использования терминала, написания советников и самого трейдинга в первую очередь. На торговых серверах каждый день генерируется статистика, по которой видна активность разных счетов. Некоторые умудряются на демо-счетах в сутки несколько десятков тысяч торговых транзакций проводить - их адреса зачастую блокируются администраторами за чрезмерную активность.
Практически всегда это неправильно написанные эксперты или явное непонимание самого трейдинга, когда человек думает, что одна торговая транзакция в 2-5 секунд - это нормально.
Я вопрос поднял потому, что не раз была необходимость закрыть много ордеров по рынку сразу или в краинем случае трейлить в безубыток. :)
Спасибо за прояснение.
:)))
Я про реал и говорю. И работаю на реале. Стопы вещь необходимая в любом случае.
Но вопервых - стоп близко к цене не предвинешь.
Вовторых я вижу, что рынок развернулся и не хотелось бы терять разницу между ценой рынка и S/L.
Тем более, что это = разница*количество позицийй.:))
Можно ли изменить ограничение в 3 заявки на один счет или нет?
Если да, то кто это может сделать?
С чем связано это ограничение?
Какая ошибка будет выдаваться, если превышено число одновременных заявок?
Пример:
10 экспертов сопровождают 10 открытых позиций на одном счету и, при открытии новой свечи, подтягивают стоп.
Как правильно их развести?
Можно ли изменить ограничение в 3 заявки на один счет или нет?
Если да, то кто это может сделать?
С чем связано это ограничение?
Какая ошибка будет выдаваться, если превышено число одновременных заявок?
Пример:
10 экспертов сопровождают 10 открытых позиций на одном счету и, при открытии новой свечи, подтягивают стоп.
Как правильно их развести?
Я думаю так. Раз торгуют эксперты, то для них всего один канал. И придется всех построить в очередь. А два других канала свободны ( один для трейлингов терминала, другой для ручных сделок). Советники в эти каналы не могут залезть по определению.
Вывод: разруливай в советнике.
Я сделал такую вещь, пока работает на ура:
ВНИМАНИЕ стоп двигается до зоны безубытка
while(!IsStopped()) { if(OrderStopLoss()<noloss) /*noloss - цена без убытка*/ { if(OrderStopLoss()<Bid-Point*11) { Print("Есть возможность тянуть Buy"); if(IsTradeAllowed()==true) { Print("Свободно, модифицируем"); modify=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*11, OrderTakeProfit(),0,Blue); if(modify==true) { Print("Ордер модифицирован ",OrderSymbol()); break; } else { int error3=GetLastError(); Print("Ошибка модификации ордера ",OrderSymbol()," ",error3); } } else Print("Занято, модифицируем позже"); } Sleep(500); RefreshRates(); } else {Print("Стоп в безубытке!"); break;} }если нужно, чтобы стоп двигался постоянно, то убеоите первое условие.
Такая структура позволяет двигать стопы, когда торгуют много советников, не обращая внимание на тики.
Советую вместо "магического" числа 11 в Вашем коде (из темы "про быстрый рынок"), в частности в строках:
if(OrderStopLoss()<Bid-Point*11)и
modify=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*11, OrderTakeProfit(),0,Blue);применить вызов MarketInfo(OrderSymbol(),MODE_STOPLEVEL):
if(OrderStopLoss()<Bid-Point*MarketInfo(OrderSymbol(),MODE_STOPLEVEL))и
modify=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*MarketInfo(OrderSymbol(),MODE_STOPLEVEL), OrderTakeProfit(),0,Blue);А также посмотреть в справке, какие ещё бывают Market information identifiers, кроме MODE_STOPLEVEL.
Ну, и тип ордера проверить OrderType() == OP_BUY.
Кстати, если IsTradingAllowed() возвращает false в случае занятости "торгового канала", то как отличить случай собственно занятости этого "канала", от случая установок настроек, когда снята галочка "Разрешить советнику торговать"?
Я вообще-то пользовался этой функцией для того, чтобы определить состояние настроек, сообщить пользователю об этом и подсказать, где искать галочку.
Почему-то в справке по IsTradingAllowed() тема "торговых каналов" не раскрыта.
Я не удивлюсь, если ответ на вопрос, как отличить - никак. :)
Но на самом деле это не смешно.
Я выложил не готовый к использованию код, расчитанный на все рынки и ДЦ, а вырезку работы Трейлинг стопа в своем советнике.
У меня не самоцель - объять необьятное.
Но кому этот блок интересен, может доработать под себя.
Что касается IsTradeAllowed(), то со своей функцией в моем коде она справляется прекрасно.
И вообще, я считаю, нужно не придираться к языку MQL4, а использовать то, что есть максимально эффективно.