Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 740

 
Taras Slobodyanik:

Fare l'inizializzazione delle variabili in OnInit (incluso il ridisegno degli oggetti)


Spiegare di cosa si tratta.

L'ho aggiunto a OnInit dopo aver creato un'etichetta

    ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y);
    ChartRedraw();


Ma il risultato è lo stesso.

 
psyman:


Spiegare di cosa si tratta.

L'ho aggiunto a OnInit dopo aver creato il tag


ma il risultato è lo stesso.

bisogno di vedere il codice, quello che c'è...

ps. il codice qui sopra funziona bene (non vedo nessun glitch)
(https://www.mql5.com/ru/forum/160683/page739#comment_10290585)


oops. anche se ho sostituito la variabile Bid con Bid0

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2019.01.17
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Buon pomeriggio, come faccio a scrivere l'ordine da aprire quando il prezzo tocca un muvingio?
 
Ivan Rozhkov:
Buon pomeriggio, come faccio a scrivere l'ordine da aprire quando il prezzo tocca un muvingio?
if ((prev_bid>ma && curr_bid<=ma) || (prev_bid<ma && curr_bid>=ma))
   //открывается ордер
 
Taras Slobodyanik:

Devo guardare il codice per vedere cosa c'è...

psst. Il codice qui sopra funziona bene (senza glitch)
(https://www.mql5.com/ru/forum/160683/page739#comment_10290585)


oops. anche se ho sostituito la variabile Bid con Bid0

Ho dimenticato di aggiungere che questo è il mio test in 5. In MT4 il marker verticale si sposta rapidamente in posizione quando si apre il grafico, senza bisogno di aspettare un tick o di muovere il mouse. Alcune volte ci sono stati dei glitch con lo spostamento orizzontale, superati solo ricompilando l'indicatore.

 
psyman:


Provato, devi muovere il mouse per riavere il segno. È la stessa stampella, ma in una mano diversa :-)

E il passaggio tra i grafici perCHARTEVENT_CHART_CHANGE non è un evento.

Qualcuno può pensare a un modo per superare questa anomalia?


Print mi visualizza un messaggio se cambio una finestra del grafico, sia in avanti che all'indietro (sono su MT4, ma non è scritto nella documentazione di MT4 che il cambio di grafico può essere catturato come un eventoCHARTEVENT_CHART_CHANGE)

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
  if(id==CHARTEVENT_CHART_CHANGE) Print("graph");
}

Ma sì, è ancora un metodo di stampella. Dobbiamo scoprire perché la coordinata Y è diversa quando si passa a un altro grafico. Ma guardando il codice, possiamo concludere che ilChartTimePriceToXY dà risultati diversi per qualche motivo.

 
psyman:

Ho dimenticato di aggiungere che sto testando questo nella 5. In MT4 il marker verticale si muove davvero rapidamente al suo posto quando il grafico viene aperto, senza bisogno di aspettare un tick o di spostare il mouse. Alcune volte ci sono stati dei glitch con lo spostamento orizzontale, superati solo ricompilando l'indicatore.

Beh, in Five ci sono un sacco di "caratteristiche" - dalla coda sul grafico alla creazione di barre dai minuti, e l'attivazione del precedente deinit dopo quello attuale)

Quindi è necessario controllare le barre/il grafico/gli oggetti - a che punto si verifica un errore e correggerlo.

 
Taras Slobodyanik:


in generale - è necessario controllare le barre/grafica/oggetti - a che punto si verifica un errore e correggerlo.


Come farlo, da dove cominciare?

 
psyman:


Come farlo, da dove cominciare?

fare una stampa ovunque, cioè stampiamo l'offerta (è possibile anche la data attuale) in oninit e poi nel calcolo...
Immagino che la storia non si sviluppi immediatamente e che le barre appaiano più tardi

 
Taras Slobodyanik:

fare una stampa ovunque, cioè in oninit stampare l'offerta (si può anche stampare la data attuale) e poi anche quando si calcola...
Io telepatizzo che questa storia non ha il tempo di costruire immediatamente e le barre appaiono più tardi

Per il prossimo codice, una storia in immagini:

//+------------------------------------------------------------------+
//|                                              !_clr_indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window


string objname="Bid";
input color Bid_color = clrCrimson;

int OnInit()
  {

int x,y;
double Bid0 = SymbolInfoDouble(Symbol(), SYMBOL_BID);
int width = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);  //ширина графика



        Print("1 Bid0 = ", Bid0,  " x = ", x, " y = ", y," TimeCurrent()=", TimeCurrent() );

   ObjectCreate(0, objname, OBJ_LABEL,0, 0, 0);
   
   ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(Bid0, _Digits-1));
        ObjectSetInteger(0, objname, OBJPROP_FONTSIZE, 12);
        ObjectSetInteger(0, objname, OBJPROP_COLOR, Bid_color);
        ObjectSetString(0, objname, OBJPROP_FONT, "Verdana");

        ChartTimePriceToXY(0, 0, TimeCurrent(), Bid0, x, y);
        Print("2 Bid0 = ", Bid0,  " x = ", x, " y = ", y," TimeCurrent()=", TimeCurrent() );
         
        ObjectSetInteger(0, objname, OBJPROP_XDISTANCE, width-60);

   ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y);

   

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

return(rates_total);

  }

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) 
  { 

int x2,y2;
double Bid2 = SymbolInfoDouble(Symbol(), SYMBOL_BID);
double  cprice;
datetime ctime;
int      cwindow=0;



if(id==CHARTEVENT_CHART_CHANGE) 
   {
   



           ChartTimePriceToXY(0, 0, TimeCurrent(), Bid2, x2, y2); 
      
      Print("5 Bid2 = ", Bid2,  " x2 = ", x2, " y2 = ", y2," TimeCurrent2()=", TimeCurrent() );
      
        ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y2);
   
   ChartXYToTimePrice(0,x2,x2,cwindow, ctime, cprice);
   

   }



  }



void OnDeinit(const int reason) 
   { 

      ObjectDelete(0,objname);
   } 
 
 


Disconnesso la rete, aggiungendo un indicatore

Passo al prossimo grafico


y2 ha cambiato valore, torno indietro


y2 ha restituito il suo valore, ma il marcatore è contato dal valore "andato"! Faccio girare la rotella del mouse.

Il marcatore è di nuovo al suo posto!

Motivazione: