Une question pour les connaisseurs de MQL - page 8

 

Merci.

 

Bon après-midi à tous.

Veuillez me conseiller. L'indicateur indique les lignes de prix des instruments et

Il y a un commentaire textuel sur la droite - leurs noms et leurs tailles de position.

Tout fonctionne bien. Tant que je ne mets pas l'indicateur sur le graphique des instruments avec des cotations à 5 chiffres.

Les lignes de prix sont tracées. Mais le commentaire de droite disparaît complètement. Ou encore, des zéros sont affichés à la place des tailles de position.

Le journal montre une DIVIDIE ZERO (voir le graphique Alpari).

- sur EURUSD et GBPUSD - au lieu de la taille des zéros sont affichés...

Je pense que cela a à voir avec le calcul de la taille des positions :

double vol1=1, vol2, vol3, k1;

  k1=MarketInfo(Symbol_1, MODE_TICKVALUE)*iOpen(Symbol_1,0,0)/
     MarketInfo(Symbol_1, MODE_TICKSIZE);

  vol2=k1/(MarketInfo(Symbol_2, MODE_TICKVALUE)*iOpen(Symbol_2,0,0)/
           MarketInfo(Symbol_2, MODE_TICKSIZE))*vol1;

  vol3=k1/(MarketInfo(Symbol_3, MODE_TICKVALUE)*iOpen(Symbol_3,0,0)/
           MarketInfo(Symbol_3, MODE_TICKSIZE))*vol1;

    // пишем комментарий в окне индикатора с правой стороны: 
 object("Symbol1", DoubleToStr(N1,0)+"*"+Symbol_1+" -"+DoubleToStr(vol1,2), 10, indicator_color1, 5);
 object("Symbol2", DoubleToStr(N2,0)+"*"+Symbol_2+" -"+DoubleToStr(vol2,2), 10, indicator_color2, 18);
 object("Symbol3", DoubleToStr(N3,0)+"*"+Symbol_3+" -"+DoubleToStr(vol3,2), 10, indicator_color3, 31);
 object("SymbolS", "AVERAGE", 10, indicator_color4, 44);   
           

Ratio k1=MarketInfo(Symbol_1, MODE_TICKVALUE)..../MarketInfo(Symbol_1, MODE_TICKSIZE)

donne la "division par zéro" à 5 chiffres.

Veuillez me conseiller sur la manière de le réparer.

 

Veuillez me dire s'il existe un script ou un indicateur qui montre les transactions effectuées plus tôt dans l'historique, par exemple d'untel à unetelle date. Très. utile à mon avis

Merci,

Yuri

 
leonid553:

Bon après-midi à tous.

Veuillez me dire comment résoudre ce problème ?


En d'autres termes, essayez de remplacer MODE_TICKSIZE par MODE_POINT. Mais en fait, vous devez réécrire le code pour tenir compte des nullités de MarketInfo().
 
tyn:

Veuillez me dire s'il existe un script ou un indicateur qui montre les transactions effectuées plus tôt dans l'historique, par exemple d'untel à unetelle date. Ochen. Une chose utile à mon avis

Je pense que ce serait très utile,

Yuri

https://www.mql5.com/en/code - script. Vous pouvez définir la période de temps dans l'historique de votre terminal.

VisualOrders.mq4 - indicateur

Dossiers :
 

Bon après-midi.

Dans mt4 EXNESS, mes indicateurs "multidevises", pour une raison quelconque, ne fonctionnent que lorsque l'Internet est connecté (contrairement à mt4 des autres sociétés de courtage).

J'ai une bonne relation de travail avec mes indicateurs forex. Le journal donne un "zerodividi".

Lorsque je me connecte à Internet, je dois souvent cliquer d'abord sur le TF pour que les lignes d'indices apparaissent.

Pouvez-vous me dire quel est le problème et comment le résoudre ?

Quand l'internet est éteint :

Lorsqu'il est connecté :

 
leonid553:

Bon après-midi.

Dans mt4 EXNESS, mes indicateurs "multidevises", pour une raison quelconque, ne fonctionnent que lorsque l'Internet est connecté (contrairement à mt4 des autres sociétés de courtage).

J'ai une bonne relation de travail avec mes indicateurs forex. Le journal donne un "zerodividi".

Lorsque je me connecte à Internet, je dois souvent cliquer d'abord sur le TF pour que les lignes d'indices apparaissent.

Pouvez-vous me dire quel est le problème et comment le résoudre ?

Quand l'internet est éteint :

Lorsqu'il est connecté :


C'est une chose normale. Ça arrive souvent. Et on ne peut pas toujours y faire face. Bien que la division par zéro puisse être corrigée. Le problème est le plus souvent l'absence d'un environnement de marché.
 

Je ne comprends pas bien, Victor.

Est-ce une "chose normale" ? C'est clairement un problème !

Je ne comprends pas l'expression "environnement sans marché".

Si nous fixons la division à zéro, les lignes de prix apparaîtront-elles ? Je ne pense pas.

Le commentaire dans le coin droit de la fenêtre de l'indicateur s'affiche normalement. C'est-à-dire que les fonctions ObjectCreate, etc. fonctionnent normalement.

De même, les calculs mathématiques dont les numéros sont fixés dans le commentaire fonctionnent normalement.

Il ne reste que les lignes de prix de l'indicateur. Il n'y a rien d'autre.

Les lignes de prix sont fixées dans des tampons. Chaque ligne de prix est seulement une différence entre deux MA :

int start() {
     int limit;  int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars-=10;      limit=Bars-counted_bars;
  //---- основной цикл
 for(int i=0; i<limit; i++)       {
 
   Symbol1[i]= N1*
     (iMA(Symbol_1,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false))-
     iMA(Symbol_1,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false)))  ;
  .... ....

C'est donc la partie qui donne la "division par zéro" ! Mais il n'y a pas du tout de division ici, et encore moins de division par zéro !

Dans ce cas, l'erreur est donc renvoyée par le serveur (ou la plate-forme) depuis l'arrière-plan ? Ou peut-être les développeurs de MT4 n'ont-ils pas envisagé un tel problème et ont-ils défini un retour "divisé par zéro" qui ne correspond pas exactement à l'essence d'une telle erreur.

Et pourquoi l'indicateur fonctionne-t-il bien dans MT4 ? Pourquoi l'indicateur fonctionne-t-il normalement ?

Comment des plates-formes similaires pourraient-elles être différentes pour que ce simple code fonctionne différemment dans celles-ci ?

 

La division par zéro peut être gérée, mais il faut aussi que l'indicateur fonctionne correctement. C'est plus difficile.

 

Qu'est-ce qui pourrait théoriquement clocher dans ce code simple (pour 4 lignes)) :

int start() {
     int limit;  int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars-=10;
     limit=Bars-counted_bars;

  //---- основной цикл
 for(int i=0; i<limit; i++)       {
   //РИСУЕМ ЛИНИИ СИМВОЛОВ, ЕСЛИ ИМЕЮТСЯ БАРЫ

   Symbol1[i]= N1*
     (iMA(Symbol_1,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false))-
     iMA(Symbol_1,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false)))  ;
   Symbol2[i]= N2*
     (iMA(Symbol_2,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_2,0,Time[i],false))-
     iMA(Symbol_2,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_2,0,Time[i],false)))  ;
   Symbol3[i]= N3*
     (iMA(Symbol_3,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_3,0,Time[i],false))-
     iMA(Symbol_3,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_3,0,Time[i],false)))  ; 
   Symbol4[i]= N4*
     (iMA(Symbol_4,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_4,0,Time[i],false))-
     iMA(Symbol_4,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_4,0,Time[i],false)))  ;
    
      
      
   }
   return (0);
} // конец функции СТАРТ