Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 199

 
STARIJ:
Lisez votre commentaire : il s'avère que si l'un des trois derniers ordres se ferme avec un bénéfice, le trade s'arrête !

Merci pour le conseil

OUVRIR LE NOUVEL ORDRE que j'ai donné juste à titre d'exemple. Je ne fais pas encore de commerce.

Je ne comprends pas comment coder cette condition.

Si 3 - 4 - 5 ..... derniers ordres ont été fermés au STOP

JE N'AI AUCUNE IDÉE DE CE QU'IL FAUT FAIRE.

 
Victor Nikolaev:


Les différences sont minimes. L'une des variables est booléenne.

La sortie dira vrai ou faux

Ugh, je n'arrive pas à comprendre comment ajouter des variables - par exemple, disons que j'ai 4 variables booléennes et que je dois les parcourir ?

//+------------------------------------------------------------------+
//|                                                       Decode.mq4 |
//|                                            Copyright 2017, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Vinin"
#property link      "http://vinin.ucoz.ru"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int N=15;  //0..162
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int n=0;n<N;n++)
     {
      int tmp=n;
      bool a= (bool) MathMod(tmp,2);
      bool b= (bool) MathMod(tmp,3);
      bool c= (bool) MathMod(tmp,4);
      bool d= (bool) MathMod(tmp,5);

      Print("N=",n,"; A=",a,"; B=",b,"; C=",c,"; D=",d);
     }

  }

Je comprends l'essence du cas - il doit y avoir un reste inférieur ou supérieur à zéro après la division - mais je n'arrive pas à trouver comment y parvenir :(

 
ANDREY:

Merci pour le conseil

OUVRIR LE NOUVEL ORDRE que j'ai donné juste à titre d'exemple. Je ne fais pas encore de commerce.

Je ne comprends pas comment coder cette condition.

Si 3 - 4 - 5 ..... derniers ordres ont été fermés au STOP

J'AI JUSTE BESOIN DE PRENDRE DES MESURES.

Avant d'agir, nous devrions d'abord examiner les 3, 4 ou 5 positions qui ont été fermées à la suite. Si tout est à l'arrêt, alors prenez des mesures. Elémentaire, Watson...
 
ANDREY: Il est nécessaire que non seulement le dernier mais aussi l'avant-dernier et l'avant-dernier ordre aient été fermés sur l'arrêt.

et seulement ensuite ouvrir un autre ordre

Le script est attaché - je l'ai vérifié, il fonctionne, le résultat est attaché

//+-------------------------------------------------------+
//| Подсчет убыточных ордеров                 PROBA_MA.mq4|
//+-------------------------------------------------------+
#property strict
130
void OnStart()
{
  int Счет=0, Номер=OrdersHistoryTotal()-1;

  for( ; Номер>=0; Номер--)
  {
    if(!OrderSelect(Номер, SELECT_BY_POS, MODE_HISTORY)) continue;
    Alert(Номер, "  Тикет = ", OrderTicket(),"  T =",OrderOpenTime(), "  Профит = ", OrderProfit());
    if(OrderProfit()>=0) break;
    Счет++;
    if(Счет==3)
    {
      Alert("Вот тут и открываем новый ордер");
      return;
    }
  }
  Alert("Подряд идущих убыточных ордеров слишком мало");
}

C'est toute l'histoire


Et ceci est un clic droit sur l'historique et choisi la période jusqu'au 3 mai.

 
STARIJ:

Ci-joint le script - je l'ai testé, il fonctionne, le résultat est joint.

C'est toute l'histoire.


Et ceci est un clic droit sur l'historique et la sélection de la période jusqu'au 3 mai.

C'est un arrêt. Et ce n'est pas fiable. Vous devez le faire indépendamment du tri.
 

Je suis désolé de vous déranger, je vais répondre à nouveau à ma question.

Je pense qu'il est temps de regarder le graphique, je ne suis pas un connaisseur de mql4.

J'ai peut-être posé une question dans la mauvaise branche.

 
STARIJ:

Ci-joint le script - je l'ai testé, il fonctionne, le résultat est joint.

C'est toute l'histoire.


Et ceci est un clic droit sur l'historique et la sélection de la période jusqu'au 3 mai.

Merci beaucoup pour toute votre aide.
 
Artyom Trishkin Donc c'est un arrêt. Et ce n'est pas fiable. Il faut le faire indépendamment du tri.

Artem ! Dans le coin inférieur droit du terminal se trouve l'indicateur des échanges avec le serveur - kilo-octets reçus et envoyés. L'indicateur a montré 2318. J'ai fait un clic droit sur l'historique et j'ai sélectionné Aujourd'hui (et aujourd'hui c'est dimanche). L'histoire a été vidée. Le script affiche qu'il n'y a aucun ordre dans l'historique. J'ai fait un clic droit sur l'historique et j'ai sélectionné Tout l'historique. L'indicateur a pris vie avec 518 kilo-octets ajoutés. Ainsi, lorsque vous définissez le filtre sur une LARGE période, les ordres sont téléchargés depuis le serveur. Si vous définissez une période plus courte, ils sont supprimés. Il est donc préférable de choisir Semaine dernière, Trois derniers jours ou Aujourd'hui pour accélérer votre travail (moins de commandes à traiter). Ceci peut être facilement vérifié à l'aide d'un script avec Alert(OrdersHistoryTotal()) ;

Sur le tri. Si vous cliquez sur les en-têtes de colonne dans l'historique, vous pouvez trier visuellement l'historique par ordre décroissant ou croissant de n'importe quelle colonne. Toutefois, les ordres sont toujours sélectionnés à l'aide de la fonction OrderSelect(Number, SELECT_BY_POS, MODE_HISTORY), en commençant par le début de l'intervalle SELECTED de l'historique. Et dans l'historique, les commandes sont classées selon l'heure à laquelle elles ont été envoyées au serveur, ce qui est le plus naturel. Si le nombre = 0, alors il s'agit de l'ordre le plus ancien de l'intervalle choisi de l'histoire. Si OrdersHistoryTotal()-1, il s'agit de la commande la plus récente de l'intervalle d'histoire choisi. Je l'ai vérifié plusieurs fois. Et il est peu probable que cela change un jour.

 
STARIJ:

Artem ! Dans le coin inférieur droit du terminal se trouve un indicateur d'échange avec le serveur - les kilobytes reçus et envoyés. L'indicateur était de 2318. J'ai fait un clic droit sur l'historique et j'ai sélectionné Aujourd'hui (et aujourd'hui c'est dimanche). L'histoire est vide. Le script affiche qu'il n'y a aucun ordre dans l'historique. J'ai fait un clic droit sur l'historique et j'ai sélectionné Tout l'historique. L'indicateur a pris vie avec 518 kilo-octets ajoutés. Ainsi, lorsque vous définissez le filtre sur une LARGE période, les ordres sont téléchargés depuis le serveur. Si vous définissez une période plus courte, ils sont supprimés. Il est donc préférable de choisir Semaine dernière, Trois derniers jours ou Aujourd'hui pour accélérer votre travail (moins de commandes à traiter). Ceci peut être facilement vérifié à l'aide du script qui a Alert(OrdersHistoryTotal()) ;

Sur le tri. Si vous cliquez sur les en-têtes de colonne dans l'historique, vous pouvez trier visuellement l'historique par ordre décroissant ou croissant de n'importe quelle colonne. Cependant, les ordres sont toujours sélectionnés à l'aide de la fonction OrderSelect(Number, SELECT_BY_POS, MODE_HISTORY), en commençant par le début de l'intervalle SELECTED de l'historique. Et dans l'historique, les commandes sont classées selon l'heure à laquelle elles ont été envoyées au serveur, ce qui est le plus naturel. Si le nombre = 0, alors il s'agit de l'ordre le plus ancien de l'intervalle choisi de l'histoire. Si OrdersHistoryTotal()-1, il s'agit de la commande la plus récente de l'intervalle d'histoire choisi. Je l'ai vérifié plusieurs fois. Et il est peu probable que cela change un jour.

Vous êtes si nouveau ici que vous ne savez pas tout ce qui s'est passé. Depuis trois cents ans, la règle veut qu'une recherche temporelle soit le seul moyen fiable d'identifier la dernière/première position ou les positions consécutives. Vous travaillez avec de l'argent. Ok, si seulement avec le vôtre, mais avec celui de quelqu'un d'autre, aussi. Même indirectement avec votre programme.

Et ce que vous me dites n'est pas un secret ou une révélation - tout le monde le sait depuis des années ;)

Et ce que je disais, tu ne l'as toujours pas compris...

 
Artyom Trishkin:

Vous êtes si nouveau ici que vous ne savez pas tout ce qui s'est passé. Depuis trois cents ans, la règle veut qu'une recherche temporelle soit le seul moyen fiable d'identifier la dernière/première position ou les positions consécutives. Vous travaillez avec de l'argent. Ok, si seulement avec le vôtre, mais avec celui de quelqu'un d'autre, aussi. Même indirectement avec votre programme.

Et ce que vous me dites n'est pas un secret ou une révélation - tout le monde le sait depuis des années ;)

Et ce dont je parlais, tu ne l'as toujours pas compris...

Artem, soit c'est du trolling discret, soit tu ne sais pas ce que tu écris ! !!

Dans votre dernier message, vous avez parlé du tri. On vous a expliqué qu'il n'y a pas de dépendance au tri.

J'ai vu et participé à des discussions sur le moment de la sélection des commandes dans l'un d'entre eux. La conclusion a été que les commandes sont désormais triées dans la base de données des commandes au moment où elles sont envoyées au serveur. Mais théoriquement, il y a une crainte que les développeurs puissent changer cela. C'était la fin de cette discussion. En tant que spécialiste des bases de données, je vous assure que cette crainte n'est pas fondée, un changement n'est pas envisageable. Vous pouvez soumettre le problème aux développeurs. Si j'écris quelque chose, je sais ce que j'écris. C'est le 50e anniversaire de la programmation. Si vous remarquez dans mes posts un certain désordre de votre point de vue - écrivez-moi en personne. Je vais vous expliquer, et vos doutes se dissiperont. Mais ici, les chamailleries ne sont pas appropriées. J'ai écrit un script à cet homme - il m'a dit merci. C'est bon, non ?

A propos de l'autre jour. Je viens de changer mon nom d'utilisateur, vous pouvez deviner ce que c'était par le style. Ou vérifiez votre IP, vous avez probablement un accès... Veuillez la laisser sans réponse.