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

 
Alexander Avksentyev #:

Доброго времени. Просьба помочь. 

Ищу закрытые ордера с отрицательной доxодностью.
По итоги пропускает, получаю результат не всеx отрицательныx ордеров. 

Учусь писать.

Рекомендую использовать отладчик для этой и подобных ситуаций.

 

Доброго времени.

Столкнулся с не пониманием того, как работает  ".Search()" в стандартной библиотеке.

Использую стандартный класс -   CiTime() - Класс является классом для доступа к сериям времени открытия баров.

int OnInit()
  {
//..
 TimeFrac=new CiTime();
   if(CheckPointer(TimeFrac)==POINTER_INVALID || !TimeFrac.Create(symbol_Name,TimeFr_Frac_D1))
      return INIT_FAILED;
   TimeFrac.Refresh();  
   TimeFrac.Sort();
//..

При попытке найти нужную мне Дату (класс такой же но Период другой) 

 int k = TimeFrac.Search(  Time.GetData(i)    );

Выдаёт ошибку:

'GetData' - parameter conversion not allowed

Пытался заменить 

Time.GetData(i)

на 

datetime Time_GetData  =  Time.GetData(i);

Не помогает...

Обратился к Помощи. Там написано, что

int  Search( 
   CObject*  element      // образец 
   ) const

и дикий пример применения. 

Получается, что поиск "Даты" в в стандартном классе по известной "Дате" из такого же класса - не возможен!?!? 

Только Элемент Класса 

CObject

Найти рабочий пример поиска именно Даты у этого класса, не нашёл.

К кому обращаться за помощью???

Спасибо.

 
Всем привет, просьба подсказать, что не так, почему то не работает
double Minus_profit(){
time=TimeCurrent();
 for (int i=0; i<OrdersHistoryTotal(); i++){
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
       if (OrderSymbol() == Symbol() && OrderMagicNumber()==Magic){
        if (OrderType() == OP_BUY || OrderType() ==OP_SELL){
         if (OrderCloseTime()>=time){
          if (OrderProfit()+OrderSwap()+OrderCommission()<=0){
              time=OrderCloseTime();
              profit+=OrderProfit();swap+=OrderSwap(); ;comis+=OrderCommission();
              result=profit+swap+comis;   
   }}}}}}return(result);
}
 
Alexander Avksentyev #:
Всем привет, просьба подсказать, что не так, почему то не работает
double Minus_profit(){
time=TimeCurrent();   // это текущее время
 for (int i=0; i<OrdersHistoryTotal(); i++){
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
       if (OrderSymbol() == Symbol() && OrderMagicNumber()==Magic){
        if (OrderType() == OP_BUY || OrderType() ==OP_SELL){
         if (OrderCloseTime()>=time){                  // условие не выполнимо, что бы время закрытия ордера в истории
          if (OrderProfit()+OrderSwap()+OrderCommission()<=0){     // было больше/позже чем текущее
              time=OrderCloseTime();
              profit+=OrderProfit();swap+=OrderSwap(); ;comis+=OrderCommission();
              result=profit+swap+comis;   
   }}}}}}return(result);
}
 

Вопрос. Для 4ки 

double  MarketInfo(

)

MODE_LOTSIZE

15

Размер контракта в базовой валюте инструмента

правильно ли понимаю, это стоимость 1 (одного) лота? и разделить на плечо, стоимость лота с учетом плеча в первой валюте инструмента.

MODE_MARGINREQUIRED

32

Размер свободных средств, необходимых для открытия 1 лота на покупку

есть ли аналог последнему в 5ке, если есть, не нашел.

Свободные от обязательств средства МаржинФрии понятно. Если их разделить на стоимость одного лота, получим сколько лотов мы сможем открыть без плеча, а умножить на плечо, сколько с плечом. Правильно или нет?

Зы. Правильно ли считаю для 5ки

double   Free   =AccountInfoDouble(ACCOUNT_MARGIN_FREE);                 // Свободн средства
double   One_Lot=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE);// Стоимость 1 лота без плеча
double   Step   =SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);       // Шаг изменен размера
long     Laverage=AccountInfoInteger(ACCOUNT_LEVERAGE); // Плечо
double   One_Lot_Lav=ND((One_Lot/Laverage)*Ask);      // Стоимость лота с плечом для бай
Lts=MathFloor(Free*Prots/One_Lot_Lav/Step)*Step;// Для открытия

НУ как то не хочется новую тему заводить, вроде нубский вопрос по трейдингу. Развейте сомнения)))))

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

В 5ке 

double One_Lot_Marga;

bool MargaC=OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1,Bid,  One_Lot_Marga);
Alert(One_Lot_Marga);
 

МТ5 не могу получить значение индикатора.

//--- входные параметры
input int bands_period= 20;        // Период Bollinger Bands
input int bands_shift = 0;         // Смещение относительно графика
input double deviation= 2;         // Стандартное отклонение
input double   Lot=0.5;            // Количество лотов для торговли
//--- глобальные переменные
int BolBandsHandle;                // хэндл индикатора Bolinger Bands
double BBUp[],BBLow[],BBMidle[];   // динамические массивы для хранения численных значений Bollinger Bands
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<60) // общее количество баров на графике меньше 60?
     {
      Alert("На графике меньше 60 баров, советник не будет работать!!");
      return(-1);
     }
//--- получить хэндл индикатора Bollinger Bands и DEMA
   BolBandsHandle=iBands(NULL,PERIOD_M30,bands_period,bands_shift,deviation,PRICE_CLOSE);
//--- Нужно проверить, не были ли возвращены значения Invalid Handle
   if((BolBandsHandle<0))
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(-1);
     }

   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- освобождаем хэндлы индикаторов
   IndicatorRelease(BolBandsHandle);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
Print(" BolBandsHandle = ",BolBandsHandle);
}
Что не так?
 
Александр #:

МТ5 не могу получить значение индикатора.

Что не так?
Хендл это уникальный номер, а значения буферов индикатора получаются путем копирования в массив.
 
Valeriy Yastremskiy #:
Хендл это уникальный номер, а значения буферов индикатора получаются путем копирования в массив.
Если не сложно покажите кодом. Мне нужно знать значение 1-го бара.Спасибо!
 
Александр #:
Если не сложно покажите кодом. Мне нужно знать значение 1-го бара.Спасибо!
В дороге. Доки почитайте, там вроде понятно.
 
Valeriy Yastremskiy #:
В дороге. Доки почитайте, там вроде понятно.
Я не смог понять. Слишком много всего...
Причина обращения: