Questions des débutants MQL5 MT5 MetaTrader 5 - page 481

 
Bonjour !

Quelqu'un a-t-il un exemple de code qui dessine certaines icônes, par exemple des flèches sur le graphique de l'indicateur, lorsque les lignes se croisent, s'il y en a deux, ou lorsque la ligne "0" est franchie, ou tout autre critère ? De préférence, en haut et en bas de la fenêtre de l'indicateur d'auto-échelle.
 
Sergei Vladimirov:
Appuyez sur "Charger". Seules les 2048 dernières mesures sont automatiquement chargées, le reste doit être botté.
C'est comme ça que ça s'est passé après "Load"...
 
Mike:
C'est comme ça que c'est sorti après "Load" ...
Effacez de force le dossier d'archives de l'historique et exécutez le terminal - puis chargez toutes les citations.
 
Leo59:
Bonjour !

Peut-être quelqu'un a-t-il un exemple de code qui dessine des icônes, comme des flèches sur le graphique de l'indicateur, lors du franchissement des lignes, s'il y en a deux, ou lors du franchissement de la ligne "0", ou tout autre critère ? De préférence, en haut et en bas de la fenêtre de l'indicateur d'auto-échelle.

Voici une de mes dindes, peut-être que ça t'aidera. Le code est pour MT4, tel qu'il est. Il fonctionne également avec les journaux.

void PlotArrowUP(int i)
{
    string sup = "\xE9"; //233
    datetime dt = iTime(NULL, 0, i); 
    double dprice = (WindowPriceMax()-WindowPriceMin())/(100.0/ArrowOffsetInPercentOfScreen); //настроить масштаб под свои нужды
    ObjectCreate("arr1"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]-dprice);   
    ObjectSetText("arr1"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowUp);
    ArrowIdx++;
    if(EnableLogFile)
    {
        string dts = TimeToStr(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS);
        FileWrite(LogFile1, dts, "  call PlotArrowUp(i) i=", i, "  FastBuffer[i]=", FastBuffer[i]);
    }
}

void PlotArrowDown(int i)
{
    string sup = "\xEA"; //234
    datetime dt = iTime(NULL, 0, i); 
    double dprice = (WindowPriceMax()-WindowPriceMin())/(100.0/ArrowOffsetInPercentOfScreen);
    dprice*= 2.0;
    ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]+dprice);   
    ObjectSetText("arr0"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowDown);
    ArrowIdx++;
    if(EnableLogFile)
    {
        string dts = TimeToStr(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS);
        FileWrite(LogFile1, dts, "  call PlotArrowDown(i) i=", i, "  FastBuffer[i]=", FastBuffer[i]);
    }
}
 
Alexey Volchanskiy:

Вот из моего индюка, может, поможет. Код для МТ4, выкладываю, как есть. Там еще работа с логами.

Merci Alexey pour vos commentaires !

Dans votre exemple, c'est à travers les objets. Je me demande s'il est possible de le faire par le biais de tableaux, de sorte que lorsque je change d'échelle, ils sont toujours aux limites supérieures et inférieures de la fenêtre ?
 
Leo59:
Alexey Volchanskiy:
Merci Alexey pour vos commentaires !

Dans votre exemple, c'est à travers les objets. Je me demande s'il est possible de le faire par le biais de tableaux, de sorte que lorsque je change d'échelle, ils sont toujours en haut et en bas de la fenêtre ?

Je ne comprends pas pour les tableaux. Dans les commentaires, j'ai ajouté

ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]+dprice);
// "arr0"+ArrowIdx - формируем уникальное имя стрелки
// FastBuffer[i]+dprice - тут формируется цена, на которой будет рисоваться стрелка
   
ObjectSetText("arr0"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowDown);
ArrowIdx++; // для каждой стрелки нужно уникальное имя

De plus, si vous devez dessiner sur le bord supérieur, procédez comme suit

ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, ChartGetDouble(0,CHART_PRICE_MAX,0); 

Lisez l'aide de l'éditeur ; elle est décrite ici en détail avec des exemples.

Référence MQL4 / Constantes, énumérations et structures standard / Constantes de diagramme / Exemples de travail avec des diagrammes

 
Alexey Volchanskiy:

Je ne comprends pas pour les tableaux. Dans les commentaires, j'ai ajouté

En outre, si vous devez dessiner sur le bord supérieur, procédez comme suit

Lisez l'aide de l'éditeur ; elle est décrite ici en détail avec des exemples.

Référence MQL4 / Constantes, énumérations et structures standard / Constantes de diagramme / Exemples de travail avec des diagrammes

Changer

WindowPriceMax() и WindowPriceMin()

Les objets doivent être redessinés de force à une distance donnée des bords de la fenêtre.

 
Leo59:

Avec le changement

les objets devront être forcés à être redessinés à une distance donnée des bords de la fenêtre.

Les anciens objets resteront à leur place - aux anciens prix. Si vous devez les déplacer vers les limites, vous devrez les redessiner manuellement. Je ne connais pas complètement votre problème.

Vous pouvez utiliser OnChartEvent pour suivre les changements de fenêtre.

 
Alexey Volchanskiy:

Les anciens objets resteront à leur place - aux anciens prix. Si vous devez les déplacer vers les limites, vous devez les redessiner à la main. Je ne connais pas complètement votre tâche.

Vous pouvez utiliser OnChartEvent pour suivre les changements de fenêtre.

À première vue, cela semble être une tâche simple. MAIS ! ....
Il y a une ligne de n'importe quel oscillateur dans la fenêtre de l'indicateur, qui se déplace relativement à "0" avec une amplitude différente.
Le problème réel est le suivant :
- En croisant le "0" de bas en haut, dessinez une flèche sur le bord inférieur de la fenêtre de l'indicateur,
- En croisant "0" du haut vers le bas, pour dessiner une flèche près du bord supérieur de la fenêtre de l'indicateur,
- lors de la mise à l'échelle automatique du graphique de l'oscillateur dans la fenêtre de l'indicateur, les flèches devraient automatiquement rester à leurs limites de la fenêtre de l'indicateur.
Par exemple, en faisant défiler le graphique en avant et en arrière dans l'historique ou en changeant son échelle horizontale, les flèches restent toujours aux limites de la fenêtre de l'indicateur.
 
Leo59:
À première vue, la tâche semble aussi simple que trois kopecks. MAIS ! ....
Il y a une ligne d'un oscillateur quelconque dans la fenêtre de l'indicateur, qui tourne relativement à "0" avec une amplitude différente.
Le problème réel est le suivant :
- En croisant le "0" de bas en haut, dessinez une flèche sur le bord inférieur de la fenêtre de l'indicateur,
- En croisant "0" du haut vers le bas, pour dessiner une flèche près du bord supérieur de la fenêtre de l'indicateur,
- lors de la mise à l'échelle automatique du graphique de l'oscillateur dans la fenêtre de l'indicateur, les flèches devraient automatiquement rester à leurs limites dans la fenêtre de l'indicateur.
Par exemple, en faisant défiler le graphique en avant et en arrière dans l'historique ou en changeant son échelle horizontale, les flèches restent toujours aux limites de la fenêtre de l'indicateur.

La tâche est et reste assez simple.

Lorsque la fenêtre est modifiée ou défilée,OnChartEvent est appelé, il transmet un événement sans paramètres:

événement de changement de graphiqueCHARTEVENT_CHART_CHANGE

Si cet événement se produit, nous déterminons la barre visible de gauche et de droite et dans ces limites, nous trouvons toutes les flèches dans la fenêtre de l'indicateur. S'il est trouvé, nous le déplaçons vers la frontière nécessaire. Lorsque vous créez des flèches, donnez-leur des noms tels que Flèche haute***** et Flèche basse***** pour éviter les problèmes liés à l'analyse. Puis, juste au cas où, appelez ChartRedraw.

Raison: