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

 
Taras Slobodyanik:

- смотрим время крайнего бара 
- складываем всё что закрылось на этом баре
- отнимаем от текущего баланса

и так по очереди все бары

А без арифметики никак? Может, можно написать какую-то пользовательскую функцию?

 
novichok2018:
Я наверное непонятно сформулировал вопрос, раз ответы не в тему. Мне не важно, закрылись позиции, или нет, и тем более не интересует стоимость тика. Необходимо узнать, какой баланс счета был на момент закрытия 1, 2, 3 баров определенного символа для сравнения. На этих барах открывались и закрывались позиции, в том числе и на других символах: где-то позиции закрывались в плюс, где-то в минус, где-то еще не закрылись, следовательно баланс менялся. Нужно узнать конкретные значения. Спасибо. 

штатных функций нет, как впрочем нет и поиском по форуму или еще каким способом

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

в тестере Вы можете очень просто смоделировать эту ситуацию, описываете в глобальной видимости переменную и в OnTick проверяете условие if(OrderTotal()==0) StartBalance = AccountBalance();

и затем при открытии ордеров в тестере у Вас есть начальное значение баланса.... Вы к нему можете прибавлять каждый бар значение профита ордеров, можете эти значения добавить в массив или список


но чтобы работать таким кодом на счету с несколькими советниками нужно задачу сформулировать не в поиске баланса n- баров назад, а суммарном профите открытых ордеров, нет открытых ордеров не пишем, открыли ордер - начали запись профита каждый бар в массив, т.е. ищите возможность изменить логику своей ТС не в привязке к балансу, а в привязке к профиту открытых ордеров и / или по профиту закрытых ордеров в истории терминала за период (день, час ?)

 
Igor Makanu:

штатных функций нет, как впрочем нет и поиском по форуму или еще каким способом

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

в тестере Вы можете очень просто смоделировать эту ситуацию, описываете в глобальной видимости переменную и в OnTick проверяете условие if(OrderTotal()==0) StartBalance = AccountBalance();

и затем при открытии ордеров в тестере у Вас есть начальное значение баланса.... Вы к нему можете прибавлять каждый бар значение профита ордеров, можете эти значения добавить в массив или список


но чтобы работать таким кодом на счету с несколькими советниками нужно задачу сформулировать не в поиске баланса n- баров назад, а суммарном профите открытых ордеров, нет открытых ордеров не пишем, открыли ордер - начали запись профита каждый бар в массив, т.е. ищите возможность изменить логику своей ТС не в привязке к балансу, а в привязке к профиту открытых ордеров и / или по профиту закрытых ордеров в истории терминала за период (день, час ?)

Понял. Спасибо за развернутый ответ.

 

Здравствуйте! Как  получить входные параметры ПОСЛЕ создании хэндла технического индикатора который создан с помощью iCustom.

К примеру

iCustom(NULL,0,"name_indicator",1,2,3) - как получить входные параметры 1,2 и 3?

 
Здравствуйте, подскажите, пожалуйста как узнать текущую просадку в процентах?
 
nalyk:
Здравствуйте, подскажите, пожалуйста как узнать текущую просадку в процентах?

Ведите учёт эквити

 
nalyk:
Здравствуйте, подскажите, пожалуйста как узнать текущую просадку в процентах?
double drawdown = AccountProfit()*100/AccountBalance();
 

Можно ли применить шаблон к структуре и к классу, чтобы внутри них объявить переменные шаблонного типа чтобы в последующем работать с этими переменными и обращаться к ним?Со структурой пробовал так.

templ(T)struct A
{
  T val;
  int ind;
};

Компилируется но присвоить Имя структуре не даёт.

 
Здраствуйте! Помогите сделать следующее:
Надо сделать целевую прибыль для каждой открытой позиции в рынке, но не общую, а отдельную!
пример: открылся EURUSD и у него в настройках стоит целевая прибыль 1$ и как только она достигла ее, то позиция сама закрылась, только она!
и так каждая валютная пара должна работать сама по себе, а не по общему профиту!

Код общего профита по всем парам я нашла:
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в валюте депозита |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            p+=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(p);
}
помогите переделать для каждой валютной пары отдельно......Заранее благодарна!
 
ponochka:
Здраствуйте! Помогите сделать следующее:
Надо сделать целевую прибыль для каждой открытой позиции в рынке, но не общую, а отдельную!
пример: открылся EURUSD и у него в настройках стоит целевая прибыль 1$ и как только она достигла ее, то позиция сама закрылась, только она!
и так каждая валютная пара должна работать сама по себе, а не по общему профиту!

Код общего профита по всем парам я нашла:
помогите переделать для каждой валютной пары отдельно......Заранее благодарна!

Передайте в первый параметр этой функции строку с Вашей парой и будет считать прибыль только по этой паре.

Передайте во второй параметр этой функции тип операции (бай или сел) и будет считать прибыль только по этой операции.

И так же магик номером. Это универсальная функция.

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