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

 
hoz:

Eh bien, c'est vrai. Vous "lisez" la fonction ligne par ligne et comprenez comment elle fonctionne, si vous êtes trop ennuyé pour l'écrire vous-même, et tout se met en place...

Vous avez un paramètre de fonction :

est l'heure d'ouverture de la dernière barre du jour, c'est-à-dire que toutes les positions qui sont fermées avant l'ouverture de la barre du jour actuel seront calculées et additionnées ! Est-ce que ça a un sens ? Donc, fixez une autre barre, qui est requise ou autre. Mais vous devez voir par vous-même.


Désolé, ça ne marche toujours pas.

Je veux que la fonction renvoie le bénéfice total pour aujourd'hui, pas pour aujourd'hui.

et peu importe comment j'ai essayé... ça ne marche pas. Le résultat est juste toute l'histoire.

Si vous soustrayez l'AVANT d'aujourd'hui de l'ensemble de l'histoire, vous obtiendrez le total d'aujourd'hui.

double tm1=GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_D1, 0));  
double tm2=GetProfitFromDateInCurrency (Symbol(), -1, -1, TimeCurrent());  

Print(  m2-m1 );

imprime nil .....

 
Il est toujours plus facile pour un fou de prouver sa bêtise à un homme intelligent que l'inverse, car il est intrinsèquement plus facile pour un homme intelligent de douter.
 
lottamer:


En théorie, si vous soustrayez ce qui s'est passé AVANT aujourd'hui de toute l'histoire, vous obtenez ce qui s'est passé aujourd'hui.

imprime ZERO, bordel de merde.....


L'idée est de comprendre ce que fait cette fonction. Et pour le comprendre, il faut le décortiquer ligne par ligne dans son intégralité. Je vous l'ai déjà dit. C'est tout à fait élémentaire. Et il est inutile d'aider, car c'est à vous de décider si vous comprenez ou non le code d'une simple fonction.

Je l'ai décrit ci-dessus.

 
hoz:


Vadim, j'ai exécuté votre script sur un terminal sur lequel je n'ai jamais ouvert d'instruments en dehors des majors et des crosses avec le yen. Quoi qu'il en soit, voici une capture d'écran :

Rien n'est gonflé parce que le tableau des données du marché est vide, à en juger par les commentaires.

1. Comment l'avez-vous fait fonctionner ? Vous devez d'abord l'exécuter sans rafraîchissement. C'est-à-dire IsRefreshRates = false. Les données ne seront pas mises à jour.

2. Vous devez alors l'exécuter avec IsRefreshRates = true. Les données seront mises à jour.

Voici une capture d'écran 1 : capture d'écran 2 :

Notez les horaires des bars. Vous pouvez également voir que MarketInfo() prend les données de l'aperçu du marché.

Voici le conseiller expert. Je l'ai un peu corrigé. Je l'ai un peu corrigé.

extern string Tool           = "AUDNZD"; // Имя инструмента.
extern bool   IsRefreshRates = true;     // Флаг включения обновления таймсерий.
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start()
 {
  string sTool = Tool; // Имя инструмента.
  if (Tool == "") sTool = Symbol();
  while (!IsStopped())
   {
    if (IsRefreshRates) RefreshRates();
    string sComment = StringConcatenate("MarketInfo() (", sTool, ")\n",
                                        TimeToStr(MarketInfo(sTool, MODE_TIME), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n",
                                        DoubleToStr(MarketInfo(sTool, MODE_BID), Digits), "  ", DoubleToStr(MarketInfo(sTool, MODE_ASK), Digits),
                                        "\n\nПредопределенные переменные (", Symbol(), ")\n",
                                        TimeToStr(Time[0], TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n",
                                        DoubleToStr(Bid, Digits), "  ", DoubleToStr(Ask, Digits),
                                        "\n\nМассивы-таймсерии (", sTool, ")\n");
    for (int i = 0; i < 10; i++)
     {
      sComment = sComment + StringConcatenate(TimeToStr(iTime(sTool, 0, i), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "  ",
                                              DoubleToStr(iOpen(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iLow(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iHigh(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iClose(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iVolume(sTool, 0, i), 0), "\n");
     }
    Comment(sComment);
    Sleep(300);
   }
 } 
hoz:


Dimitri, ne nous disputons pas. Il vaut mieux s'entraider, car vous et Vadim avez eu tellement de désaccords ces derniers temps. Une fois, j'ai passé deux jours dans ma tête, je ne suis pas allé à la succursale, et ensuite, comme d'habitude, je suis allé tout fouiller. Pour être honnête, c'était drôle à lire, vraiment drôle ! Il y a une telle escarmouche, et de telles discussions et congrès que je me demande juste :) Des phrases et des mots parfois abscons, mais en fait complètement absurdes. Je ne jugerai personne, bien que je sois loin d'être un penseur avancé, moi-même devant encore apprendre à apprendre (dans certains endroits à nager), puis comprendre et voir clairement que le débat a atteint l'absurdité totale.

Je pense que nous avons réuni des professionnels. Je ne dirai rien d'autre sur vous, car je vois que chacun comprend ce qu'il fait. Mais ce qui est intéressant, c'est que les professionnels sont parfois sujets à des dérapages lorsqu'ils ne veulent pas admettre leurs erreurs. Mais nous apprenons de nos erreurs ! Il n'y a pas de quoi avoir honte. Ainsi, si quelqu'un a commis une erreur, il n'est pas nécessaire de s'écarter du sujet, mais plutôt d'avouer. Pour des dizaines de pages de déchets de programmeurs se transformant en personnalités, ce n'est en quelque sorte pas une option. Le but d'au moins cette branche ou ce forum n'est pas de se chier dessus de la tête aux pieds, mais de s'améliorer en programmation et de partager nos réflexions sur le sujet. Alors, vivons ensemble. Assez de chamailleries.

Victor, ne fais pas attention. Il y a des gens qui ne savent pas comment formuler une pensée et ne savent pas comment construire un discours raisonné. Pour eux, l'argument le plus convaincant est le blasphème.

De plus, ces personnes ne sont pas réceptives à tout ce qui est nouveau. Dmitri ne comprend toujours pas comment on peut travailler avec des flux sans organiser sa file d'attente. Il n'a même pas donné un exemple où cette file d'attente est nécessaire.

Maintenant, il se dispute à nouveau. Au lieu de vérifier et d'argumenter sa position.

 
Zhunko:

Victor, vous ne faites pas attention. Il y a des gens qui ne peuvent pas formuler une pensée et ne savent pas comment construire un discours raisonné. Pour eux, l'argument le plus puissant est le blasphème.

De plus, ces personnes ne sont pas réceptives à tout ce qui est nouveau. Dmitri ne comprend toujours pas comment on peut travailler avec des flux sans organiser sa file d'attente. Il n'a même pas donné un exemple où cette file d'attente est nécessaire.

Maintenant, il se dispute à nouveau. Au lieu de vérifier et d'argumenter sa position.


Junko, tu réagis de façon excessive. Tout ce qui est écrit ici s'applique directement à vous. Vous ne comprenez rien aux flux, vous ne comprenez pas pourquoi les données sont mises à jour, etc., mais vous prétendez être un expert, et c'est une connerie. Et vous prétendez être si vertueux.
 
Integer:


Le niveau d'imagination est impressionnant. Pourquoi les données n'apparaissent-elles que pour certains symboles (qui n'ont pas été ouverts), et pas pour tous dans la revue de marché ? Comment la fonction RefreshRates() a-t-elle su que certains symboles devaient être mis à jour et d'autres non ?

Junko, arrête de délirer.

RefreshRates() ne met à jour que les valeurs avec lesquelles le conseiller expert opère. C'est comme ça qu'il le découvre. Du conseiller expert. Il y a longtemps, quelqu'un de Metakvot a écrit à ce sujet.
 
hoz:


L'idée est de comprendre ce que fait cette fonction. Et pour le comprendre, il faut le décortiquer ligne par ligne. Je vous l'ai déjà dit. C'est tout à fait élémentaire. Et il est inutile d'aider, car c'est à vous de décider si vous comprenez ou non le code d'une simple fonction.

Je l'ai décrit ci-dessus.


J'ai compris.

en général, la fonction renvoie le bénéfice total, mais seulement de la période que vous avez définie dans l'onglet Historique. et elle le modifie en cours de route immédiatement si vous changez la période dans l'onglet HISTORIQUE.

Je n'en ai pas besoin.

J'ai besoin qu'il définisse la période en fonction d'un paramètre donné.

J'essaie de modifier la fonction elle-même...

double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=iTime (NULL, PERIOD_D1, 0)   )
{
  double p=0;
  int    i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (dt<OrderCloseTime()) {
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
  return(p);
}

mais le compilateur se plaint que

iTime- Initialisation attendue

Que dois-je ajouter ?

 
Zhunko:
RefreshRates() ne met à jour que ce avec quoi l'Expert Advisor travaille. C'est comme ça qu'il le découvre. Depuis le conseiller expert. Il y a longtemps, quelqu'un de Metakvot a écrit à ce sujet.

Ne donnez pas aux fonctions du langage de programmation des caractéristiques et des propriétés mystiques qu'elles n'ont pas.

 
Sur la page précédente, à la fin, j'ai écrit sur ce qui met à jour les données.
 
Integer:

Junko, tu réagis de façon excessive. Ce qui est écrit ici s'applique directement à vous. Vous ne comprenez pas les fils, ne comprenez pas pourquoi les données ont été mises à jour, etc. Mais vous vous faites passer pour un expert, c'est un désordre. Et vous prétendez être si vertueux.

Dimitri, vous avez d'étranges phatasies... Si je vois que, quelque part, mon point de vue diverge du point de vue raisonné de l'autre, j'essaie d'y remédier, comme maintenant. J'ai traité la mise à jour des données en 2006 et je l'ai oubliée. Parce que tout fonctionne correctement pour moi. Maintenant, j'ai dû m'en souvenir à nouveau. Ce ne sera pas un problème.

Je vous ai parlé des flux en détail, avec un exemple. Une demi-page de texte. Vous ne comprenez pas. Pour moi, le travail avec des files d'attente, comme la vôtre, fait partie du passé. Je ne le ferai plus. Il y a toujours un autre moyen. Plus simple.

Il n'y a qu'un seul expert ici. C'est toi. Le programmeur le plus cool. C'est VOUS aussi. Je ne peux rien dire contre cela :-))