Реквоты и функция OrderSend ... - страница 2

 
Нет никакого способа гарантировать открытие ордера на быстром рынке.

Это обычное заблуждение трейдеров, что слиппаж в 100 пунктов должен гарантировать 100% открытие позиции. Если бы такое позволялось, то по форумам пошли бы заявления - "меня на 50, 70, 100 пунктов хуже открыли!". Никто бы не уточнял, что заявка была на новостях и что трейдер сам выставил такой уровень допуска. Да и у брокеров был бы соблазн открыть позицию сильно хуже.
 

Так... Снова от Адама. ;)))

Ренат!
Лично я закончил "борьбу с ДэЦами" и прочее ровно тогда,
когда впервые появился на форуме Вашей компании...
т.е. уже относительно давненько... :)

Тут же, в этой теме интересует не способы как ходить по форумам
с криками о том, что меня полохо открыли\закрыли...
А то, как добиться окрытия\закрытия ордера по ценам вернувшим сервером!

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

Логика подсказывает что для этого надо всего лишь принять новые цены и повторить OrderSend...
- посылаем запрос по 1.1234, слиппаж 2*спред (например 8 пип)
- сервер реквотирует предлагая 1.1258
- скрипт автоматом соглашается и посылает новый запрос по 1.1258
- и т.д.... пока не получим конечный результат...

Вот и весь вопрос.
Не более и не менее.

ЗЫ: Игорь. Посмотрю конечно.
Но это слишком сложно... пока...

 
kombat, посмотри https://www.mql5.com/ru/forum/49732. Вопрос совсем не тривиальный. Ну и поищи еще что там по этой теме, она с бородой.
 
KimIV:
//+----------------------------------------------------------------------------+
//|  Открытие позиции                                                          |
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL - текущий символ)                 |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
  color  clOpen;
  double pp, pAsk, pBid;
  int    dg, err, it, ticket;
  string lsComm=WindowExpertName()+" "+GetNameTF(Period());
 
  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pAsk=MarketInfo(sy, MODE_ASK);
    pBid=MarketInfo(sy, MODE_BID);
    if (op==OP_BUY) pp=pAsk; else pp=pBid;
    pp=NormalizeDouble(pp, dg);
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*75);
        if (ExistPositions(sy, op, mn)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      }
      // Вывод сообщения об ошибке
      Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pAsk," Bid=",pBid," sy=",sy," ll=",ll," op=",GetNameOP(op),
            " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
      if (pAsk==0 && pBid==0) Message("Проверьте в Обзоре рынка наличие символа "+sy);
      // Реакция на ошибку
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      

Что за переменная gdDisabled ?

И ещё ошибки:

'Message' - function is not defined E:\MetaTrader - WHC\experts\N0_BullskBears_v1.1_MM.mq4 (393, 31)

'break' - 'break' or 'continue' used within some cycle only E:\MetaTrader - WHC\experts\N0_BullskBears_v1.1_MM.mq4 (395, 55)
'break' - 'break' or 'continue' used within some cycle only E:\MetaTrader - WHC\experts\N0_BullskBears_v1.1_MM.mq4 (397, 26)
'break' - 'break' or 'continue' used within some cycle only E:\MetaTrader - WHC\experts\N0_BullskBears_v1.1_MM.mq4 (399, 59)

В функции GetNameOP:
'op' - internal error E:\MetaTrader - WHC\experts\N0_BullskBears_v1.1_MM.mq4 (440, 11)

В функции GetNameTF: 'TimeFrame' - internal error E:\MetaTrader - WHC\experts\N0_BullskBears_v1.1_MM.mq4 (458, 11)

Не могли бы вы дать функцию Message? И почему возникают другие ошибки? Чего то не хватает?

 
Lukyanov писал (а):
Что за переменная gdDisabled ?

Это флаг (глобальная переменная логического типа) блокировки советника при ошибках 2, 64, 65 и 133. Так рекомендуют разработчики МТ4 здесь.

А обрабатывается флаг блокировки таким образом:

void start() {
  if (gdDisabled) return;
}

Lukyanov писал (а):
Не могли бы вы дать функцию Message?
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Вывод сообщения в коммент и в журнал                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - текст сообщения                                                     |
//+----------------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
}

Lukyanov писал (а):
И почему возникают другие ошибки? Чего то не хватает?

Здесь я выкладывал все функции в составе тестового советника. Он компилировался у меня без ошибок.

 
Спасибо, проглядел ту тему. П.С.: У меня все советники на половину состоят из Ваших функций. Очень благодарен Вам за помощь.
 
kombat:

Так... Снова от Адама. ;)))

Ренат!
Лично я закончил "борьбу с ДэЦами" и прочее ровно тогда,
когда впервые появился на форуме Вашей компании...
т.е. уже относительно давненько... :)

Тут же, в этой теме интересует не способы как ходить по форумам
с криками о том, что меня полохо открыли\закрыли...
А то, как добиться окрытия\закрытия ордера по ценам вернувшим сервером!

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

Логика подсказывает что для этого надо всего лишь принять новые цены и повторить OrderSend...
- посылаем запрос по 1.1234, слиппаж 2*спред (например 8 пип)
- сервер реквотирует предлагая 1.1258
- скрипт автоматом соглашается и посылает новый запрос по 1.1258
- и т.д.... пока не получим конечный результат...

Вот и весь вопрос.
Не более и не менее.


ЗЫ: Игорь. Посмотрю конечно.
Но это слишком сложно... пока...

На быстром рынке кнопкодавы возбуждаются и посылают слишком частые запросы на сервер. Сервер просто не успевает обрабатывать заявки, ну и реквотит всех подряд. Если есть большое желание влезть таки в рынок можно входить отложенныим ордером. Отложенный ордер ставится на большом расстоянии, а для входа модифицирется или тралится на максимально возможно близкое расстояние к рынку.
 
FION писал (а):
На быстром рынке кнопкодавы возбуждаются и посылают слишком частые запросы на сервер. Сервер просто не успевает обрабатывать заявки, ну и реквотит всех подряд. Если есть большое желание влезть таки в рынок можно входить отложенныим ордером. Отложенный ордер ставится на большом расстоянии, а для входа модифицирется или тралится на максимально возможно близкое расстояние к рынку.

1. Как раз, для того шоб небыло шквала запросов\реквотов эта модель и позволит
отработать ордер за два прохода: первый посыл и соглашение на любую цену при реквоте.

2. Хотя для "влезания по любому" в рынок есть более простое и более надёжное средство,
кое и юзаю по полной: исполнение по рынку ;)))
Однако сие присутствует не у всех ДЦ, особенно в тех где хотелось бы...

3. Собственно по теме был вопрос:
как обработать реквот советником дабы тот был согласен на всё... :)))

 
kombat:
FION писал (а):
На быстром рынке кнопкодавы возбуждаются и посылают слишком частые запросы на сервер. Сервер просто не успевает обрабатывать заявки, ну и реквотит всех подряд. Если есть большое желание влезть таки в рынок можно входить отложенныим ордером. Отложенный ордер ставится на большом расстоянии, а для входа модифицирется или тралится на максимально возможно близкое расстояние к рынку.

1. Как раз, для того шоб небыло шквала запросов\реквотов эта модель и позволит
отработать ордер за два прохода: первый посыл и соглашение на любую цену при реквоте.

2. Хотя для "влезания по любому" в рынок есть более простое и более надёжное средство,
кое и юзаю по полной: исполнение по рынку ;)))
Однако сие присутствует не у всех ДЦ, особенно в тех где хотелось бы...

3. Собственно по теме был вопрос:
как обработать реквот советником дабы тот был согласен на всё... :)))

Цель какая ? Войти в рынок быстрее, так?Быстрое "исполнение по рынку" на новостях, уже не будет "быстрым" после дополнительных запросов от реквот. За это время базар "пролетит" 70 процентов всего движения. Я предложил действенный метод для входа и кстати и выхода, потому что у многих ДЦ фильтр настроен так, что в убытке он прекрасно и шустро закрывает, а при закрытии в профите - начинает замирать. Модификации же ордеров, как правило, происходят достаточно быстро.
 
FION писал (а):
Цель какая ? Войти в рынок быстрее, так?Быстрое "исполнение по рынку" на новостях, уже не будет "быстрым" после дополнительных запросов от реквот. За это время базар "пролетит" 70 процентов всего движения. Я предложил действенный метод для входа и кстати и выхода, потому что у многих ДЦ фильтр настроен так, что в убытке он прекрасно и шустро закрывает, а при закрытии в профите - начинает замирать. Модификации же ордеров, как правило, происходят достаточно быстро.


Цель скорее НЕбстрее а как можно более гарантированно войти максимум со второго пинка...

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

В дилингах же с инстантом пользую девиацию, как правило 100 для иммитации "по рынку".
Но! это всё вручную, а вот советников как заставить принимать ответную_реквотную_цену
без особых на то церемоний и соответственно как можно с меньшими итерациями на тему: а надо ли? ;)))

И как отметил выше, сие возможно избавит от лишней долбёжки сервера запросами.
А он в свою очередь терминал ответами...