Questions des débutants MQL5 MT5 MetaTrader 5 - page 555

 
Alexey Viktorov:

J'ai lu ces arguments. Mais ce n'était pas un argument, c'était juste un manque de volonté de comprendre les explications et les tentatives de prouver la faute du terminal. Vos paroles n'étaient pas étayées par quoi que ce soit. Vous êtes trop paresseux pour faire des captures d'écran et expliquer clairement vos pensées.

Quelles captures d'écran ?! J'ai fourni le code, il fonctionne sur MT4 et il se bloque sur MT5. Le type d'erreur est écrit dans le code qui est également commenté.
 
comp:
Quelles captures d'écran ?! Le code fourni, il fonctionne sur MT4 et se plante avec une erreur dans MT5. Le type d'erreur est écrit dans le code qui est également commenté.

C'est bien. C'est votre point de vue. Vous pensez que tout le monde doit faire quelque chose pour comprendre votre point de vue, mais vous ne pensez pas qu'il est plus facile de ne pas discuter avec vous, et qu'il est vraiment plus facile de se faire bannir pour avoir été trop exigeant.

Je n'ai heureusement pas le droit d'interdire, donc j'arrête simplement ce dialogue.

 
Veuillez me dire pourquoi les commandes ne s'ouvrent pas
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,Lot,Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,Lot,Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
Veuillez me dire pourquoi les commandes ne s'ouvrent pas.
 
edutak:
Veuillez me dire pourquoi les commandes ne s'ouvrent pas.

J'ai au moins 4 erreurs

RSI_uroven1' - identifiant non déclaré 32.mq4 13 12

RSI_uroven2 - identifiant non déclaré 32.mq4 14 12

RSI" - identifiant non déclaré 32.mq4 16 24

pos" - variable déjà définie 32.mq4 19 12

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
int RSI=23;
int RSI_uroven1=100;
int RSI_uroven2=100;
int Magic=777;
double Lot=0.1;
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot,2),Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lot,2),Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
//+------------------------------------------------------------------+

все октрывает

1	2015.01.02 09:00	buy	1	0.10	120.42	0.00	0.00	0.00	10000.00
2	2015.01.02 09:00	sell	2	0.10	120.39	0.00	0.00	0.00	10000.00
3	2016.04.04 13:08	close at stop	2	0.10	111.66	0.00	0.00	3.26	10003.26
4	2016.04.04 13:08	close at stop	1	0.10	111.63	0.00	0.00	-11.85	9991.41

 
edutak:
Veuillez me dire pourquoi les commandes ne s'ouvrent pas.

Tout d'abord, je vous ai donné une fonction normale qui compte le nombre de commandes, mais vous continuez à utiliser votre mauvaise fonction.

Deuxièmement, si (rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2) les conditions sont mutuellement contradictoires.

 
Vitalii Ananev:

Tout d'abord, je vous ai donné une fonction normale qui compte le nombre de commandes, mais vous continuez à utiliser votre mauvaise fonction.

Deuxièmement, les conditions if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2) sont mutuellement incohérentes.

Je vais utiliser des fonctions normales, c'est un brouillon pour l'instant, pour le testeur - je copie juste en blocs, c'est plus rapide comme ça.

Si au franchissement du RSI de l'un des niveaux un ordre s'ouvre, et au franchissement d'un autre niveau - il se ferme et en ouvre immédiatement un autre, alors il n'y a pas de contradiction.

Ou est-ce qu'il y en a ?

 
Vladislav Andruschenko:

J'ai au moins 4 erreurs

RSI_uroven1' - identifiant non déclaré 32.mq4 13 12

RSI_uroven2 - identifiant non déclaré 32.mq4 14 12

RSI" - identificateur non déclaré 32.mq4 16 24

pos" - variable déjà définie 32.mq4 19 12


Merci, ça marche.
 
edutak:

Je vais utiliser les fonctions normales, c'est un brouillon pour l'instant, pour le testeur - je copie juste en blocs, c'est plus rapide comme ça.

Si, lorsque le RSI franchit l'un des niveaux, un ordre s'ouvre et que, lorsqu'il franchit un autre niveau, il se ferme et en ouvre immédiatement un autre, alors il n'y a pas de contradiction.

Ou est-ce qu'il y en a ?

Pensez-y. Supposons que uroven1 = 80 ; rsi = 30 ; la condition rsi > 80 ou rsi < 80 signifie que (30 > 80 [faux] ou 30 < 80 [vrai]) n'existe pas dans la nature. Bien que la condition soit vraie, parce qu'elle utilise un opérateur OR, elle est essentiellement dénuée de sens.

La deuxième partie de l'expression Suppose uroven2 = 20 ; rsi = 30 (30 > 20 [true] ou 30< 20 [false] ) est la même.

 

La deuxième partie de l'expression Suppose uroven2 = 20 ; rsi = 30 (30 > 20 [true] ou 30< 20 [false] ) est la même.

Quand j'écris ou, je veux dire qu'à tout franchissement de niveau, l'ordre sera ouvert. Lorsque la deuxième condition 30<20 [false] se produit, à ce moment-là, l'ordre précédent sera fermé et il deviendra vrai.

Si je comprends bien.

 
Si vous avez raison, j'ajouterai un deuxième RSI.
Raison: