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

 
Порт-моне тв:

Мне кто-то поможет?

Чтобы не заморачиваться с именами фигур, можно находить фигуру, даты точек которой самые свежие. А дальше, когда такая фигура найдена, уже вопрос к Вам: какое событие необходимо отслеживать? Пересечение горизонтальных сторон, вертикальных, сверху вниз, снизу вверх.

Наблюдать нужно в OnChartEvent.

 

Добрый день!

Как то раньше у меня получалось внести в код ограничение (limit) на отображение значений индикатора на мониторе. А с этим индикатором ничего не получается. Может быть поможете ввести лимит в код? Пожалуйста!

Спасибо!

Файлы:
Tipu_MACD.mq4  18 kb
 

Здравствуйте. Подскажите, пожалста.

Как рассчитать цену Bid при которой несколько позиций BUY будут иметь общий нулевой профит для валютных пар, где базовая (первая) валюта доллар, и стоимость пункта не постоянна и зависит от цен?

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

double Null_BUY(){ 
   double null=0; double summ_count=0; double lots_count=0; double position_count=0;
   for (int i=OrdersTotal()-1; i>=0; i--){
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
        if (OrderSymbol() == Symbol() ){
            if(OrderType()==OP_BUY ){
               position_count=Bid-((OrderProfit()+OrderSwap()+OrderCommission()) / OrderLots()*MarketInfo(Symbol(), MODE_TICKVALUE))*Point; 
               summ_count+=position_count*OrderLots();
               lots_count+=OrderLots();
            }
         }
      }
   }
   if(lots_count!=0) null=NormalizeDouble(summ_count/lots_count, Digits);
   return(null);
}
 
Forallf:

Подскажите, пожалуйста. Начертил на графике отрезок. Нужно узнать цены начала и конца отрезка. Это можно сделать?

Нашел пример. Сделал вот так.

//+------------------------------------------------------------------+
//|                                                        линия.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   //Проверим что есть трендовая линия и она в единственном экземпляре:
   if(ObjectsTotal(OBJ_TREND)!=1)
   {Comment("Нарисуйте 1 трендовую линию!");}

   //Получим ИМЯ трендовой линии:
   for(int i=0;i<ObjectsTotal();i++)
     {
      string name=ObjectName(i);
      if(ObjectType(name)==OBJ_TREND)
        {
         datetime t1=ObjectGet(name,OBJPROP_TIME1);
         datetime t2=ObjectGet(name,OBJPROP_TIME2);
         double p1=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);
         double p2=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);
         Comment(p1,"   ",p2);
        }
     }
  }
//+------------------------------------------------------------------+

Прошу помочь сделать еще один отрезок, который бы находился горизонтально на середине первого отрезка. Длину первого отрезка буду менять, соответственно должно меняться и расположение второго. Отрисовка от PRICE2 на 10 свечей вперед.

Файлы:
EURUSDM12.png  25 kb
 
Forallf:

Нашел пример. Сделал вот так.

Прошу помочь сделать еще один отрезок, который бы находился горизонтально на середине первого отрезка. Длину первого отрезка буду менять, соответственно должно меняться и расположение второго. Отрисовка от PRICE2 на 10 свечей вперед.

вот так - 


369
369
  • 2021.01.07
  • www.youtube.com
лин
 
Iurii Tokman:

вот так - 


Так.
 
Forallf:
Так.

этот велосипед штатная возможность терминала
называется линии Фибоначчи

 
Iurii Tokman:

этот велосипед штатная возможность терминала
называется линии Фибоначчи

Середина мне для примера. Будет другой, расчетный уровень.
 
Forallf:
Середина мне для примера. Будет другой, расчетный уровень.

Можно найти любую точку на прямой, зная координаты. В Вашем случае знаем цены и даты начала и окончания отрезка. Также можем узнать цену середины = (цена начала+цена окончания)/2. Или любая другая Ваша формула.

Теперь при помощи первой функции можем узнать время точки на отрезке.

//находит дату точки (координату X) на прямой, на заданную цену (координата Y)
datetime GetPointTimeOnStraight(datetime eTime1, double ePrice1, datetime eTime2, double ePrice2, double ePrice3, string eSymbol, int eTimeFrame)
   {
   if(ePrice2-ePrice1==0) return(0.0);
   //индекс бара соответствующий заданному времени, возможно задавать будующее время
   int eIndex1=(eTime1>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime1)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime1);
   int eIndex2=(eTime2>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime2)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime2);
   int eIndex3=eIndex1+(int)((eIndex2-eIndex1)*(ePrice3-ePrice1)/(ePrice2-ePrice1));
   return(iTime(eSymbol,eTimeFrame,eIndex3));
   }

//находит цену точки (координату Y) на прямой, на заданное время (координата X)
double GetPointPriceOnStraight(datetime eTime1, double ePrice1, datetime eTime2, double ePrice2, datetime eTime3, string eSymbol, int eTimeFrame)
   {
   //индекс бара соответствующий заданному времени, возможно задавать будующее время
   int eIndex1=(eTime1>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime1)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime1);
   int eIndex2=(eTime2>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime2)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime2);
   if(eIndex2-eIndex1==0) return(0.0);
   int eIndex3=(eTime3>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime3)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime3);
   return(ePrice1+(ePrice2-ePrice1)*(eIndex3-eIndex1)/(eIndex2-eIndex1));
   }
 
Aleksei Stepanenko:

Ну раз ерунду сморозил, тогда придётся подсказать:

вроде понял, спасибо!!

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