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

 
Artyom Trishkin #:

Ой... С этим разбираться нужно. Время... Может кто-нибудь заморочится.

Было бы хорошо, если бы кто-то помог...

Вот функция, делающая график целиком - на вход массив и имя графика (наблюдений)

#include <Graphics\Graphic.mqh>
#include <Graphics\Axis.mqh>
CGraphic graphicP;

input group "Настройка сохранения данных";
input bool Use_Save_Rezultat=false;//Сохранять результаты вычислений
input string Dir_CB="Q_Trans";//Директория для сохранения результатов вычислений

input group "Настройка сохранения графиков";
input int pix_X=800;//Ширина графика баланса
input int pix_Y=400;//Высота графика баланса
input bool Use_Koef=true;//Использовать коэффициент для установки ширины графика Parallel
input double Point_Kx=0.5;//Коэффициент ширины графика Parallel
input int Point_K=12;//Размер шрифта

//+------------------------------------------------------------------+
//|График с гистограммой Пирсона (Распределения)                     |
//+------------------------------------------------------------------+
void Save_Graf_Pi(double &arr_DataP[], string List_N)
{
   double X[];
   double Y[];
   int Size_arr_DataP=ArraySize(arr_DataP);

   int Index_Max_arr_DataP=0;
   int Index_Min_arr_DataP=0;
   double Max_arr_DataP=0.0;
   double Min_arr_DataP=0.0;

   Index_Max_arr_DataP=ArrayMaximum(arr_DataP,0,WHOLE_ARRAY);
   Index_Min_arr_DataP=ArrayMinimum(arr_DataP,0,WHOLE_ARRAY);
   Max_arr_DataP=arr_DataP[Index_Max_arr_DataP];
   Min_arr_DataP=arr_DataP[Index_Min_arr_DataP];

   int N_Otchetov=0;
   if(Size_arr_DataP<=100)N_Otchetov=7;//7-9
   if(Size_arr_DataP>100 && Size_arr_DataP<=500)N_Otchetov=9;//8-12
   if(Size_arr_DataP>500 && Size_arr_DataP<=1000)N_Otchetov=12;//10-16
   if(Size_arr_DataP>1000)N_Otchetov=21;//12-22

   double Stolb_Diapazon=(Max_arr_DataP-Min_arr_DataP)/(double)N_Otchetov;

   ArrayResize(X,N_Otchetov);
   ArrayInitialize(X,0);
   ArrayResize(Y,N_Otchetov);
   ArrayInitialize(Y,0);

   for(int i=0; i<Size_arr_DataP; i++)
   {
      for(int n=0; n<N_Otchetov; n++)
      {
         if(arr_DataP[i]>=Stolb_Diapazon*(n+1) && arr_DataP[i]<Stolb_Diapazon*(n+2))
         {
            //X[n]=n;
            X[n]=Stolb_Diapazon*(n+1);
            Y[n]=Y[n]+1;
            break;
         }
      }
   }

   int pixx_Y=pix_Y;
   int pixx_X=pix_X;

   if (N_Otchetov>pixx_X-50)pixx_X=N_Otchetov+50;//Расширим график, если значений больше изначально заданного числа пикселлей.

//ArrayPrint(X);
//ArrayPrint(Y);
//--- отключим показ ценового графика
   ChartSetInteger(0,CHART_SHOW,false);
   long chart=0;
   string NameGraf=List_N;

   CGraphic graphicL;

   if(ObjectFind(chart,NameGraf)<0)
   {
      graphicL.Create(chart,NameGraf,0,0,0,pixx_X,pixx_Y);//Создает графический ресурс, привязанный к объекту чарта
   }
   graphicL.Attach(chart,NameGraf);//Получить/создать  графический ресурс и привязать его к экземпляру класса CGraphic
   graphicL.BackgroundMain(NameGraf);//Получить/установить текст заголовка графика
   graphicL.BackgroundMainSize(16);//Получить/установить размер шрифта заголовка

   graphicL.HistoryNameSize(Point_K);//Устанавливает размер шрифта имени кривой
   graphicL.HistorySymbolSize(Point_K);//Получить/установить размер символов условных обозначений

   graphicL.MarksToAxisAdd(X,16,1,1);
/*
bool  MarksToAxisAdd( 
   const double        &marks[],        // координаты "засечек" 
   const int           mark_size,       // размер "засечек" 
   ENUM_MARK_POSITION  position,        // расположение "засечек" 
   const int           dimension=0      // измерение 
   )
*/


   CCurve *A=graphicL.CurveAdd(X,Y,ColorToARGB(Blue,255),CURVE_HISTOGRAM,"Data");//Создает и добавляет кривую на график
   A.PointsFill(false);//Устанавливает флаг, указывающий, нужно ли выполнять заливку для точек, определяющих кривую при отрисовке точками.
   A.PointsType(POINT_VERTICAL_DASH);//Устанавливает флаг, указывающий на тип точек, использующихся при отрисовке кривой точками.
   A.HistogramWidth(6);//Устанавливает флаг, указывающий на ширину линии гистограммы.

   graphicL.CurvePlotAll();//Отрисовывает все ранее созданные кривые
   graphicL.Update();//Отображает на экране сделанные изменения
   ResetLastError();
//сделаем скрин шот
   if(Use_Save_Rezultat==true)
   {
      long handle=ChartID();
      if(handle>0) // если получилось, дополнительно настроим
      {
         string file="";
         file=Dir_CB+"\\Gist_Pi.png";
         /// int pp=800;//Ширина скрина
         //int scr_height=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);//Высота скрина
         //int scr_height=400;//Высота скрина

         ChartScreenShot(handle,file,pixx_X,pixx_Y,ALIGN_LEFT);
         if(GetLastError()>0)
         {
            Print("Error  (",GetLastError(),") ");
         }
         ResetLastError();
      }
   }
   Sleep(3000);
   graphicL.Destroy();//Удаляет с чарта график и уничтожает графический ресурс.
   ChartSetInteger(0,CHART_SHOW,true);

}
 
Tretyakov Rostyslav #:
На графике с этим индикатором меняете символ и на всех остальных тоже поменяется.

Ростислав!

Я поражен - такое великодушие редко встречается, особенно сейчас, в период повального преклонения перед "золотым тельцом"! 

Конечно не ожидал! 

Спасибо Вам большое! Очень благодарен!

Индикатор работает на ""ура"!

Удачи Вам во всем и всегда!

 
Просто вопрос возник при просмотре доков, сколько цветов можно прописать в этом типе рисования?
#property indicator_type1   DRAW_COLOR_CANDLES 
#property indicator_color1  clrLightSteelBlue,clrRed,clrBlue // в справке не нашел сколько? в примерах еще есть 8 цветов.
 

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

//--ТРАЛ ПАРАБОЛИК НАЧАЛО-----------------------------------------------------------------------------------------------+
  int tral= Tral_parabolik;
  double sar= iCustom(Symbol(), Period_for_work_tral_po_parabolik, "Parabolic", Step_tral_parabolik, Max_tral_parabolik, 1);
  for(int pos= 0; pos< OrdersTotal(); pos++)
  {//--ФОР НАЧАЛО-----------------------------------------------------------------------------------------------+
  if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
  if(OrderSymbol()== _Symbol)
  {
  if(OrderType()== OP_SELL)
  {
  if(OrderOpenPrice()> Ask+ tral*Point && OrderOpenPrice()> sar)
  {
  if(OrderStopLoss()!= sar && sar> Ask)
  {
  if(OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack))
     {
     
     PrintFormat("ORDER SELL MODIFY ", GetLastError());
     }
  }
  }
  }
  // BUY
  if(OrderType()== OP_BUY)
  {
  if(OrderOpenPrice()< Bid+ tral*Point && OrderOpenPrice()< sar)
  {
  if(OrderStopLoss()!= sar && sar< Bid)
  {
  if(OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack))
     {
     
     PrintFormat("ORDER BUY MODIFY ", GetLastError());
     }
  }
  }
  }
  }
  }//---ФОР КОНЕЦ----------------------------------------------------------------------------------------------+
  //-----ТРАЛ ПАРАБОЛИК КОНЕЦ--------------------------------------------------------------------------------------------+

 при тесте в самом начале было пятнадцать ошибок 130, а потом пошли ошибки 1.

Что я делаю не так? Как исправить код, чтобы этих ошибок не было? В исправленном варианте отметьте пожалуйста цветом место исправления. p/s в переменную tral передаю значение 700… при 700 ошибка 130 и 1 чередуется.

 

Доброго дня Товарищи, 

Подскажите пожалуйста наводкой либо примером!

Мне нужно выставить первый отложенный ордер, и после того как он сработал, выставить второй! 

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

Спасибо за помощь! 

 
Подскажите, где здесь на сайте скачать метатрейдер 4 с последними обновлениями? При попытке скачать 4-й почему-то скачивается 5й.
 
Ratmirfat #:
Подскажите, где здесь на сайте скачать метатрейдер 4 с последними обновлениями? При попытке скачать 4-й почему-то скачивается 5й.

На сайте - нигде! Ищите брокеров, которые предоставляют торговлю на терминале МТ4. В поиске так и набирайте - брокер терминал MT4.

С уважением, Владимир.

 
if(MA_1a < MA_2 && MA_1 > MA_2) открыть ордер Buy; 
if(MA_1a > MA_2 && MA_1 < MA_2) открыть ордер Sell; 
  
if (R_1 < RSI_level_1 && R_2 > RSI_level_1 && iBarShift(OrderSymbol(),PERIOD_CURRENT,OrderOpenTime()) > 1) закрыть ордер Buy; 
if (R_1 > RSI_level_2 && R_2 < RSI_level_2 && iBarShift(OrderSymbol(),PERIOD_CURRENT,OrderOpenTime()) > 1) закрыть ордер Sell; 

Подскажите пожалуйста, любой самый простой советник в MQL-5, куда я мог бы вставить эту торговую идею, и как ее туда вставить, ну не могу я переделать весь свой советник с MQL4 в MQL5, а протестировать подобную идею в метатрейдере-5 очень хочется, там, конечно, гораздо больше возможностей. Заранее спасибо за помощь.

 
Ratmirfat #:

Подскажите пожалуйста, любой самый простой советник в MQL-5, куда я мог бы вставить эту торговую идею, и как ее туда вставить, ну не могу я переделать весь свой советник с MQL4 в MQL5, а протестировать подобную идею в метатрейдере-5 очень хочется, там, конечно, гораздо больше возможностей. Заранее спасибо за помощь.

1. советник из *.mq4 переименовываешь в *.mq5

2. добавляешь #include <MT4Orders.mqh> (скажите офигенное спасибо fxsaber)

3. исправляете немногочисленные несовместимости и обращения к индикаторам (в mt5 надо сначала завести хендл индикатора, потом по мере потребности копировать из него данные)

при условии знакомства с MQL или C/C++ вам самому там дел на один вечер

 
Maxim Kuznetsov #:

1. советник из *.mq4 переименовываешь в *.mq5

2. добавляешь #include <MT4Orders.mqh> (скажите офигенное спасибо fxsaber)

3. исправляете немногочисленные несовместимости и обращения к индикаторам (в mt5 надо сначала завести хендл индикатора, потом по мере потребности копировать из него данные)

при условии знакомства с MQL или C/C++ вам самому там дел на один вечер

Спасибо!
Причина обращения: