Найти ошибку в блоке - страница 2

 
geratdc_:
Мне самому интересно как это можно решить - выбрать конкретный ордер и высунуть инфу о его профите и комиссиях. У мну есть идея торговая на эту тему. А ещё интересней узнать про стратегию, задуманную автором)))

Самый простой способ.

Учёт ордеров - Создание обычной программы - Учебник по MQL4
Учёт ордеров - Создание обычной программы - Учебник по MQL4
  • book.mql4.com
Ранее упоминалось, что каких-либо жёстких правил для составления алгоритмов программ не существует. Вместе с тем, подавляющее большинство алгоритмов предполагает принятие торговых решений в зависимости от текущего состояния ордеров. В одних случаях, например, для открытия рыночного ордера требуется, чтобы на момент осуществления торговой...
 

Скопировал инфу, буду в офлайне изучать. Я просто с массивами ещё не сталкивался.


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


Допустим TP=1

Ордеров в серии 5

Предыдущие 3 ордера скажем закрыты с убытком -1,5, -2,0, -3,5.

Вот TP для рыночного ордера будет 1 + (7) = 8

Вот эта идея автора шерстить конкретные ордера и профиты смотреть по-моему в попад для этой стратегии.

 
Народ, а решение то будет? или нам самим предлагаете голову ломать...
 
Vladimir Mametov:
Проверка по магику у вас есть только для ордера i, а для i-n такой проверки нет, как и проверки по символ

Это есть. Делал вот так

double HistoryProfitOrder(string sy="", int op=-1, int mn=-1,int n=0) {
  int i;
  int k=OrdersHistoryTotal();
  double p;
  if (sy=="0") sy=Symbol();
  for (i; i<k; i++) {
    if (OrderSelect(i-n, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (op<0 || OrderType()==op) {
          if (mn<0 || OrderMagicNumber()==mn) {
           
           p = OrderProfit()+OrderSwap()+OrderCommission();
          }
        }
      }
    }
  }
  return(p);
}

но все равно возвращает не то...

Вот пример с тестера.

Специально открывал по 2 ордера, с разными магиками, а в окно комментариев выводил профит 10 последних профитов именно тех ордеров чьи магики интересны. 

ордерапример 2

интересует профит первых ордеров, а в комментах должен написать их профит с 1 по 10, но выдает как то странно и дублирует, пока не понятно 

 

Появляются мысли что по i-N и потом фильтровать по магическому числу не получится. Если i-6 , например, то он смотрит 6 ордер в истории, НО ОН МОЖЕТ БЫТЬ С ДРУГИМ МАГИКОМ, ведь ,как я понял, проверка идет по номеру позиции. 

Может есть смысл, как-то переделать,чтобы смотреть не по номеру позиции, а например, по времени закрытия?