Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 663

 
C'est un peu comme si on parlait d'un 4. Les exemples semblent avoir été écrits à des moments différents, d'où l'utilisation de fonctions différentes, ce qui est trompeur.
 
Artyom Trishkin:

Où avez-vous trouvé un tutoriel sur mql5 ?

Règles de google :Timur Sergeyevich Mashnin"Langage de programmation MQL5 : utilisation avancée de la plateforme de trading MetaTrader 5".

Et donc, oui, sur MQL4 Metacquotes, le manuel de Kovalev Sergey a été officiellement annoncé. Programmation dans le langage algorithmique MQL4

 
psyman:
C'est un peu comme une discussion sur le 4. Il semble que les exemples aient été écrits à des moments différents, d'où l'utilisation de fonctions différentes, ce qui est trompeur.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes questions pour les débutants sur MQL4, aide et discussion sur les algorithmes et les codes

Artyom Trishkin, 2016.11.09 22:50

Dans cette branche, je veux commencer à aider ceux qui veulent vraiment comprendre et apprendre à programmer dans le nouveau MQL4 et qui veulent passer facilement à MQL5 - les langages sont très similaires.

Ce blog sera un bon endroit pour discuter des tâches, des algorithmes et de toute autre question liée à la programmation MT d'une manière ou d'une autre.

J'espère que d'autres membres expérimentés de notre forum se joindront à la discussion et que le fil de discussion sera intéressant pour tous.


 
Igor Makanu:

Règles de google :Timur Sergeyevich Mashnin"Langage de programmation MQL5 : utilisation avancée de la plateforme de trading MetaTrader 5".

Et donc, oui, sur MQL4 Metacquotes, le manuel de Kovalev Sergey a été officiellement annoncé. Programmation en langage algorithmique MQL4

Qui ici connaît ce Timur ?

Après tout, l'homme écrit :

Quel manuel ? Il y a une référence, il y a des articles, il y a un forum, mais il n'y a pas de manuel. Et pour affirmer qu'il y est nécessaire, et dans quoi le couler - c'est à l'auteur du manuel, que vous devez encore chercher et trouver sur des ressources tierces. En d'autres termes, la réclamation n'est pas fondée, et pas à MetaQuotes.
 

=c'est-à-dire que l'allégation n'est pas fondée.


Je ne pense pas que ce fil de discussion soit le lieu pour faire des affirmations, mais si vous voulez de l'exactitude, le mot "manuel" est repris d'ici https://book.mql4.com/ru.

Dès le début, ils commencent à utiliser init https://book.mql4.com/ru/programm/structure , sans rien dire de OnInit, et poursuivent avec d'autres exemples.

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

=c'est-à-dire que l'allégation n'est pas fondée.


Je ne pense pas que ce fil de discussion soit le lieu pour faire des affirmations, mais si vous voulez de l'exactitude, le mot "manuel" est tiré d'ici https://book.mql4.com/ru.

Dès le début, ils commencent à utiliser init https://book.mql4.com/ru/programm/structure , ne disent rien sur OnInit et continuent dans d'autres exemples.

Je vois. Ce manuel a une centaine d'années :)

Je comprends que vous puissiez ne pas être au courant.

En général - il est nécessaire (probablement, quelqu'un) pour la connaissance d'introduction. Cela fait de très nombreuses années qu'il a été écrit et maintenant, après l'avoir lu, il vaut mieux demander quelque chose ici sur le forum.

Eh bien, essayez sans "devrait", "doit", "n'a pas fait", "n'a pas signalé", etc...

Tout ce dont vous avez besoin pour une connaissance complète et approfondie de mql4 et mql5 - tout est disponible sur cette ressource en abondance et pour tous les goûts.

 

Bonjour. Aidez-moi avec l'indicateur "Murray lines". (Je veux utiliser ses données dans mon conseiller expert par l'intermédiaire de la fonction

iCustom. pour retourner la valeur de la 1ère ligne de l'indicateur sur la première barre - " double Divb1=iCustom(Symbol(),PERIOD_CURRENT, "Murrey-levels-system",P,StepBack,1,1) ; " et utiliser Divb1 comme condition d'entrée sur le marché, mais lors du test, la position est ouverte sans tenir compte de cette ligne.(Au lieu de 1, vous pouvez mettre n'importe quel indice de la ligne de l'indicateur, les ordres s'ouvrent aux mêmes endroits. Condition if(Bid<=Divb1)

Il y a peut-être une erreur dans les paramètres de la fonction, mais je n'arrive pas à déterminer lesquels.

//| |
//| Copyright © 1999-2007, MetaQuotes Software Corp.
//| http://www.metaquotes.ru |
//+------------------------------------------------------------------+
#property indicator_chart_window
//----
extern int P=64 ;
externe interne 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];
chaîne 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] = "STOP [0/8]" ;
ln_txt[3] = "STOP_ADVANCED [1/8]" ;
ln_txt[4] = "ROLL_TURN [2/8]" ;
ln_txt[5] = "BOTTOM_CHANNEL [3/8]" ;
ln_txt[6] = "ROTATION_TOURNE [4/8]" ;
ln_txt[7] = "TOP_CHANNEL [5/8]" ;
ln_txt[8] = "ROTATION_TOURNE [6/8]" ;
ln_txt[9] = "STOP_circle [7/8]" ;
ln_txt[10]="СОПРОТИВЛЕНИЕ [8/8]";
ln_txt[11]="[+1/8]P";//"overshoot [+1/8]";
ln_txt[12]= "[+2/8]P";// "dépassement extrême [+2/8]" ;
//----
mml_shft=25 ;
mml_thk =3 ;
//----
mml_clr[0] =Magenta ;
mml_clr[1] =Pink ;
mml_clr[2] =Bleu ;
mml_clr[3] =Orange ;
mml_clr[4] =Rouge ;
mml_clr[5] =OliveDrab ;
mml_clr[6] =Bleu ;
mml_clr[7] =OliveDrab ;
mml_clr[8] =Rouge ;
mml_clr[9] =Orange ;
mml_clr[10]=Bleu ;
mml_clr[11]=Pink ;
mml_clr[12]=Magenta ;
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit()
{
Commentaire (" ") ;
for(i=0;i<OctLinesCnt;i++)
{
buff_str="mml "+i ;
ObjectDelete(buff_str) ;
buff_str="mml_txt "+i ;
ObjectDelete(buff_str) ;
}
//----
retour(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=Haut [bn_v2] ;
//----
si(v2<=250000 && v2>25000 )
fractal=100000 ;
sinon
si(v2<=25000 && v2>2500 )
fractal=10000 ;
sinon
si(v2<=2500 && v2>250 )
fractal=1000 ;
sinon
si(v2<=250 && v2>25 )
fractal=100 ;
sinon
si(v2<=25 && v2>12.5 )
fractal=12.5 ;
sinon
si(v2<=12.5 && v2>6.25 )
fractal=12.5 ;
sinon
si(v2<=6.25 && v2>3.125 )
fractal=6.25 ;
sinon
si(v2<=3.125 && v2>1.5625 )
fractal=3.125 ;
sinon
si(v2<=1.5625 && v2>0.390625 )
fractal=1.5625 ;
sinon
si(v2<=0.390625 && v2>0)
fractal=0.1953125 ;
gamme=(v2-v1) ;
sum=MathFloor(MathLog(fractal/plage)/MathLog(2)) ;
octave=fractal*(MathPow(0.5,sum)) ;
mn=MathFloor(v1/octave)*octave ;
si((mn+octave)>v2 )
mx=mn+octave ;
sinon
mx=mn+(2*octave) ;
if((v1>=(3*(mx-mn)/16+mn)) && (v2<=(9*(mx-mn)/16+mn)) )
x2=mn+(mx-mn)/2 ;
sinon x2=0 ;
if((v1>=(mn-(mx-mn)/8))&& (v2<=(5*(mx-mn)/8+mn)) && (x2==0) )
x1=mn+(mx-mn)/2 ;
sinon x1=0 ;
if((v1>=(mn+7*(mx-mn)/16))&& (v2<=(13*(mx-mn)/16+mn)) )
x4=mn+3*(mx-mn)/4 ;
sinon x4=0 ;
if((v1>=(mn+3*(mx-mn)/8))&& (v2<=(9*(mx-mn)/8+mn))&& (x4==0) ) )
x5=mx ;
sinon x5=0 ;
Si((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 ;
sinon x3=0 ;
si((x1+x2+x3+x4+x5) ==0 )
x6=mx ;
sinon x6=0 ;
finalH=x1+x2+x3+x4+x5+x6;
si(x1>0 )
y1=mn ;
sinon y1=0 ;
si(x2>0 )
y2=mn+(mx-mn)/4 ;
sinon y2=0 ;
si(x3>0 )
y3=mn+(mx-mn)/4 ;
sinon y3=0 ;
si(x4>0 )
y4=mn+(mx-mn)/2 ;
sinon y4=0 ;
si(x5>0 )
y5=mn+(mx-mn)/2 ;
sinon y5=0 ;
si((finalH>0) && ((y1+y2+y3+y4+y5)==0) )
y6=mn ;
sinon 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 ;
si(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]) ;
}
sinon
{
ObjectMove(buff_str, 0, Time[0], mml[i]) ;
}
buff_str="mml_txt "+i ;
si(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]) ;
}
sinon
{
ObjectMove(buff_str, 0, Time[mml_shft], mml[i]) ;
}
}
nTime =Time[0] ;
CurPeriod= Période() ;
}
//----
retour(0) ;
}
//+------------------------------------------------------------------+
 
Anatoliy Ryzhakov:

Bonjour. Aidez-moi à trouver l'indicateur ...

Personne ne va regarder ce genre de tartan.


 

=En général - il est nécessaire (probablement par quelqu'un) pour une introduction.


Existe-t-il quelque chose de plus actuel, avec de bons exemples ?


=Bien, essayez sans "devrait", "doit", "n'a pas fait", "n'a pas signalé".


Vous semblez me confondre avec quelqu'un d'autre. Je n'ai pas utilisé de tels mots ici.

 

Je ne comprends pas comment écrire des indicateurs, quel est le problème ?

J'ai besoin qu'une ligne soit tracée pour montrer la différence de prix entre active_1 et active_2.

ça marche

J'ai également besoin d'une moyenne ma_period ma_period à tracer sur cette ligne, il y a un problème avec elle, elle n'est pas affichée

#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);
  }
//+------------------------------------------------------------------+