про быстрый рынок - страница 2

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

Как я указал ранее, три разных потока могут работать без конфликтов:
1) ручная операция в терминале
2) автоматический трейлинг терминала
3) любая торговая операция из эксперта
 
Такой вопрос. Запущенно N терминалов. Каждый торгует на своем аккаунте, но открывают сделки в одинаковое время. Какие могут быть проблемы?

Никаких. При разумном количестве терминалов.
Не спрашивайте только что такое "разумном количестве" - над этим каждый должен сам думать.
 
Огромное спасибо Renat за подробный расклад. Много что объясняет.


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


Не понял? :) Неправильный путь чего? Торговли или логики написания советника?

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

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

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

Спасибо за прояснение.
 
На реале такой необходимости(закрыть сразу множество ордеров) практически не будет. Чаще всего, большое количесвто ордеров (в 90 с лишним %) закрывает достаточно быстро брокер по стопауту :) И никаких проблем с исполнением.
 
На реале такой необходимости(закрыть сразу множество ордеров) практически не будет. Чаще всего, большое количесвто ордеров (в 90 с лишним %) закрывает достаточно быстро брокер по стопауту :) И никаких проблем с исполнением.


:)))
Я про реал и говорю. И работаю на реале. Стопы вещь необходимая в любом случае.
Но вопервых - стоп близко к цене не предвинешь.
Вовторых я вижу, что рынок развернулся и не хотелось бы терять разницу между ценой рынка и 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, а использовать то, что есть максимально эффективно.
Причина обращения: