[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 651

 
xtonic:

Les énigmes du soir de Metha :

J'ai importé des citations de l'archive des citations, il est dit dans 1 minute : Base de données : 0 / 3665972, la fenêtre est vide - qu'est-ce que cela peut signifier ?

Lorsque j'ouvre le graphique autonome EURUSD, M1 - il affiche de grandes lettres : "Mise à jour en attente" - qu'est-ce que cela peut signifier ?

J'exécute un test - TestGenerator : pas de données historiques 'EURUSD1'.

Rechargez le terminal. Si tout a été fait correctement, il devrait apparaître.

 

où lire comment est dessiné un indicateur avec les paramètres suivants

SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1)

SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2)

Je ne comprends pas pourquoi parfois il dessine parfois non - je comprends que si vous dessinez une ligne normale DRAW_LINE - la valeur tampon de l'indicateur définira l'axe des y, mais le numéro de l'élément correspond au nombre de barres sur le graphique

pourquoi le segment horizontal sur la barre apparaît lorsque deux tampons indicateurs sont sur la même barre, mais lorsque l'un des tampons indicateurs est EMPTY_VALUE - rien, et je ne comprends pas la logique de coloration

 
ToLik_SRGV:

Rechargez le terminal. Si tout a été fait correctement, il devrait apparaître.


J'ai déjà fait tout ça, j'ai même redémarré le système, c'est le but.

 
xtonic:


J'ai déjà fait tout ça, j'ai même redémarré le système, c'est le but.


Avez-vous importé des citations d'où ?

Si vous pouviez expliquer exactement ce que vous faites, étape par étape, vous auriez plus de chances d'obtenir de l'aide ici.

 

Bonnes gens, ayez pitié - je n'arrive pas à obtenir : acheter/vendre après un autre pic de CCI lissé.

J'ai essayé de déclarer le second tampon (il me semble plus logique), pas d'erreur, log - silencieux, print, apparemment, comme une chèvre - je ne comprends rien.

 // Торговые критерии
   double c1b[];
   ArrayResize(c1b,PeriodB);
   double c1b_1[];
   ArrayResize(c1b_1,AvgB);
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   {
   c1b_1[i]=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   }
   }
   
   double c1s[];
   ArrayResize(c1s,PeriodS);
   double c1s_1[];
   ArrayResize(c1s_1,AvgS);
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   {
   c1s_1[i]=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   }
   }

if (NormalizeDouble(c1b_1[i],4)<NormalizeDouble(c1b_1[i+2],4)&&NormalizeDouble(c1b_1[i+2],4)>NormalizeDouble(c1b_1[i+3],4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1[i],4)>NormalizeDouble(c1s_1[i+2],4)&&NormalizeDouble(c1s_1[i+2],4)<NormalizeDouble(c1s_1[i+3],4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

La pièce jointe contient l'ensemble du conseiller expert. Après avoir testé dans la visualisation, le CCI est dessiné à la fois dans cette version et dans l'ancienne (il est tracé dans le fichier joint), mais le lissé ne l'est pas et donc les trades ne sont pas ouverts.

Ancienne variante :

// Торговые критерии
   double c1b[];
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);

if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Je comprends que personne n'a le temps de nettoyer les autres, conseillez-moi au moins où insérer exactement l'empreinte et où chercher le retour d'information dans le journal ou les journaux et ce à quoi vous devez faire attention.

Dossiers :
21.mq4  15 kb
 

Bonjour !

J'ai une question sur la fermeture partielle, car chaque société de courtage a ses propres règles. Je ne comprends pas comment faire la comptabilité des commandes correctement :

Le problème : nous devons trouver un tick d'une commande nouvellement passée dans ce TS particulier sans faire appel à un magicien.

1) J'ai remarqué qu'un ordre partiellement fermé a un commentaire, vous devriez être en mesure de lire le commentaire // Je ne suis pas sûr que toutes les sociétés de courtage écrivent des commentaires

2) recherche par date d'ouverture de l'ordre // pas sûr que cela fonctionne pour toutes les sociétés de courtage

3) recherchez un nouveau tick juste après une clôture partielle et vérifiez le volume, etc. pour voir si c'est le bon ordre.

4) autre chose

 
wenay:

comment mieux faire le comptage des commandes :

lisez l'aide ici :
commentaire - Texte du commentaire de commande. La dernière partie du commentaire peut être modifiée par le serveur commercial.

magic - Le numéro magique de la commande. Peut être utilisé comme un identifiant défini par l'utilisateur.

La magie est un bon moyen de vous aider

Pour rechercher un ordre, procédez comme suit

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {

.......

 
Craft:

Veuillez indiquer à quel endroit précis l'impression doit être insérée et où trouver le retour d'information dans le journal de bord ou les fichiers journaux et ce à quoi vous devez faire attention.

Imprimez où vous voulez vérifier la situation (par exemple, si vous passez une commande - imprimez le fait de passer la commande ou une erreur de passage de la commande dans le journal).

Si vous n'êtes pas sûr que votre fonction puisse être appelée, c'est-à-dire que la condition d'appel de la fonction ne sera jamais remplie, ajoutez le paramètre Print à l'entrée de la fonction.

Impression lue dans le terminal dans l'onglet "Experts".

 
IgorM:

où lire comment est dessiné un indicateur avec les paramètres suivants

SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1)

SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2)

Je ne comprends pas pourquoi parfois il dessine parfois non - je comprends que si vous dessinez une ligne normale DRAW_LINE - la valeur tampon de l'indicateur définira l'axe des y, mais le numéro de l'élément correspond au nombre de barres sur le graphique

quels sont les paramètres du tampon de l'indicateur lorsque son type est DRAW_HISTOGRAM ? pourquoi lorsque deux tampons d'indicateurs se retrouvent sur une barre, un segment horizontal sur la barre apparaît, mais lorsque l'un des tampons d'indicateurs est égal à EMPTY_VALUE - rien, et je ne comprends pas la logique de coloration

Lestyle de DRAW_HISTOGRAM n'est pas fondamentalement différent des autres styles de dessin de lignes, l'axe X est représenté par des numéros de barres, l'axe Y - par les valeurs du tableau d'indicateurs, mais comme on dit, il y a une nuance.
Prenons l'exemple d'un indicateur simple :

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_width1 2
double SIMPLE[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, SIMPLE);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      SIMPLE[shift] = 1;
   }
}
//+------------------------------------------------------------------+

Un tableau d'indicateurs, une fenêtre séparée, tous les éléments se voient attribuer la valeur 1. Lancez-le sur le graphique, et que voyons-nous (Figure 1 à gauche) :

La "fenêtre de données" montre les relevés de l'indicateur, mais il n'y a rien dans sa fenêtre. C'est là toute la nuance, MT4 ne sait pas que 1 est à quelle hauteur ? A quelle hauteur la barre doit-elle être placée ? Il n'a rien à tirer, c'est-à-dire qu'il n'y a pas de prix de division pour les barres. Comme vous l'avez remarqué, il n'y a pas de paramètre distinct qui définit la hauteur des barres, leur hauteur est définie automatiquement, par rapport aux autres éléments. Laissez-nous aider MT4 et fixer le prix de la division, nous pouvons le faire de manière programmatique :

#property indicator_minimum 0
#property indicator_maximum 2

Vous pouvez simplement fixer des minima (disons 0) et des maxima (disons 2) dans les paramètres de l'indicateur.
Et tout se met instantanément en place (Fig. 2, à droite), maintenant le terminal sait à quelle hauteur la barre doit être dessinée, 1 est au milieu entre 0 et 2 :)))) Dans cet exemple, le tableau d'indicateurs n'a qu'une seule valeur (surtout pour montrer la "nuance") et nous devons indiquer au terminal quelle est sa valeur. Si nous remplaçons les données du tableau par 1, par exemple Close[shift], le terminal n'imposera aucune contrainte et dessinera une image "à la MAKD".

Une image un peu différente si vous dessinez l'histogramme non pas dans une fenêtre séparée, mais en général. Laissons la valeur de Close[shift] pour le premier tableau d'indicateurs, changeons simplement le paramètre :

#property indicator_chart_window

Nous obtenons à nouveau la même image (Fig. 3, à gauche). Les valeurs sont présentes mais ne sont pas affichées.

Le terminal a besoin d'une base pour le calcul automatique de la hauteur de la barre, et comme les minimums et maximums ne peuvent pas être fixés dans la fenêtre générale, le deuxième tableau d'indicateurs apparaîtra. Nous ajoutons la deuxième ligne et la mettons à 0.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_color2 Red
#property indicator_width2 2
double SIMPLE[];
double SIMPLE2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, SIMPLE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1, SIMPLE2);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      SIMPLE[shift] = Close[shift];
      SIMPLE2[shift] = 0;
   }
}
//+------------------------------------------------------------------+

Les tableaux d'indicateurs commencent à s'afficher les uns par rapport aux autres. Et tout sera comme il se doit (Fig 4, à droite). Les colonnes sont tracées de SIMPLE[shift] à SIMPLE2[shift].

Et enfin, il y a le code de l'indicateur qui remplit les bougies, en bleu si elles sont à la hausse et en rose si elles sont à la baisse. Encore une fois, deux tableaux pour chaque couleur (le dessin va du début à la fin (de l'ouverture à la fermeture)).

//+------------------------------------------------------------------+
//|                                                       SIMPLE.mq4 |
//|                        Copyright © 2010,Анатолий Сергеев  |
//|                                            mql.sergeev@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_width1 2
#property indicator_color2 Blue
#property indicator_width2 2
#property indicator_color3 Pink
#property indicator_width3 2
#property indicator_color4 Pink
#property indicator_width4 2
double Blue_home[];
double Blue_end[];
double Pink_home[];
double Pink_end[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, Blue_home);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1, Blue_end);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2, Pink_home);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3, Pink_end);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      if(Close[shift] > Open[shift]){
         Blue_home[shift] = Open[shift];
         Blue_end[shift] = Close[shift];
      }else{
         Pink_home[shift] = Open[shift];
         Pink_end[shift] = Close[shift];
      }
   }
}
//+------------------------------------------------------------------+

 
IgorM:
lisez l'aide qui s'y trouve :
comment - Texte du commentaire de la commande. La dernière partie du commentaire peut être modifiée par le serveur commercial.

magic - Le numéro magique de la commande. Peut être utilisé comme un identifiant défini par l'utilisateur.

Utilisez la magie pour vous aider

Pour vérifier l'existence d'une commande, procédez comme suit :

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {

.......



Tâche : Vous devez trouver la tique d'un ordre nouvellement apparu pour ce TS particulier sans utiliser de magik .
Raison: