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

 
Pavel Nikiforov:
Veuillez expliquer quel est le problème. La fonction est censée examiner toutes les positions ouvertes et calculer le nombre de positions avec un nombre magique donné. En fait, il n'en choisit qu'un seul dans la liste ouverte par un autre EA avec le même Ticket et Magik et donc le compte est toujours =0.

Je l'ai compris moi-même, la sélection doit être faite viaPositionGetSymbol:

//+------------------------------------------------------------------+
int OpenPositions()//проверка открытых позиций по Magic number 
  {
   int count=0;
     for(int z=PositionsTotal()-1; z>=0; z --) // Перебор всех позиций
     {
       if(PositionGetSymbol(z)!=_Symbol) // Найдена позиция с заданным символом
        {
         Print(__FUNCSIG__" позиция не выбрана ",GetLastError()); continue;
        }
      long  ticket = PositionGetInteger(POSITION_TICKET);
            Print(__FUNCSIG__" ТИКЕТ ", IntegerToString(ticket));
      ulong myMN=PositionGetInteger(POSITION_MAGIC);
            Print(__FUNCSIG__" МАГИК ", IntegerToString(myMN));
      if(myMN==Magic)
            count++;
     }
   return(count);
  }
//+------------------------------------------------------------------+
 
Pavel Nikiforov:

Je l'ai compris moi-même, la sélection doit être faite en utilisantPositionGetSymbol:

Pas bien compris. Vous devez sélectionner sur le compte hadge en utilisant la fonction PositionGetTicket(i) et ensuite vérifier le symbole et la magik.

Документация по MQL5: Торговые функции / PositionGetTicket
Документация по MQL5: Торговые функции / PositionGetTicket
  • www.mql5.com
Торговые функции / PositionGetTicket - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Les commentaires non liés à ce sujet ont été déplacés vers "Questions des débutants de MQL4 MT4 MetaTrader 4".
 
Alexey Viktorov:

Ce n'est pas bon de le découvrir. Vous devez sélectionner sur le compte hadge avec la fonction PositionGetTicket(i) et ensuite vérifier le symbole et le magik.

Oui, c'est mieux, les autres fonctions étaient aussi défaillantes dans la démo, mais maintenant ça marche.

 

Bonjour, pouvez-vous me conseiller sur cet indicateur https://www.mql5.com/ru/forum/94447#comment_6780067.

Il place des cercles rouges et bleus sur le graphique lorsque le prix change radicalement, c'est-à-dire lorsque le prix change de 4 pips ou plus,

J'ai besoin que ces signaux ne se déclenchent que lorsque le prix change de 10 pips ou plus.

Dossiers :
1.png  48 kb
 
yesterday35:

Bonjour, pouvez-vous me conseiller sur cet indicateur https://www.mql5.com/ru/forum/94447#comment_6780067.

Il place des cercles rouges et bleus sur le graphique lorsque le prix change radicalement, c'est-à-dire lorsque le prix change de 4 pips ou plus,

Je veux que ces signaux ne se déclenchent que lorsque le prix change de 10 pips ou plus.

Cet indicateur ne calcule pas les pips, mais le sigma ou RMS (root-mean-square deviation). Sur un échantillon des N derniers ticks (50 par défaut). Il construit un canal de 3 sigmas. Si le prix est sorti du canal, il marquera cet endroit. Mais le problème principal est que la série de prix initiale n'a pas une distribution normale avec des queues très lourdes. En fait, cet indicateur est un jouet d'aide.

 

Bonjour.

J'écris un petit programme. Je suis confronté à une situation totalement incompréhensible.

Dans mon code, il y a ces deux lignes. Ils sont à la toute fin de OnTester() et ne sont pas dans la boucle.

Print("Мат ожидание ставки  ",MatOgidanieStavk(KKef,VVer,Stavka)," Ставка ",Stavka);
Print("Ставка =",Stavka);

Et voici un résultat inattendu de l'exécution de ces lignes.

Мат ожидание ставки  447.0461599959392 Ставка -1.0
Ставка =3912.820000338397

Voici la définition de la fonctionMatOgidanieStavk

double MatOgidanieStavk(double Kef,double Ver,double &BestStavka)
{
 .......... 
   BestStavka=-1;// Первое обращении к этой переменой.
............
return MatOgidanie;
}
 
pivomoe:

Bonjour.

J'écris un petit programme. Je suis confronté à une situation totalement incompréhensible.

Dans mon code, il y a ces deux lignes. Ils sont à la toute fin de OnTester() et ne sont pas dans la boucle.

Et voici un résultat absolument inattendu de l'exécution de ces lignes.

Voici la définition de la fonctionMatOgidanieStavk

Stavka est initialisé avant l'impression ?

comment est-il déterminé que l'appel est le premier à l'intérieur de la fonction ?

quel résultat attendiez-vous ?

 

Merci. J'ai résolu le problème.

Il s'est avéré que la variableStavka avant Print. était égal à -1. Sa valeur a été transmise à la fonction Print et enregistrée comme une copie. Ma fonctionMatOgidanieStavk a modifié la variableStavkaelle-même, et non sa copie qui sera imprimée.

 
C'est comme ça que ça devrait être.

2795/2797 sera 0. Puisque l'arrondi n'est pas effectué. Soit s3 = (double)s2/s1 ; soit choisir le double pour s2 et s1