Una domanda per i conoscitori di MQL - pagina 8

 

Grazie.

 

Buon pomeriggio a tutti.

Si prega di avvisare. L'indicatore mostra le linee di prezzo degli strumenti e

C'è un commento testuale sulla destra - i loro nomi e le dimensioni della posizione.

Tutto funziona bene. Finché non metto l'indicatore sul grafico di strumenti con quotazioni a 5 cifre.

Le linee di prezzo sono disegnate. Ma il commento sulla destra scompare del tutto. Oppure, vengono visualizzati degli zeri al posto delle dimensioni della posizione.

Il registro mostra ZERO DIVIDIO (vedere il grafico di Alpari)

- su EURUSD e GBPUSD - al posto della dimensione vengono visualizzati degli zeri...

Penso che questo abbia a che fare con il calcolo delle dimensioni delle posizioni:

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);   
           

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

dà "divisione per zero" a 5 cifre.

Si prega di consigliare come risolvere il problema?

 

Per favore, ditemi se c'è uno script o un indicatore che mostra le transazioni fatte in precedenza nella storia, come ad esempio da così e così a così e così data. Ochen. cosa utile secondo me

Grazie,

Yuri

 
leonid553:

Buon pomeriggio a tutti.

Per favore, ditemi come risolvere questo problema?


In parole povere, provate a sostituire MODE_TICKSIZE con MODE_POINT. Ma in realtà, è necessario riscrivere il codice per tenere conto di MarketInfo() nullo
 
tyn:

Per favore, ditemi se c'è uno script o un indicatore che mostra le transazioni fatte in precedenza nella storia, come ad esempio da così e così a così e così data. Una cosa molto utile secondo me

Penso che sarebbe molto utile,

Yuri

https://www.mql5.com/en/code - script. Potete impostare l'intervallo di tempo nella storia del vostro terminale.

VisualOrders.mq4 - indicatore

File:
 

Buon pomeriggio.

In mt4 EXNESS i miei indicatori "multivaluta", per qualche motivo, funzionano solo quando Internet è collegato (a differenza di mt4 di altre società di brokeraggio).

Ho un errore quando non lo uso e ho un feedback negativo. Il registro dà un "zerodividi".

Quando mi connetto a Internet, spesso devo cliccare prima sul TF per far apparire le linee degli indici.

Potete dirmi per favore qual è il problema e come risolverlo?

Quando internet è spento:

Quando è collegato:

 
leonid553:

Buon pomeriggio.

In mt4 EXNESS i miei indicatori "multivaluta", per qualche motivo, funzionano solo quando Internet è collegato (a differenza di mt4 di altre società di brokeraggio).

Ho un buon rapporto di lavoro con i miei indicatori forex. Il registro dà un "zerodividi".

Quando mi connetto a internet, spesso devo cliccare prima sul TF per far apparire le linee degli indici.

Potreste dirmi qual è il problema e come risolverlo?

Quando internet è spento:

Quando è collegato:


È una cosa normale. Succede spesso e non sempre può essere affrontato. Anche se dividere per zero può essere risolto. Il problema è la mancanza di un ambiente di mercato il più delle volte.
 

Non capisco bene, Victor.

È una "cosa normale"? È chiaramente un difetto!

Non capisco il termine "nessun ambiente di mercato".

Se fissiamo la divisione a zero - appariranno le linee dei prezzi? Non credo.

Il commento nell'angolo destro della finestra dell'indicatore viene visualizzato normalmente. Cioè, le funzioni ObjectCreate, ecc. funzionano normalmente.

Allo stesso modo, i calcoli matematici i cui numeri sono impostati nel commento funzionano normalmente.

Rimangono solo le linee di prezzo dell'indicatore. Non c'è nient'altro.

Le linee di prezzo sono impostate in buffer. Ogni linea di prezzo è solo una differenza tra due 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)))  ;
  .... ....

Quindi questa è la parte che dà lo "zero diviso"! Ma qui non c'è nessuna divisione, tanto meno la divisione per zero!

Quindi, l'errore in questo caso è restituito dal server (o dalla piattaforma) dallo sfondo? O forse gli sviluppatori di MT4 non hanno considerato un tale inconveniente e hanno impostato il ritorno "zero-diviso" che non corrisponde esattamente all'essenza di un tale errore.

E perché l'indicatore funziona bene in MT4? Perché l'indicatore funziona normalmente?

Come potrebbero essere diverse le piattaforme simili in modo che questo semplice codice funzioni diversamente in esse?

 

La divisione per zero può essere gestita, ma è necessario che l'indicatore funzioni correttamente. Questo è più difficile.

 

Cosa potrebbe teoricamente essere sbagliato in questo semplice codice (per 4 righe)):

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);
} // конец функции СТАРТ