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

 
VIX XIV:
Добрый вечер. Как должен выглядеть код, который выбирает самый последний закрытый ордер. Неужели вот так: "OrderSelect(OrdersHistoryTotal, SELECT_BY_POS, MODE_HISTORY"?

Вот так должен примерно выглядеть ваш блок:

int a=-1;

for(int is=OrdersHistoryTotal(); is>=0; is--)

 {

  if(OrderSelect(is, SELECT_BY_POS, MODE_HISTORY))

   {

    if(OrderType()==OP_BUY) {a=OrderType(); break;}

    if(OrderType()==OP_SELL){a=OrderType(); break;}

   }

 }  

if(a==OP_BUY) Comment("Найден закрытый последний в списке ордер на покупку.");

if(a==OP_SELL) Comment("Найден закрытый последний в списке ордер на продажу.");


 

Читал давно, что нет гарантии в хронологическом расположении ордеров в OrdersHistoryTotal, и нужно проверять по дате закрытия.

 

@Valerius, вставить как код религия не позволяет? Или чего не хватает?

 
Сергей Таболин:

@Valerius, вставить как код религия не позволяет? Или чего не хватает?

А вот по человечески можно было сделать так, что бы можно было вставлять код как код в редакторе МТ?

Ни одна ваша кнопка у меня так не работает, как надо.

 
Valerius:

А вот по человечески можно было сделать так, что бы можно было вставлять код как код в редакторе МТ?

Ни одна ваша кнопка у меня так не работает, как надо.

Можно по хитрому. Скопировать из любого кода что угодно и вставить. И туда вставить свой код. Минус не работает подсветка при таком способе))))


if(OrderSelect(is,SELECT_BY_POS,MODE_TRADES))  Это чужой код и его можно править))))
 
Valerius:

По первому вопросу нужно сделать такую функцию:


for(int is=OrdersTotal()-1; is>=0; is--)
 { 
  if(OrderSelect(is,SELECT_BY_POS,MODE_TRADES))  
   {//Закрытие ордеров, которые были открыты в пятницу не текущей недели. При этом в текущей неделе в пятницу мы не закрываем ордера.
    if(OrderMagicNumber()==Magic && TimeDayOfWeek(TimeCurrent())==5 &&  TimeDayOfWeek(OrderOpenTime())==5 && TimeDayOfYear(OrderOpenTime())<TimeDayOfYear(TimeCurrent()))
     {    
      if (OrderType()==OP_BUY)   result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); 
      if (OrderType()==OP_SELL)  result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE); 
      if(!result) {error=GetLastError(); Print("LastError = ",error, " ",Symbol()); }
      else        {error=0;}
    else  
     {Print("NoMagic ", OrderMagicNumber());}  // for Debug
  else 

   {Print( "Error when order select ", GetLastError());} 


По второму вопросу, должна быть такая запись:

OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(MarketInfo(nameSym,MODE_ASK)), 3, clrNONE); 

Удачи.

Спасибо! по первому вопросу все сработало как надо

по второму - некорректное количество параметров. Исправил так - OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);

 только теперь не совсем понял редакцию с первого моего варианта (я его скопировал откуда то ) ...

 
Здравствуйте!
Может кто-нибудь толково объяснить принцип работы trailing take profi? Про Трейлинг Стоп инфа имеется в справке по MT5, а про Трейлинг Профит инфы нет. Когда я выставляю в советнике "Stop Loss trailing level (in points)", например, равным 100, то понимаю, что трал активируется, когда цена пройдет в нужном направлении 100 пунктов. Но что значит, к примеру, "Take Profit trailing level (in points)" = 10?
 
altec3:
Здравствуйте!
Может кто-нибудь толково объяснить принцип работы trailing take profi? Про Трейлинг Стоп инфа имеется в справке по MT5, а про Трейлинг Профит инфы нет. Когда я выставляю в советнике "Stop Loss trailing level (in points)", например, равным 100, то понимаю, что трал активируется, когда цена пройдет в нужном направлении 100 пунктов. Но что значит, к примеру, "Take Profit trailing level (in points)" = 10?

TakeProfit исчисляется в пунктах, а ТрейлингТейкПрофит в валюте депозита. ТрейлингТейкПрофит прибыль в валюте депозита с одного или нескольких ордеров и ставит стопы ордеров в определенной в настройках сумме, то есть на вычисленном расстоянии.

Например в настройках указан ТрейлингТейкПрофит в 100 баксов. Как только цена  наберет профитов в 100 баксов и уйдет дальше, программа вычисляет расстояние, соответствующее 100 баксам и выставляет все стоплоссы ордеров в рассчитанном месте, если это позволяет. Как только цена откатит до стоплосов, то все ордера закроются. В принципе это тот же самый ТрейлинСтоп, только расчет в валюте депо и тралит прибыль. Возможно где-то ошибся, но принцип таков. Надеюсь разъяснил.

 
Как мне через python запросить все бары из терминала указанного тф?
 
Правильно ли понимаю, что в мт5 заместо времени закрытия позиции необходимо смотреть POSITION_TIME_UPDATE ?