Erreurs, bugs, questions - page 3123

 
Aleksey Mavrin #:

1. Je suis sûr que si quelqu'un cherche quelque chose dans kodobase, c'est purement pour l'utiliser dans son propre développement, c'est-à-dire qu'il cherche du code pour du code. et la qualité et la compréhensibilité du code est d'une grande importance dans ce cas. Personnellement, lorsque je suis confronté à une nouvelle tâche plus ou moins compliquée que je n'ai pas encore résolue moi-même, je consulte la base de code et s'il n'y a pas de solution raisonnable, je la fais moi-même. C'est plus efficace, mais avec la subtilité que je ne prendrai que du code presque parfait, ou du code qui peut être facilement amélioré pour devenir presque parfait. Je ne prendrai jamais une nouille, même si ça marche d'une façon ou d'une autre à la fin.

2. Vitaly vous a tout dit correctement sur les inconvénients du code, alors que vous faites des excuses de jardin d'enfants. Vous vouliez être le centre d'attention et montrer votre entêtement).

1. une confiance intéressante. Je vais essayer de deviner ses origines. Vous pensez probablement que CodeBase ne contient que des produits gratuits, qu'ils ne peuvent a priori pas être à part entière pour le trading rentable, donc les utilisateurs comprennent que (pas les programmeurs, mais ceux qui ont décidé de gagner de l'argent supplémentaire en faisant du trading) casse immédiatement leur tirelire et vont sur le marché pour acheter des produits payants, soi-disant prêts à faire du profit sur l'échange ? Si c'est votre opinion, je ne la partage pas. Il suffit de mentionner la raison principale : entre autres, il y a beaucoup de traders qui ne sont pas riches ou même libres, qui ont économisé pour le premier cent de dépôt, mais pas un programme du marché pour au moins des dizaines de dollars. Et ils comprennent également que plus un programme est bonmarché, moins il est utile, très probablement, et le code source peut ne pas être disponible du tout. - vous feriez mieux d'aller sur CodeBase et voir si vous avez la chance de trouver quelque chose de relativement utile... Et si vous avez vraiment besoin de l'améliorer, voici le code brut - étudiez-le et améliorez-le (ce que tout le monde ne fera pas). Je pense que le préjugé selon lequel le logiciel gratuit est pire que le logiciel payant est le lot de ceux qui n'ont pas creusé profondément dans CodeBase. C'est comme dire que la partie serveur payantede Metatrader est plus cool que la partie client gratuite. Il est évident que la liberté du client est financée par la rémunération du serveur - le développeur est le même et peut se le permettre. Mais si vous regardez plus loin, le monde des logiciels en général est plein d'analogues gratuits et payants avec de très bonnes fonctionnalités et une bonne qualité. En même temps, pour en revenir à l'écosystème des logiciels de trading, il faut savoir que personne ne mettra le graal du trading automatisé dans la section gratuite. Il sera difficilement disponible en Market ou autre pour un prix élevé. Mais si ce n'est pas pour courir après le graal, mais pour rechercher un bon support au moins pour le trading manuel, les logiciels gratuits ne sont pas inférieurs à de nombreux efforts payants ambitieux.

Par conséquent, tout au long de votre parcours, vous avez été absolument clair sur les intérêts des programmeurs par rapport à CodeBase, qui, je le répète, ne peuvent pas être aussi nombreux que les rêveurs de s'y trouver prêts et de gagner un peu d'argent, sans comprendre la structure du code. Si vous n'êtes pas d'accord, donnez-nous vos arguments.

2. Vitaly a eu tout à fait raison de souligner certaines lacunes, mais en fin de compte, il vous donne un couple de F en tant que revue de code. Il ne serait pas autorisé à s'approcher des professeurs d'informatique. Contrairement à lui, j'essaie d'être plus raisonnable et raisonné. On obtient un "F" pour l'ignorance totale d'un langage, ou pour le connaître si mal que le code n'est pas écrit, ou qu'il est écrit, mais que le pauvre type ne peut pas le compiler (ou ne l'interprète pas) sans erreurs et que finalement il ne fonctionne pas, ou qu'il fonctionne mais donne des déchets. Vous pouvez obtenir la note "F" si, au sens basique, le produit final fonctionne comme prévu, mais qu'il est glitchy et instable, sensiblement lent, que la fonctionnalité est très modeste et qu'il n'y a pas d'options quand vous en avez clairement besoin (bien que cela ne se réfère pas au code source, mais au résultat du travail). B peut être donné avec des défauts mineurs : vitesse insuffisamment optimisée, mauvaise lisibilité, code non formaté, non documenté. Si le code s'avérait être étrangement abscons ou schizophréniquement absurde, mais que le programme fonctionnait parfaitement et de manière stable, je ne prendrais pas la peine de donner une mauvaise note - peut-être un B au moins. Si tout le monde reçoit un enseignement standard, sans individualité, il est facile d'étouffer le talent.

Le D de Vitalik est une inflexion claire et non mon cas ; il a raison dans les conditions inadéquates de mon cas.

 
Aleksey Mavrin #:

1. Je suis sûr que si quelqu'un cherche quelque chose dans kodobase, c'est purement pour l'utiliser dans son propre développement, c'est-à-dire qu'il cherche du code pour du code. et la qualité et la compréhensibilité du code est d'une grande importance dans ce cas. Personnellement, lorsque je suis confronté à une nouvelle tâche plus ou moins compliquée que je n'ai pas encore résolue moi-même, je consulte la base de code et s'il n'y a pas de solution raisonnable, je la fais moi-même. C'est plus efficace, mais avec la subtilité que je ne prendrai que du code presque parfait, ou du code qui peut être facilement amélioré pour devenir presque parfait. Les nouilles, même si elles fonctionnent d'une manière ou d'une autre à la fin, je ne les prendrai jamais.

C'est pour les programmeurs comme nous que je propose d'introduire un vote supplémentaire pour le code source sous la forme d'un classement séparé.Il ne s'agit pas d'un dépotoir de logiciels d'un jour ou de cinq étoiles (où l'on vote pour tout ce qui est possible en matière de logiciels prêts à l'emploi, mais pas pour le code source), mais d'un site sérieux pour les commerçants et les programmeurs, connu non seulement à Runet, mais dans tout l'Internet et bien au-delà. Comment chercher des matières premières de qualité sans notation, hein ?

О проекте MQL5.community
О проекте MQL5.community
  • www.mql5.com
MQL5.community - это описание языка программирования MetaQuotes Language 5, статьи по самой различной тематике, форум, программы автотрейдинга, написанные на MQL5 c их использованием в торговой платформе MetaTrader 5
 
x572intraday #:

Déplacez vos plaintes concernant la mauvaise évaluation de votre code vers la discussion de votre code.

Je ne pense pas que tu puisses le faire toi-même, demande à ta bête noire de le faire. Arrêtez de discuter de votre création dans le fil utile général.

 
Il est très malheureux et injuste qu'il n'y ait pas de possibilité de revoter dans le BQ.

Tout d'abord, il m'est arrivé de cliquer accidentellement sur la mauvaise étoile.
Deuxièmement, le code peut être affiné et corrigé.

 
Pourquoi les crypto-monnaies désormais disponibles ne sont-elles pas sur les serveurs de MQ le week-end ? Ce n'est pas un problème de passer à un autre fournisseur 24/7, mais pourquoi MQ est-il pire ? Ça ne ferait pas de mal...
 

Market Validator laisse tomber cette

test sur EURUSD,H1 (hedging) non synchronisé avec le serveur de trading rapport du testeur de stratégie 462 trades au total

Construire MT 5 3134

 

Aidez-nous à utiliser le type de construction DRAW_FILLING.

Pour une raison quelconque, une paire de tampons fonctionne bien, mais la seconde refuse d'accepter la couleur assignée de différentes manières.


J'ai même essayé de laisser deux tampons et respectivement un build et le résultat ne change pas. Si la couleur est normale lorsque le remplissage est élevé, elle ne l'est pas lorsque le remplissage est faible.

Voici le code

#property indicator_chart_window
//---
#property indicator_buffers 4
#property indicator_plots   2
#property indicator_type1   DRAW_FILLING
#property indicator_label1  "Line UP"
#property indicator_color1  clrDarkOrchid
#property indicator_type2   DRAW_FILLING
#property indicator_label2  "Line DN"
#property indicator_color2  clrMagenta

/****************indicator buffers****************/
double upLine[],
       upWidth[],
       dnLine[],
       dnWidth[];
/**************Custom indicator initialization function**************/
int OnInit()
 {
  SetIndexBuffer(0, upLine);
  SetIndexBuffer(1, upWidth, INDICATOR_CALCULATIONS);
  SetIndexBuffer(2, dnLine);
  SetIndexBuffer(3, dnWidth, INDICATOR_CALCULATIONS);
  //PlotIndexSetInteger(1, PLOT_SHOW_DATA, false);
  //PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, -1.0);
  //PlotIndexSetInteger(2, PLOT_SHOW_DATA, false);
  //PlotIndexSetInteger(2, PLOT_LINE_COLOR, clrYellow);
  //PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, -1.0);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/****************Custom indicator iteration function*****************/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
 {
  int count = 0, limit = prev_calculated > 0 ? rates_total-1 : 0;
  if(prev_calculated == 0)
   {
    ArraySetAsSeries(time, true);
    ArraySetAsSeries(high, true);
    ArraySetAsSeries(low, true);
    ArraySetAsSeries(upLine, true);
    ArraySetAsSeries(upWidth, true);
    ArrayInitialize(upLine, 0.0);
    ArrayInitialize(upWidth, 0.0);
    ArraySetAsSeries(dnLine, true);
    ArraySetAsSeries(dnWidth, true);
    ArrayInitialize(dnLine, 0.0);
    ArrayInitialize(dnWidth, 0.0);
    for(int i = limit; i < rates_total; i++)
     {
      int arrMax = ArrayMaximum(high, i, 11); //  ищем максимум в 11-ти барах
      if(arrMax-i == 5)                       //  если максимум средний из 11-ти баров
       {
        for(int j = arrMax; j > fmax(arrMax-5, 0); j--)
        {
         upLine[j] = high[arrMax];
         upWidth[j] = high[arrMax]-_Point*2;
        }
       }
      int arrMin = ArrayMinimum(low, i, 11); //  ищем минимум в 11-ти барах
      if(arrMin-i == 5)                      //  если минимум средний из 11-ти баров
       {
        for(int j = arrMin; j > fmax(arrMin-5, 0); j--)
        {
         dnLine[j] = low[arrMin];
         dnWidth[j] = low[arrMin]+_Point*10;
  //PlotIndexSetInteger(3, PLOT_LINE_COLOR, clrYellow); // Это тоже не помогает…
        }
       }
     }
   }
//---
  Comment("\n"
         );
  return(rates_total);
 }/*******************************************************************/

Peut-être que dans un fichier .ini, quel paramètre est bloqué ? Peut-être le supprimer, mais je ne sais pas où chercher ce fichier... Je ne sais pas quoi penser.

 
Bonjour à tous, pourquoi, lorsque vous ouvrez un compte de démonstration, quel que soit le montant, le solde est égal à zéro ?
 
Alexey Viktorov #:

Aidez-nous à utiliser le type de construction DRAW_FILLING.

Pour une raison quelconque, une paire de tampons fonctionne bien, mais la seconde refuse d'accepter la couleur assignée de différentes manières.


J'ai même essayé de laisser deux tampons et respectivement un build et le résultat ne change pas. Si la couleur est normale en cas de remplissage élevé, elle ne l'est pas en cas de remplissage faible.

Voici le code

Peut-être que dans un fichier .ini, quel paramètre est bloqué ? Peut-être le supprimer, mais je ne sais pas où chercher ce fichier ... Je ne sais pas quoi penser.

DRAW_FILLING dispose de deux tampons pour le dessin

 

C'est une erreur ou c'est censé l'être ?

double arr[3] = {1.0, 2.0, 3.0};

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{

   StringFormat("%*.f", 3, arr);

}
'arr' - invalid array access