[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 47

 
Tiken123:

если вам известна функция подсчёта общего баланса убытка ЗАКРЫТЫХ позиций по SL   и  общего баланса ОТКРЫТЫХ профитных сделок, прошу написать.

Подсчёт баланса убытка нужно начинать с последнего максимального значения депозита 

 

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

Если нужно и по открытым ордерам, добавьте второй цикл for для выборки не в истории, а по критерию OrdersTotal() :  for(int n=1; n<=OrdersTotal(); n++) 

И досуммируйте полученные значения в те же переменные profit и loss . 

//+----------------------------------------------------------------------------+
// Прибыльно или убыточно закрылся последний ордер, и возврат типа такого ордера
int fHistory(){
  profit = 0; loss = 0;
  for(int i=OrdersHistoryTotal(); i >= 0; i--){               // Выборка в истории
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){    // Если есть следующий в истории
        if(OrderMagicNumber()!=magN) continue;                // Ордера не нашего эксперта

        if(OrderProfit() > 0 ) profit = profit+OrderProfit(); // Если прибыль по посл.ордеру - суммируем

        if(OrderProfit() < 0 ) loss = loss + OrderProfit();   // Если убыток по посл.ордеру - суммируем

     }
  }
  return(-1);
}
 
Twilight:

К примеру мне надо узнать сработал ли отложенный бай лимит и если сработал, то по какой цене и после этого выставить новый .

Отслеживайте на каждом тике наличие ордера с типом OP_BUYLIMIT при помощи функции OrderType(), когда такой тип исчезнет, значит ордер открылся и стал типом  OP_BUY.  Здесь перечислены все 6 типов. С помощью функции OrderOpenPrice() можете узнать по какой цене был открыт ордер.
 
Twilight:

Как узнать что ордер сработал по трейлинг стопу  и после сработки трейлинга выставить новые ордера?

Сработал, в смысле закрылся или модифицировался (передвинулся) ?
Если в смысле закрылся, Вам нужно знать, что он просто закрылся? Или закрылся именно по СтопЛосу ? (Может же закрыться и по ТейкПрофиту и по функциям OrderClose() или OrderCloseBy())
 

 Вот моя функция контроля нового бара:

bool IsNewBar()
{
  if(bartime != iTime(Symbol(),i_trading_TF,0))
  {
    bartime = iTime(Symbol(),i_trading_TF,0);
    return(true);
  }
  
  return(false);
}

 где, i_trading_TF - переменная объявленная на глобальном уровне внешняя. Таким образом, когда я кидаю эксперт на график, в появившемся окне я могу назначить значение данной переменной, и, тем самым задать таймфрейм открытие бара на котором нужно контролировать.

 

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

bool IsNewBar(int i_trading_TF)
{
  if(bartime != iTime(Symbol(),i_trading_TF,0))
  {
    bartime = iTime(Symbol(),i_trading_TF,0);
    return(true);
  }
  
  return(false);
}

 Здесь таймфрейм передаётся через параметр функции. Но если переменная i_trading_TF объявлена на глобальном уровне, то по-моему нет смысла передавать её через формальный параметр, т.к. её видимость не ограниченна.

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

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

 
pu6ka:
Отслеживайте на каждом тике наличие ордера с типом OP_BUYLIMIT при помощи функции OrderType(), когда такой тип исчезнет, значит ордер открылся и стал типом  OP_BUY.  Здесь перечислены все 6 типов. С помощью функции OrderOpenPrice() можете узнать по какой цене был открыт ордер.
Не обязательно. Его можно и вручную грохнуть. Скорее, необходимо запомнить тикет отложки; как только обнаружится отсутствие отложки с этим тикетом и появление рыночной позиции с тем же тикетом - вот тогда да, сработал...
 
hoz:

 Вот моя функция контроля нового бара:

 где, i_trading_TF - переменная объявленная на глобальном уровне внешняя. Таким образом, когда я кидаю эксперт на график, в появившемся окне я могу назначить значение данной переменной, и, тем самым задать таймфрейм открытие бара на котором нужно контролировать.

 

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

 Здесь таймфрейм передаётся через параметр функции. Но если переменная i_trading_TF объявлена на глобальном уровне, то по-моему нет смысла передавать её через формальный параметр, т.к. её видимость не ограниченна.

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

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

 

 

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

 Это еще не все,   добавляем в передаваемые параметры наименование инструмента

bool IsNewBar(string Symb,int i_trading_TF)
{
  if(bartime != iTime(Symb,i_trading_TF,0))
  {
    bartime = iTime(Symb,i_trading_TF,0);
    return(true);
  }
  
  return(false);
}
и  анализмруем,  факт образования нового бара,  любого  инструмента , периода.
 
artmedia70:
Не обязательно. Его можно и вручную грохнуть. Скорее, необходимо запомнить тикет отложки; как только обнаружится отсутствие отложки с этим тикетом и появление рыночной позиции с тем же тикетом - вот тогда да, сработал...

 Да, так правильнее. Но проверить идею в тестере можно и так. Отследить четыре типа отложенника, нужно 4 дополнительные переменные по отслеживанию тикетов, а так можно только встроенными функциями воспользоваться. Хотя если отложенников по одному типу планируется больше одного, тогда точно нужно переменную по тикетам вводить. 
 
r772ra:

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

 Это еще не все,   добавляем в передаваемые параметры наименование инструмента

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

Вы считаете целесообразным в "механизм поиска нового бара" "привлекать" символ??? :)))
 
TarasBY:
Вы считаете целесообразным в "механизм поиска нового бара" "привлекать" символ??? :)))

Интересно было бы сделать универсальный контроль нового бара. Кстати - для этого все есть
 
Vinin:

Интересно было бы сделать универсальный контроль нового бара. Кстати - для этого все есть
Это Вы про "учесть" и ДЦ?! ;)
Причина обращения: