[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 54

 

Quel type de constantes : MA_TALKING_LONG , MA_TALKING_SHORT ?

Comment les déclarer ?

 
Vinin:

Tenir compte de la visibilité des variables et des tableaux


Je les ai réglés sur global... Même erreur.

FAQ:

Quel type de constantes : MA_TALKING_LONG , MA_TALKING_SHORT ?

Comment les déclarer ?

#define MA_TALKING_LONG                         0                             // Машки расположены к покупке
#define MA_TALKING_SHORT                        1                             // Машки расположены к продаже
#define MA_TALKING_FLAT                        -1                             // Машки указывают на флет
 

montrer l'en-tête (déclaration) de cette fonction GetStateMa() - le problème est là

changez-le en GetStateMa(int signal){} devrait le réparer

 
FAQ:

montrer l'en-tête (déclaration) de cette fonction GetStateMa() - le problème est là

Changez-le en GetStateMa(int signal){} devrait le réparer.

Bref, voici l'essentiel. Un pro ici a corrigé mon Expert Advisor, il fonctionnait bien. Ma tâche était d'ouvrir 4 signaux différents par un seul ordre et de séparer les calculs de chaque signal. Il a réparé mon conseiller-expert, mais a gâché sa logique.

J'ai commencé à analyser son code. Son écriture est brutale, je m'y suis penché depuis le deuxième jour.

Avant, c'était comme ça :

au départ :

   int signal[4];
   CalcSignals(signal);

   if (!Trade(signal))
      return (0);

Et voici les fonctions pour que tout soit clair :

//+-------------------------------------------------------------------------------------+
//| Получение значений МА на двух соседних барах                                        |
//+-------------------------------------------------------------------------------------+
double GetCurAndPrevMA(int maPeriod, double& prevMA)
{
   prevMA = iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 1);
   return (iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 0));
}
//+-------------------------------------------------------------------------------------+
//| Получение положения машек между собой                                               |
//+-------------------------------------------------------------------------------------+
void CalcSignals(int& signal[])
{
   double ema365_1;
   double ema365_0 = GetCurAndPrevMA(365, ema365_1);

   for (int i = 0; i < 4; i++)
   {
      double ema1;
      double ema0 = GetCurAndPrevMA(g_maPeriod[i], ema1);
      signal[i] = SIGNAL_NO;

      if (ema1 < ema365_1 && ema0 > ema365_0)
         signal[i] = SIGNAL_BUY;
      if (ema1 > ema365_1 && ema0 < ema365_0)
         signal[i] = SIGNAL_SELL;
   }
}

D'une manière générale, il est amusant de voir qu'une fonction comme void ne devrait rien retourner par définition mais pourtant elle retourne la valeur d'un élément du tableau signal[i].

Je me demande si les programmeurs expérimentés utilisent souvent cette méthode ? Ou est-ce que c'est trop ?

Maintenant j'essaie d'écrire ce dont j'ai besoin en voyant les astuces qui sont présentes dans cet Expert Advisor. Parce que nous ne pouvons pas nous passer de tableaux à cet endroit.

 
Тhoz:

Bref, voilà l'essentiel. Mon conseiller expert, qui fonctionnait bien pour moi, a été corrigé par un professionnel. Ma tâche consistait à ouvrir un seul ordre par 4 signaux différents et chaque signal était généré et calculé séparément. Il a réparé mon conseiller-expert, mais a gâché sa logique.

J'ai commencé à analyser son code. Son écriture est brutale, je m'y suis penché depuis le deuxième jour.

Avant, c'était comme ça :

au départ :

Et voici les fonctions pour que tout soit clair :

D'une manière générale, il est amusant de voir qu'une fonction comme void ne devrait rien retourner par définition mais pourtant elle retourne la valeur d'un élément du tableau signal[i].

Je me demande si les programmeurs expérimentés utilisent souvent cette méthode ? Ou est-ce que c'est trop ?

Maintenant j'essaie d'écrire ce dont j'ai besoin en voyant les astuces qui sont présentes dans cet Expert Advisor. Parce que nous ne pouvons pas nous passer de tableaux à cet endroit.

Utilisé fréquemment, secret dans int& , double&.
 
Mislaid:
C'est souvent utilisé, le secret dansint& ,double&.

Je l'ai déjà compris, mais je pense que c'est déjà une perversion. Pourquoi faire une fonction vide alors ? Ce n'est pas logique. Vous avez besoin de retourner quelque chose... retournez-le par une fonction de type int, double...

 
Une erreur s'est produite lors du débogage de l'imprimante :
2013.01.06 21:06:32     2011.11.28 00:20  Base150 EURUSD,M5: not enough stack for parameter

Que faire ?

 
hoz:

Je l'ai déjà compris, mais je pense que c'est déjà une perversion. Pourquoi faire une fonction vide alors ? Ce n'est pas logique.

C'est logique.

Cette fonction ne retourne rien, elle effectue des opérations sur les éléments du tableau qui lui est passé.

 
hoz:

Voici ma fonction de modification de l'ordre en attente. Lors de la modification, je fixe un nouveau prix et un nouveau stoploss. La fonction fonctionne partiellement, mais pour une raison quelconque, le testeur obtient des erreurs 1.

Ma fonction est-elle écrite correctement ?

if((b_mod) && (priceB > Ask)) OrderModify(b_ticket,priceB,priceS,0,0,Brown) ;
if((s_mod) && (priceS < Bid)) OrderModify(s_ticket,priceS,priceB,0,0,Brown) ;


Ici, nous devrions considérer MarketInfo(Symbol(),MODE_STOPLEVEL) c'est à dire

priceB >= Ask+ MarketInfo(Symbol(),MODE_STOPLEVEL)*Point

priceS < =Bid- MarketInfo(Symbol(),MODE_STOPLEVEL)*Point

 
PapaYozh:

C'est logique.

Cette fonction ne retourne rien, elle opère sur les éléments du tableau qui lui est passé.


Ainsi, si vous passez des éléments à une fonction de type double ouint, celle-ci peut également effectuer les mêmes opérations, mais sans aucune perversion. Pourquoi se compliquer la vie ?