Auguri per MT5 - pagina 58

 
Urain:

Non è più rilevante, se non come questione di convenienza.

int scale =(int)ChartGetInteger(chart_id,CHART_SCALE);
int pointer_per_bar=pow(2,scale);// количество пикселей на бар
// остальное можно высчитать из первого видимого бара, и ширины графика в пикселях.

О! Grazie, Nikolai! Puoi finirlo? Voglio dire, all'implementazione di 4 funzioni specifiche:

int  ChartGetX(datetime T);

int  ChartGetY(double P);

datetime ChartGetTime(int X);

double ChartGetPrice(int Y);

Sembra che tu abbia già risolto il puzzle, e io dovrò armeggiare a lungo. Vi sarei molto grato se poteste farlo.

 

Renat:

Il trading di diversi Expert Advisors su un simbolo non ha senso.

Questo non è più delirante della capacità di mettere diversi indicatori su un grafico.

L'esistenza stessa in MT4 della capacità di creare, con un clic, qualsiasi struttura complessa dagli EAs, di creare qualsiasi portafoglio da essi, è grandiosa.

Per avere questa caratteristica in cinque, fate una classe di trading con supporto per la divisione virtuale del conto di trading in sottoconti

O creare nel terminale un'opportunità per aggiungere il proprio simbolo virtuale sulla base di quelli esistenti.

 

Forse sono indietro rispetto alle nuove funzionalità di MT5, ma mi piacerebbe essere in grado di visualizzare i grafici in base alle coordinate X e Y, e non in base alle barre e al prezzo, se esiste già una tale possibilità, consigliatemi, se no, penso che sia facile da implementare utilizzando l'oggetto grafico OBJ_CHART con un certo simbolo/strumento XY_Symbol

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
MetaDriver:

О! Grazie, Nikolai! Puoi finire fino alla fine? Intendo l'implementazione di 4 funzioni specifiche:

Sembra che tu abbia già risolto il rompicapo, e io dovrò giocarci a lungo. Vi sarei molto grato se poteste farlo.

Da qualche parte così. Se avete bisogno di un angolo diverso, questo può essere ricalcolato dalle dimensioni in pixel della finestra.

//+------------------------------------------------------------------+
//| Преобразование координат. Верхний левый угол привязки            |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| time to X                                                        |
//+------------------------------------------------------------------+
int WindowGetX(long chart_id,datetime T)
  {
   datetime temp[]; int bar=(int)ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR);
   CopyTime(ChartSymbol(chart_id),ChartPeriod(chart_id),bar,1,temp);
   return((int)NormalizeDouble(
          ((T-temp[0])/(double)PeriodSeconds(ChartPeriod(chart_id)))*
          pow(2,ChartGetInteger(chart_id,CHART_SCALE)),0));
  };
//+------------------------------------------------------------------+
//| price to Y                                                       |
//+------------------------------------------------------------------+
int WindowGetY(long chart_id,double P)
  {
   return((int)((ChartGetDouble(chart_id,CHART_PRICE_MAX)-P)*
          (ChartGetInteger(chart_id,CHART_HEIGHT_IN_PIXELS)/
          (ChartGetDouble(chart_id,CHART_PRICE_MAX)-ChartGetDouble(chart_id,CHART_PRICE_MIN)))));
  };
//+------------------------------------------------------------------+
//| X to time                                                        |
//+------------------------------------------------------------------+
datetime WindowGetTime(long chart_id,int X)
  {
   datetime temp[]; int bar=(int)ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR);
   CopyTime(ChartSymbol(chart_id),ChartPeriod(chart_id),bar,1,temp);
   return((datetime)(temp[0]+
          (X/(double)pow(2,ChartGetInteger(chart_id,CHART_SCALE)))*
          PeriodSeconds(ChartPeriod(chart_id))));
  };
//+------------------------------------------------------------------+
//| Y to price                                                       |
//+------------------------------------------------------------------+
double WindowGetPrice(long chart_id,int Y)
  {
   return(ChartGetDouble(chart_id,CHART_PRICE_MAX)-Y/
          (ChartGetInteger(chart_id,CHART_HEIGHT_IN_PIXELS)/
          ChartGetDouble(chart_id,CHART_PRICE_MAX)-ChartGetDouble(chart_id,CHART_PRICE_MIN)));
  };

Esempio di chiamata.

void OnStart()
  {
   datetime T=StringToTime("2011.02.25 18:12");
   double P=1.37831;
   Object(ChartID(),T,P);
  }
//+------------------------------------------------------------------+
void Object(long chart_id,datetime T,double P)
  {
   int x=WindowGetX(chart_id,T);
   int y=WindowGetY(chart_id,P);
   string name="Button";
   if(ObjectCreate(chart_id,name,OBJ_BUTTON,0,0,0,0,0))
     {//---
      ObjectSetInteger(chart_id,name,OBJPROP_BACK,1);
      ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(chart_id,name,OBJPROP_STATE,false);
      //--- привяжем кнопку к правому верхнему углу графика
      ObjectSetInteger(chart_id,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      //--- теперь настроим свойства объекта      
      ObjectSetInteger(chart_id,name,OBJPROP_XSIZE,40);
      ObjectSetInteger(chart_id,name,OBJPROP_YSIZE,40);
      ObjectSetInteger(chart_id,name,OBJPROP_BGCOLOR,Silver);
      ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y);
     }
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки - Документация по MQL5
 
Anche se di nuovo, sarebbe meglio avere queste funzioni come standard. Allora tutti gli utenti della lingua li conoscerebbero, non solo quelli che leggono questo thread.
 
Corretto il post del codice, descritto come funzioni separate (senza classe) e cambiato l'angolo di legame.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки - Документация по MQL5
 
Urain:
Anche se di nuovo, sarebbe meglio avere queste funzioni come standard. Allora tutti gli utenti della lingua li conoscerebbero, non solo quelli che leggono questo thread.

Grazie!
 
MetaDriver:
Grazie!
Mettete i controlli, perché a volte non ci sono dati e si ottiene una divisione per zero.
 

Mi piacerebbe vedere un'implementazione standard della funzione alla ricerca di un numero di barra in un dato momento.

Al momento lo sto implementando con CArrayLong. Ma in questo caso devo caricare molti dati che sono già presenti nel grafico stesso. Infatti duplica la memoria. Penso che funzionerebbe molto più velocemente in una forma standard.

 
Urain:
Mettete i controlli, perché a volte non ci sono dati e si ottiene una divisione per zero.
OK.
Motivazione: