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

 
Galim_V #:

   Вроде отличаются. 

от  1,570796.... Впрочем, я не в теме, просто подставил. "попробовал".

Спасибо.

 
Здравствуйте, подскажите пожалуйста, как сделать так, чтобы при наведении перекрестия на трендовую линию на данной свече, отображалась цена в окне данных или может есть такой индикатор?
 
avs-47 #:
Здравствуйте, подскажите пожалуйста, как сделать так, чтобы при наведении перекрестия на трендовую линию на данной свече, отображалась цена в окне данных или может есть такой индикатор?
//+------------------------------------------------------------------+
//|                                                      test(0).mq4 |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
double price_MOUSE=0;
int X_MOUSE=0,
    Y_MOUSE=0;
double testBuff[];    
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorBuffers(1);
   
   SetIndexBuffer(0,testBuff);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    ChartEventMouseMoveSet(true,0); 
    testBuff[0]= price_MOUSE;
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_MOUSE_MOVE)
   {
      int      x     =(int)lparam;
      int      y     =(int)dparam;
      double   price =0;
      datetime dt    =0;
      int      window=0;
     if(ChartXYToTimePrice(0,x,y,window,dt,price))
      {
        price_MOUSE=NormalizeDouble(price,Digits);
        X_MOUSE=(int)lparam;
        Y_MOUSE=(int)dparam;
      }
   }
   if(id==CHARTEVENT_KEYDOWN)
   Print("price_MOUSE = ",price_MOUSE," X_MOUSE = ",X_MOUSE," Y_MOUSE = ",Y_MOUSE);
   
  }
//+------------------------------------------------------------------+ 
bool ChartEventMouseMoveSet(const bool value,const long chart_ID=0) 
  { 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- установим значение свойства 
   if(!ChartSetInteger(chart_ID,CHART_EVENT_MOUSE_MOVE,0,value)) 
     { 
      //--- выведем сообщение об ошибке в журнал "Эксперты" 
      Print(__FUNCTION__+", Error Code = ",GetLastError()); 
      return(false); 
     } 
//--- успешное выполнение 
   return(true); 
  }
 
Galim_V #:
Спасибо.
 

О! Живая ветка для новичков!

Всем новичкам привет! И  особый привет всем настоящим программерам, которые здесь отвечают! Ибо только тот программер считается настоящим, которому не влом поделиться своими обширными знаниями!

В общем, подправьте плиз код... Поиск экстремумов по Close...

input int QuantBars = 50;

int OnInit()
  {

   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
  ObjectsDeleteAll();
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   double RezForExUpClose=ExUpClose();
   RezForExUpClose;
   Print (RezForExUpClose);

   return(rates_total);
   
  }

double ExUpClose()

   {
    double rez=0.0;
    int a;
      for (a=2; a<=QuantBars; a++)
       {
         if(Close[a+1]<Close[a]&& Close[a-1]<Close[a]&& Time[a]>Time[a+1]) 
          {
            ObjectCreate(0,"ExUpClose " + IntegerToString (a)+ "   " + DoubleToString (Close[a],5),OBJ_ARROW_LEFT_PRICE,0, Time[a],Close[a],0,0);
            rez=Close[a];            
          }         
           // Print (rez);
       }
    return(rez);
   }
Здесь возвращается и печатается только последнее значение экстремума в RezForExUpClose  почему-то? А нужно, чтобы все найденные  экстремумы возвращались, печатались...  Кто подскажет!?
 
AlexProf #:

О! Живая ветка для новичков!

Всем новичкам привет! И  особый привет всем настоящим программерам, которые здесь отвечают! Ибо только тот программер считается настоящим, которому не влом поделиться своими обширными знаниями!

В общем, подправьте плиз код... Поиск экстремумов по Close...

Здесь возвращается и печатается только последнее значение экстремума в RezForExUpClose  почему-то? А нужно, чтобы все найденные  экстремумы возвращались, печатались...  Кто подскажет!?

Посмотрите код индикатора Fractals. И на его основе сделайте свой индикатор.

 
Aleksandr Slavskii #:
Посмотрите код индикатора Fractals. И на его основе сделайте свой индикатор.

Дык, хочется сделать самому! ...Тем более, что классический Fractals только через 2 бара слева, справа находит экстремум, а мне нужно через один. Короче, лучше самому написать и одновременно понять , чем исправлять что-то методом тыка без особого понимания ...

 
AlexProf #:
 Кто подскажет!?
input int QuantBars = 50;
bool first_run=true;

int OnInit()
  {

   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
  ObjectsDeleteAll();
  }
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(first_run) {ExUpClose(); first_run=false;}
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void ExUpClose()
   {
    double rez=0.0;
    int a;
      for (a=2; a<=50; a++)
       {
         if(Close[a+1]<Close[a]&& Close[a-1]<Close[a]&& Time[a]>Time[a+1]) 
          {
            ObjectCreate(0,"ExUpClose " + IntegerToString (a)+ "   " + DoubleToString (Close[a],5),OBJ_ARROW_LEFT_PRICE,0, Time[a],Close[a],0,0);
            rez=Close[a]; Print (rez);
          }         
       }
   }
//+------------------------------------------------------------------+
 

Всем доброго времени суток! Вопрос по тестеру МТ4.

int Ss[24][2],N,a;                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                        
void OnTick()                                                                                                                                                                                                                                                                                   
{
if (Hour()!=N)
{       
N=Hour();a++;                                                                                                                                                                                                   
OrderSend(Symbol(),OP_BUY,0.1,Ask, 3,0,0,"300",0);
Ss[a][0]=TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES);
//===============================================================       
if (Hour()==23)
{
int eHandle=FileOpen("G0.csv",FILE_CSV|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ,";");                                                                                                                                                                                                                                                                                      
for(int i=0;  i<=100; i++){FileWrite(eHandle,Ss[i][0]);}
}
}
}

Мне нужно сохранить в файл время открытия каждого ордера в формате ГОД,МЕСЯЦ,ДЕНЬ,ЧАС,МИНУТА(в любой последовательности).
Программа вместо даты в файл  выводит числа. В меню ЕКСЕЛЬ я выбираю эту команду 

Вместо чисел появляются ДАТЫ + ВРЕМЯ , но они некорректно отображают время открытия ордеров(внизу) Я менял тип массива с int на string, но результат был таким же.

Подскажите пожалуйста, что я делаю неправильно. Спасибо.

 
ANDREY #:
Ss[a][0

 Массив типа int, а сохраняете значения типа string - так нельзя.

Можете преобразовывать время в string в момент сохранения в файл.
Причина обращения: