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

 
Тут вроде как речь про четверку. Похоже что примеры писались в разное время, отсюда и использование разных функций, что вводит в заблуждение.
 
Artyom Trishkin:

А где вы нашли учебник по mql5 ?

гугл рулит: Тимур Сергеевич Машнин "Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5"

 а так, да по MQL4 Метаквоты официально объявляли об учебнике Ковалев Сергей. Программирование на алгоритмическом языке MQL4

 
psyman:
Тут вроде как речь про четверку. Похоже что примеры писались в разное время, отсюда и использование разных функций, что вводит в заблуждение.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Artyom Trishkin, 2016.11.09 22:50

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

Здесь можно будет обсудить задачи, алгоритмы их решения, да и впрочем, любые вопросы, так или иначе касающиеся программирования для МТ.

Надеюсь, что к решению вопросов подтянутся другие опытные участники нашего форума, и ветка будет интересна всем.


 
Igor Makanu:

гугл рулит: Тимур Сергеевич Машнин "Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5"

 а так, да по MQL4 Метаквоты официально объявляли об учебнике Ковалев Сергей. Программирование на алгоритмическом языке MQL4

А кто тут знает об этом Тимуре?

Ведь человек пишет:

Какой учебник? Тут есть справка, есть статьи, есть форум, но учебника тут нет. А заявлять что нужно там, и в чём отлить - это к автору учебника, который искать и найти ещё нужно на сторонних ресурсах. Т.е. претензия не обоснована, и не к MetaQuotes.
 

=Т.е. претензия не обоснована


Я думаю эта ветка не то место где следует предъявлять какие-либо претензии, но если вы хотите точности, то слово учебник мною взято вот отсюда https://book.mql4.com/ru

С самого начала там начинают употреблять init https://book.mql4.com/ru/programm/structure , ничего не говоря об OnInit, ну и продолжают далее в других примерах.

Учебник по MQL4
Учебник по MQL4
  • book.mql4.com
В настоящее время персональный компьютер стал незаменимым помощником в жизни каждого человека. Благодаря развитию Интернета и увеличению мощности современных компьютеров открылись новые возможности во многих областях деятельности. Ещё десять лет назад торговля на финансовых рынках была доступна только банкам и узкому кругу специалистов. Сегодня...
 
psyman:

=Т.е. претензия не обоснована


Я думаю эта ветка не то место где следует предъявлять какие-либо претензии, но если вы хотите точности, то слово учебник мною взято вот отсюда https://book.mql4.com/ru

С самого начала там начинают употреблять init https://book.mql4.com/ru/programm/structure , ничего не говоря об OnInit, ну и продолжают далее в других примерах.

Ясно. Этому учебнику - сто лет в обед :)

Понимаю, что вы про то можете и не знать.

В общем - он нужен (наверное кому-то) для вводного ознакомления. С момента его написания прошло уже очень много лет, и сейчас, после его прочтения, лучше спрашивать о чём-либо здесь на форуме.

Ну и постарайтесь без "должен", "обязан", "не сделал", "не сообщил", и т.п. ...

Всё, что необходимо для полного и глубокого знания mql4 и mql5 - всё есть на этом ресурсе в избытке и на любой вкус.

 

Здравствуйте. Помогите разобраться с индикатором "линий Мюррея". (код внизу) .Хотел использовать его данные в советнике через функцию

iCustom.,вернуть значение 1-й линии  индикатора на первом баре - "  double Divb1=iCustom(Symbol(),PERIOD_CURRENT,"Murrey-levels-system",P,StepBack,1,1);   " и использовать Divb1 как условие входа в рынок, но при тестировании позиция открывается без учета этой линии.(вместо 1 можно ставить любой индекс линии индикатора, ордера открываются в одних и тех же местах. Условие if(Bid<=Divb1)

Наверно ошибка в параметрах функции , но в каких не могу понять. 

//|                                                                                      |
//|    Copyright © 1999-2007, MetaQuotes Software Corp. |
//|                                         http://www.metaquotes.ru |
//+------------------------------------------------------------------+
#property indicator_chart_window
//----
extern int P=64;
extern int StepBack=0;
//----
double  dmml=0,dvtl=0,sum =0,v1=0,v2=0,mn=0,mx=0,x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,y1=0,y2=0,y3=0,y4=0,y5=0,y6=0,octave=0,fractal=0,range  =0,finalH =0,finalL =0,mml[13];
string  ln_txt[13],
buff_str="";
int
bn_v1  =0,
bn_v2  =0,
OctLinesCnt=13,
mml_thk=8,
mml_clr[13],
mml_shft=3,
nTime=0,
CurPeriod=0,
nDigits=0,
i=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  int init() 
  {
   ln_txt[0] ="[-2/8]P";
   ln_txt[1] ="[-1/8]P";   ln_txt[2] ="ПОДДЕРЖКА [0/8]";
   ln_txt[3] ="ОСТАНОВКА_РАЗВОРОТ [1/8]";
   ln_txt[4] ="ВРАЩЕНИЕ_РАЗВОРОТ [2/8]";
   ln_txt[5] ="ДНО_КАНАЛА [3/8]";
   ln_txt[6] ="СОПРОТИВЛЕНИЕ_ПОДДЕРЖКА [4/8]";
   ln_txt[7] ="ВЕРХ_КАНАЛА [5/8]";
   ln_txt[8] ="ВРАЩЕНИЕ_РАЗВОРОТ [6/8]";
   ln_txt[9] ="ОСТАНОВКА_РАЗВОРОТ [7/8]";
   ln_txt[10]="СОПРОТИВЛЕНИЕ [8/8]";
   ln_txt[11]="[+1/8]P";// "overshoot [+1/8]";
   ln_txt[12]="[+2/8]P";// "extremely overshoot [+2/8]";
//----
   mml_shft=25;
   mml_thk =3;
//----
   mml_clr[0] =Magenta;
   mml_clr[1] =Pink;
   mml_clr[2] =Blue;
   mml_clr[3] =Orange;
   mml_clr[4] =Red;
   mml_clr[5] =OliveDrab;
   mml_clr[6] =Blue;
   mml_clr[7] =OliveDrab;
   mml_clr[8] =Red;
   mml_clr[9] =Orange;
   mml_clr[10]=Blue;
   mml_clr[11]=Pink;
   mml_clr[12]=Magenta;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  int deinit() 
  {
   Comment(" ");
     for(i=0;i<OctLinesCnt;i++) 
     {
      buff_str="mml"+i;
      ObjectDelete(buff_str);
      buff_str="mml_txt"+i;
      ObjectDelete(buff_str);
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  int start() 
  {
     if((nTime!=Time[0]) || (CurPeriod!=Period()))
     {
      bn_v1=Lowest(NULL,0,MODE_LOW,P+StepBack,0);
      bn_v2=Highest(NULL,0,MODE_HIGH,P+StepBack,0);
//----
      v1=Low[bn_v1];
      v2=High[bn_v2];
//----
      if(v2<=250000 && v2>25000 )
         fractal=100000;
      else
         if(v2<=25000 && v2>2500 )
            fractal=10000;
         else
            if(v2<=2500 && v2>250 )
               fractal=1000;
            else
               if(v2<=250 && v2>25 )
                  fractal=100;
               else
                  if(v2<=25 && v2>12.5 )
                     fractal=12.5;
                  else
                     if(v2<=12.5 && v2>6.25)
                        fractal=12.5;
                     else
                        if(v2<=6.25 && v2>3.125 )
                           fractal=6.25;
                        else
                           if(v2<=3.125 && v2>1.5625 )
                              fractal=3.125;
                           else
                              if(v2<=1.5625 && v2>0.390625 )
                                 fractal=1.5625;
                              else
                                 if(v2<=0.390625 && v2>0)
                                    fractal=0.1953125;
      range=(v2-v1);
      sum=MathFloor(MathLog(fractal/range)/MathLog(2));
      octave=fractal*(MathPow(0.5,sum));
      mn=MathFloor(v1/octave)*octave;
      if((mn+octave)>v2 )
         mx=mn+octave;
      else
         mx=mn+(2*octave);
      if((v1>=(3*(mx-mn)/16+mn)) && (v2<=(9*(mx-mn)/16+mn)) )
         x2=mn+(mx-mn)/2;
      else x2=0;
      if((v1>=(mn-(mx-mn)/8))&& (v2<=(5*(mx-mn)/8+mn)) && (x2==0) )
         x1=mn+(mx-mn)/2;
      else x1=0;
      if((v1>=(mn+7*(mx-mn)/16))&& (v2<=(13*(mx-mn)/16+mn)) )
         x4=mn+3*(mx-mn)/4;
      else x4=0;
      if((v1>=(mn+3*(mx-mn)/8))&& (v2<=(9*(mx-mn)/8+mn))&& (x4==0) )
         x5=mx;
      else  x5=0;
      if((v1>=(mn+(mx-mn)/8))&& (v2<=(7*(mx-mn)/8+mn))&& (x1==0) && (x2==0) && (x4==0) && (x5==0) )
         x3=mn+3*(mx-mn)/4;
      else x3=0;
      if((x1+x2+x3+x4+x5) ==0 )
         x6=mx;
      else x6=0;
      finalH=x1+x2+x3+x4+x5+x6;
      if(x1>0 )
         y1=mn;
      else y1=0;
      if(x2>0 )
         y2=mn+(mx-mn)/4;
      else y2=0;
      if(x3>0 )
         y3=mn+(mx-mn)/4;
      else y3=0;
      if(x4>0 )
         y4=mn+(mx-mn)/2;
      else y4=0;
      if(x5>0 )
         y5=mn+(mx-mn)/2;
      else y5=0;
      if((finalH>0) && ((y1+y2+y3+y4+y5)==0) )
         y6=mn;
      else y6=0;
      finalL=y1+y2+y3+y4+y5+y6;
        for( i=0; i<OctLinesCnt; i++) 
        {
         mml[i]=0;
        }
      dmml=(finalH-finalL)/8;
      mml[0] =(finalL-dmml*2); //-2/8
        for( i=1; i<OctLinesCnt; i++) 
        {
         mml[i]=mml[i-1] + dmml;
        }
        for( i=0; i<OctLinesCnt; i++ )
        {
         buff_str="mml"+i;
           if(ObjectFind(buff_str)==-1) 
           {
            ObjectCreate(buff_str, OBJ_HLINE, 0, Time[0], mml[i]);
            ObjectSet(buff_str, OBJPROP_STYLE, STYLE_SOLID);
            ObjectSet(buff_str, OBJPROP_COLOR, mml_clr[i]);
            ObjectMove(buff_str, 0, Time[0],  mml[i]);
           }
           else 
           {
            ObjectMove(buff_str, 0, Time[0],  mml[i]);
           }
         buff_str="mml_txt"+i;
           if(ObjectFind(buff_str)==-1) 
           {
            ObjectCreate(buff_str, OBJ_TEXT, 0, Time[mml_shft], mml_shft);
            ObjectSetText(buff_str, ln_txt[i], 8, "Arial", mml_clr[i]);
            ObjectMove(buff_str, 0, Time[mml_shft],  mml[i]);
           }
           else 
           {
            ObjectMove(buff_str, 0, Time[mml_shft],  mml[i]);
           }
        }
      nTime   =Time[0];
      CurPeriod= Period();
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Anatoliy Ryzhakov:

Здравствуйте. Помогите разобраться с индикатором ...

Никто такие портянки глядеть не будет.


 

=В общем - он нужен (наверное кому-то) для вводного ознакомления.


Что-то более современное, с хорошими примерами есть?


=Ну и постарайтесь без "должен", "обязан", "не сделал", "не сообщил"


Вы похоже меня с кем-то путаете. Я таких слов здесь не употреблял.

 

Не понимаю как писать индикаторы, объясните в чем проблема?

нужно чтобы строилась линия показывающая разницу в цене между активами active_1 и active_2

это работает

еще нужно, чтобы по этой линии строилась средняя ma_period периода, с этим уже проблема, она не отображается

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots 2
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_color1 clrGreen, clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_type2 DRAW_LINE
#property indicator_color2 clrWhite
#property indicator_style2 STYLE_SOLID
#property indicator_width1 1
#include <MovingAverages.mqh>

input string active_1 = "GBPNZD.m";
input string active_2 = "GBPAUD.m";
input ENUM_TIMEFRAMES timeframe = PERIOD_H1;
input int ma_period = 30;

double firstBuffer[], secondBuffer[], colorBuffer[], dataBuffer[], maBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, dataBuffer, INDICATOR_DATA);
   SetIndexBuffer(1, maBuffer, INDICATOR_DATA);
   SetIndexBuffer(2, colorBuffer, INDICATOR_COLOR_INDEX);
   SetIndexBuffer(3, firstBuffer, INDICATOR_CALCULATIONS);
   SetIndexBuffer(4, secondBuffer, INDICATOR_CALCULATIONS);
   PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, ma_period);
   IndicatorSetString(INDICATOR_SHORTNAME, "DifferenceCurrency "+active_1+"  "+active_2);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---

   CopyClose(active_1,timeframe,0,rates_total,firstBuffer);
   CopyClose(active_2,timeframe,0,rates_total,secondBuffer);
   int first, bar;
   if(prev_calculated == 0) first = begin; else first = prev_calculated - 1;
   for(bar = first; bar<rates_total; bar++){
      dataBuffer[bar] = firstBuffer[bar]-secondBuffer[bar];
      maBuffer[bar] = SimpleMA(bar, ma_period, dataBuffer);
   }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Причина обращения: