Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1819

 
Valeriy Yastremskiy #:
Такого нет. Это не процедурный язык. Здесь программа строго сверху вниз. И вызовы функций все решают есть циклы, если то. И ООП)
Понял. Понял. Спасибо за разьяснение.
 
Tretyakov Rostyslav #:

Спасибо! 

 
Tretyakov Rostyslav #:

Привет

    if(OrderSelect(FindTicketOrder(), SELECT_BY_TICKET,MODE_TRADES)) 
    { 
      if(OrderProfit()<=-x);
        {
         OrderClose(FindTicketOrder(),OrderLots(),OrderClosePrice(),iSlippage,clrPink);
        }
    } 
  else 
    Print("OrderSelect() вернул ошибку - ",GetLastError());

Получил по тикету прибыль ордера, xочу закрыть при достижении -x.

А получаю закрытие подряд всеx ордеров.  

Подскажи как правильно?

 
Alexander Avksentyev #:

Привет

Получил по тикету прибыль ордера, xочу закрыть при достижении -x.

А получаю закрытие подряд всеx ордеров.  

Подскажи как правильно?

Попробуй так

 int min_ticket=FindTicketOrder();
    if(OrderSelect(min_ticket, SELECT_BY_TICKET,MODE_TRADES)) 
    { 
      if(OrderProfit()<=-x);
        {
         OrderClose(min_ticket,OrderLots(),OrderClosePrice(),iSlippage,clrPink);
        }
    } 
  else 
    Print("OrderSelect() вернул ошибку - ",GetLastError());

а вообще целиком выкладывай функцию, чтобы было понятно что ты делаешь

//+------------------------------------------------------------------+
void Функция()
  {
   ...твой код, возможные ошибки;
  }
//+------------------------------------------------------------------+
 
Alexander Avksentyev #:

Привет

Получил по тикету прибыль ордера, xочу закрыть при достижении -x.

А получаю закрытие подряд всеx ордеров.  

Подскажи как правильно?

Как это у вас идет закрытие всех ордеров, если я вижу только один вызов OrderClose?

Не очень понятно где данный код вообще вызывается... Алгоритм робота также неясен...
 
Mihail Matkovskij #:

Как это у вас идет закрытие всех ордеров, если я вижу только один вызов OrderClose?

Закрывает ордер как только тот открылся

 
Tretyakov Rostyslav #:
Это не то что ты хотел - это пример. Я делал советника для полуавтоматической торговли.


То что ты хочешь надо писать самому)

Если что я помогу.

Итак, распишу конкретнее что мне нужно для такого Fast Pending Orders Panel EA, частично я куски кода из этого списка понаходил (процентов 20%), но остальное надо спрашивать у вас, коллеги.


1) оболочка: отображение как таковое табло с кнопками на графике: BUY_lp(lower ASK in___pips), SELL_hp (higher BID in___pips) - число в пипсах вводится в ручную на табло, BUY_lt (lower ASK up to____seconds),SELL_ht (higher BID up to____seconds) - число в секундах вводится в ручную на табло, CLOSE_buys, CLOSE_sells - закрыть все ордера. 

     а) код создания кнопки на графике; сюда же табло как фоновый объект;

     б) код ввода значений в это табло (пипсы, секунды) специальные поля под это; 

     в) сохранения значения пипсов в некий файл памяти, где после нажатия на кнопку фиксируется цена и прибавляется/отнимается количество пипсов для той цены, по которой нужно войти в рынок;

     г) сохранения значения секунд в некий файл памяти, где постоянно подсчитывается минимальное/максимальное значение цены за выбранный "в секундах" период;

2) внутри: исполнение.

      а) считывание из файла значения в пипсах и зафиксированной цены после нажатия на кнопку BUY_lp или SELL_hp, чтобы ее сравнивать с текущей ценой;

      б) считывание из файла значения в секундах и меняющейся максимальной/минимальной цены после нажатия на кнопку BUY_lt  или SELL_ht, чтобы ее сравнивать с текущей ценой;

      в) когда текущая цена сравняется с необходимым значением - войти в рынок(открыть ордер);

      г) кнопка закрыть ордер или все ордера, кнопка в зависимости от режима исполнения должна работать по разному, если был вход "по пипсам", то соответственно после закрытия на соизмеримое число пипсов цена закрытия должна отличаться в "лучшую" сторону (ожидание этой цены после нажатия на "закрыть"), если же "по секундам", то лучшая цена должна подсчитываться за обозначенный период (ожидание этой цены, но не ниже/выше на момент нажатия на кнопку).

 
Alexander Avksentyev #:

Закрывает ордер как только тот открылся

Ну да. Профит всегда имеет отрицательное значение в момент после входа из-за наличия спреда... Попробуйте уменьшить значение x.

И лучше сделать свою функцию вычисления профита в пунктах (разумеется если не стоит задача задавать его в валюте депозита).
 
Mihail Matkovskij #:

Ну да. Профит всегда имеет отрицательное значение в момент входа из-за наличия спреда... Попробуйте уменьшить значение x.

-x меньше чем спред, вывести на Print 

if(OrderProfit()<=-x);

будет true если условия совпадают. добавляю команду закрытия. закрывает сразу 

 
Mihail Matkovskij #:

Ну да. Профит всегда имеет отрицательное значение в момент после входа из-за наличия спреда... Попробуйте уменьшить значение x.

И лучше сделать свою функцию вычисления профита в пунктах (разумеется если не стоит задача задавать его в валюте депозита).

Можно и пункты, особо нет разницы. Xотелось просто по проще сделать

Причина обращения: