[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 123

 

Pour ceux qui comprennent mql4 mieux que moi, merci de m'aider. Il y a 3 questions.

1. D'abord sur la double constante. Nous avons tous connu les iMa, masques, Moving Average/ La question est : Mappage incorrect des valeurs.

Exemple :

extern string  MA1="";
extern string  MA2="";
extern string  MA3="";
string com;


double MA1 = iMA(NULL,PERIOD_M15,9,0,0,0);
double MA2 = iMA(NULL,PERIOD_M15,15,0,0,0);
double MA3 = iMA(NULL,PERIOD_M15,21,0,0,0);

if (MA1>MA2 && MA1!=MA2 && MA1>MA3 && MA1!=MA3 ) com="значение1";
if (MA1<MA2 && MA1==MA2 && MA1<MA3 && MA3!=MA3 ) com="значение2";

La valeur sera donc toujours = valeur1. Le code refuse obstinément de comprendre != (non égal).

2. Question /Ouverture Recherche Fermeture/.

Ce que je veux du programme mais ça ne marche pas.

1. vérifier la condition (vrai ; faux)

2. S'il y a un tel ordre, nous ne l'ouvrons pas ; s'il n'y a pas d'ordre, nous l'ouvrons. Nous l'ouvrons en fonction de la conditionOrderComment().

3. Vérification Si l'événement X ou Y se produit , fermez-le. X-(par exemple un autre signal iMA1>iMA2, Y-un autre signal iMA2>iMA3)

C'est comme ça que je fais, mais rien ne sort.

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)
{
   for (int i=1;i<=OrdersTotal(); i++)       
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);
            else
            {
            OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);
            }
           }
       } 
}

Et comment fermer, je ne comprends pas où insérer.

3. Question sur le décalage (int shift)

Dans le deuxième groupe d'iMA, je décale la barre actuelle relative en arrière de 3) Que pour, de sorte que lorsqu'un signal décrit ci-dessus, ne pas ouvrir des ordres répétés sur chaque barre. Mais le changement ne se produit pas pour une raison quelconque.

double MA1 = iMA(NULL,PERIOD_M15,9,0,0,0);
double MA2 = iMA(NULL,PERIOD_M15,15,0,0,0);
double MA3 = iMA(NULL,PERIOD_M15,21,0,0,0);

double MA4 = iMA(NULL,PERIOD_M15,9,0,0,3);
double MA5 = iMA(NULL,PERIOD_M15,15,0,0,3);
double MA6 = iMA(NULL,PERIOD_M15,21,0,0,3);

S'il vous plaît, aidez-moi avec les connaissances. Je ne sais pas comment l'utiliser. Je ne sais pas où, sur Internet, il existe une mise en œuvre similaire.

 
dertop:

Pour ceux qui comprennent mql4 mieux que moi, merci de m'aider. Il y a 3 questions.

1. D'abord par doublement constant.

2. comment fermer Je ne comprends pas du tout où il faut mettre.

3. Question sur le décalage (int shift)

1. https://www.mql5.com/ru/articles/1561

2. si (conditions de clôture) OrderClose(...)

3. Voyez ce qu'est exactement ce changement et qui en fait partie.
 
ilunga:

1. https://www.mql5.com/ru/articles/1561

2. si (conditions de fermeture) OrderClose(...)

3. Voyez ce qu'est exactement ce changement et qui il déplace
.


Merci beaucoup pour cette réponse rapide.

Environ 1. Oui, j'ai compris, on va creuser là.

Le 2.if (conditions de clôture) OrderClose(...) (c'est clair sans cela) Mais je me suis embrouillé dans if, what for where where et why....

Corriger si incorrect....

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)                                         // если true то заходим в тело цикла...
{
   for (int i=1;i<=OrdersTotal(); i++)                                                             //шаг2 проверяем все ордера на наличие ордера со значением1
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);                                            // если орден найден то ничего не делаем
            else
            {
            OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);   // а вот тут проблемы кто за чем идёт и куда вставить условие закрытие отдельно за телом всего условия (ma1;ma2 и тд), или там где OrderSelect()
            }
           }
       } 
}

L'indice de la valeur obtenue à partir du tampon de l'indicateur (décalage par rapport à la barre actuelle du nombre de périodes en arrière spécifié). from mql4 help

 
dertop:


Merci beaucoup pour cette réponse rapide.

Par 2.if (conditions de fermeture) OrderClose(...) (c'est compréhensible sans cela) Mais je suis confus dans if, what for where where et why....

Corriger si incorrect....


if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)                                         // если true то заходим в тело цикла...
{
   for (int i=1;i<=OrdersTotal(); i++)                                                             //шаг2 проверяем все ордера на наличие ордера со значением1
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);                                            // если орден найден то ничего не делаем
            else
            {
            OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);   // а вот тут пока написано следующее: для каждого из ордеров у которого мы сюда зашли мы поставим еще один ордер
            }
           }
       } 
}
 
ilunga:

Désolé, pourquoi vérifier les inégalités quand la condition est déjà donnée ! Cela ralentit la lecture des conditions et leur réalisation !

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2>MA3 && MA2!=MA3)//MA1!=MA2 && и && MA2!=MA3 не нужны, т.к. в предыдущих сравнениях
                                                          //равенство ухе исключено! Так что нужно так:
if (MA1>MA2 && MA1<MA3 && MA2>MA3)
 
borilunad:

Désolé, pourquoi vérifier les inégalités quand la condition est déjà donnée ! Cela ralentit la lecture des conditions et leur réalisation !


Il y a quelque chose d'étrange ici.

if (MA1>MA2 && MA1<MA3 && MA2>MA3)

MA1>MA2 et MA2>MA3 et ensuite MA1<MA3

D'autant qu'il suffit de

if (MA1>MA2 && MA2>MA3)
 
borilunad:

Désolé, pourquoi vérifier les inégalités quand la condition est déjà donnée ! Cela ralentit la lecture des conditions et leur réalisation !


Je suis désolé, je l'ai un peu manqué. Je n'y ai pas prêté attention au début. Ces calculs sont faits pour 4 MAs, et il y a des cas où MA1>MA2 et au moment où MA3=MA4 (donc la vérification est nécessaire car c'est ainsi que la stratégie est construite).

if (MA1>MA2 && MA1!=MA2 && MA1<MA3 && MA2<MA3 && MA2!=MA3 && MA3<MA4 && MA3!=MA4)                                         // если true то заходим в тело цикла...
{
   for (int i=1;i<=OrdersTotal(); i++)                                                             //шаг2 проверяем все ордера на наличие ордера со значением1
       {
        if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if (OrderComment()=="значение1")return(0);                                            // если орден найден то ничего не делаем
                else
                {
                if (OrderComment()!="значение1")                                                         // если такого ордера нету
                   {
                   OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,com,Magic,0,Red);   // тогда открываем
                   }
                }
         if (MA1<MA2 && MA1!=MA2 && MA1>MA3 && MA1!=MA3 && MA3>MA4 && MA3!=MA4)                          // если true новый сигнал
             {
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);               // тогда закрываем
             }

           }
       } 
}

Comme cela ?????

 
Vinin:


Il y a quelque chose d'étrange ici.

MA1>MA2 et MA2>MA3 et ensuite MA1<MA3


Oui, désolé d'avoir confondu, c'est la première fois que j'écris sur le forum. J'ai d'abord copié, puis décidé d'écrire à la main et je me suis embrouillé... mais l'exemple ci-dessus est correct...

MA1>MA2 et MA1<MA3 et MA3<MA4

 

Bon après-midi.

Veuillez m'aider à modifier l'indicateur.

J'ai un Pivot standard, j'aimerais avoir un indicateur qui calcule les niveaux en utilisant des formules standard, mais en utilisant les données H, L, C que je saisis moi-même.

Je veux l'utiliser comme indicateur pour mes propres indicateurs.

 
Notter:

Bon après-midi,

Pourriez-vous me dire comment mettre un marqueur sur le graphique ? Par exemple, l'ordre ne s'est pas ouvert, mais au moins pour voir sur le graphique, à quel moment il aurait dû s'ouvrir.

Je voudrais placer un marqueur sur un graphique.

Comme ceci

#include <stderror.mqh>

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int Err;
//----
       if(...........) //покупаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Blue,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
       if(...........) //продаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Red,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объект OBJ_ARROW.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}