Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 464

 

Je n'arrive pas à résoudre le problème, je m'ennuie, et la bière n'aide pas.

Je l'ai fait :

1 - il y a 30 EAs qui travaillent sur un graphique ou un symbole et ils ont tous des numéros Medgic différents.

2- Chaque EA a 3-5 ordres ouverts ...

La tâche est d'imprimer tous les nombres dans une barre sur un graphique et le total des profits/pertes sur ceux-ci ...

Je creuse mais je n'arrive à rien :

  #define  MagicN 0
#define  MagProf 1
 ArrayResize(mags,100,1000);ArrayInitialize(mags,0);  
   for(int f=OrdersTotal()-1; f>=0; f--)
      if(OrderSelect(f,SELECT_BY_POS))
              {
               for(int z=100-1; z>=0; z--)
                 {
                  if(mags[z][MagicN]==OrderMagicNumber())
                  mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();

                  if(mags[z][MagicN]!=OrderMagicNumber())
                    {
                     mags[z][MagicN]=OrderMagicNumber();
                     mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
                    }
                 }
              }

Les bonnes personnes aident ceux qui le peuvent !!! )))))))

 
VOLDEMAR:

Je n'arrive pas à résoudre le problème, je m'ennuie, et la bière ne m'aide pas.

Je l'ai fait :

1 - il y a 30 EAs qui travaillent sur un graphique ou un symbole et ils ont tous des numéros Medgic différents.

2- Chaque EA a 3-5 ordres ouverts ...

La tâche est d'imprimer tous les nombres dans une barre sur un graphique et le total des profits/pertes sur ceux-ci ...

Je creuse mais je n'arrive à rien :

Les bonnes personnes aident ceux qui le peuvent !!! )))))))


Nous créons un tableau à deux dimensions. Dans la première dimension, nous stockons le bénéfice accumulé, dans la deuxième dimension, nous stockons la majik.

Lors du traitement des commandes, nous cherchons un chiffre magique dans le tableau, si nous ne le trouvons pas, nous augmentons le tableau, si nous le trouvons, nous augmentons le bénéfice.

Une fois le traitement terminé, nous affichons le résultat à l'écran.

 
Vinin:


Créez un tableau à deux dimensions. Dans la première dimension, nous stockons le profit accumulé, et dans la deuxième dimension, nous stockons le mejic.

Lors du traitement des commandes, nous cherchons les commandes dans le tableau, si nous ne les trouvons pas, nous augmentons le tableau, si nous les trouvons, nous augmentons le bénéfice.

Une fois le traitement terminé, afficher le résultat à l'écran.


N'est-ce pas ce que j'ai écrit ?
 
VOLDEMAR:

Ce n'est pas ce qui est écrit ?

Pas exactement. Où vous définissez la taille du tableau et recherchez un index sur Magik. Je n'ai pas vu ça.
 
for(int f=OrdersTotal()-1 ; f>=0 ; f--) // recherche d'ordre
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0 ; z<ArraySize(mags) ; z++)// deuxième boucle sur le nombre d'éléments dans le tableau
{
if(mags[z][MagicN]==OrderMagicNumber()) // si un MagicNumber existe déjà, ajoutons le bénéfice
{
mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap() ;
}
else /s'il n'y a pas de mag
{
ArrayResize(mags,z,1000) ; // développer le tableau
mags[z][MagicN]=OrderMagicNumber() ; // stocke le mag
}
}

}

Mais avec cette construction, le terminal ne veut pas tester, il dit " erreur critique".

 
VOLDEMAR:
for(int f=OrdersTotal()-1 ; f>=0 ; f--) // recherche d'ordre
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0 ; z<ArraySize(mags) ; z++)// deuxième boucle sur le nombre d'éléments dans le tableau
{
if(mags[z][MagicN]==OrderMagicNumber()) // si un MagicNumber existe déjà, ajoutons le bénéfice
{
mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap() ;
}
else /s'il n'y a pas de mag
{
ArrayResize(mags,z,1000) ; // développer le tableau
mags[z][MagicN]=OrderMagicNumber() ; // stocke le mag
}
}

}

Mais avec cette construction, le terminal ne veut pas tester, il dit "erreur critique".


Qu'est-ce que la variable MagicN et où change-t-elle ?
 
dans la définition a le paramètre 0 et MagProf dans la définition a la valeur 1
 
VOLDEMAR:
dans la définition a un paramètre 0 et MagProf dans la définition a une valeur de 1


Essayez ceci

#define MagicN 0
#define MagProf 1
double mags[10][2];
int CountMagic=0;

void CalcMagic()
  {
   for(int f=OrdersTotal()-1; f>=0; f--) // перебор ордеров
      if(OrderSelect(f,SELECT_BY_POS))
        {
         mags[FindMaic(OrderMagicNumber())][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
        }

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

int FindMaic(int Magic)
  {
   int Res=-1;
   for(int i=0;i<CountMagic;i++)
     {
      if(mags[i][MagicN]==Magic)
         Res=i;
      break;
     }
   if(Res==-1)
     {
      Res=CountMagic;
      CountMagic++;
      if(CountMagic>=ArrayRange(mags,0))
        {
         ArrayResize(mags,CountMagic+10);
        }

     }

   return(Res);
  }
//+------------------------------------------------------------------+

Dans les tableaux multidimensionnels, la dimensionnalité peut être définie en utilisant ArrayRange()

 
Il y a un StopLetter et un Freeswell que je peux obtenir via marketinfo, mais il y a la même restriction, mais qui concerne la date minimale d'expiration, généralement c'est 15 minutes. C'est-à-dire que si je mets un ordre en suspens, le temps minimal après lequel il s'autodétruira, s'il n'est pas déclenché, est de 15 minutes. C'est la question : comment connaître cette limite de manière programmatique ?
 
Desead:
Il y a un stopplay et un freezevel que je peux obtenir via marketinfo, et il y a la même restriction, mais qui concerne la date d'expiration minimale, habituellement c'est 15 minutes. c'est-à-dire que si je mets un ordre en attente, le temps minimal après lequel il s'autodétruira, s'il n'est pas déclenché, est de 15 minutes. C'est la question : comment connaître cette limite de manière programmatique ?

Demandez à votre courtier ! Certains n'exécutent pas d'échéance.

Je ne le mets pas dans une commande mais je le retire selon les conditions.