Desejos para MT5 - página 58

 
Urain:

Já não é relevante, excepto por uma questão de conveniência.

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

О! Obrigado, Nikolai! Consegues terminá-lo até ao fim? Isto é, à implementação de 4 funções específicas:

int  ChartGetX(datetime T);

int  ChartGetY(double P);

datetime ChartGetTime(int X);

double ChartGetPrice(int Y);

Parece que já tem o puzzle resolvido, e eu terei de andar a mexer durante muito tempo. Ficar-lhe-ia muito grato se o pudesse fazer.

 

Renat:

Trocar vários Consultores Especialistas num só símbolo é um disparate.

Isto não é mais ilusório do que a possibilidade de colocar vários indicadores num único gráfico.

A própria existência no MT4 da capacidade de criar, com um clique, quaisquer estruturas complexas a partir das EAs, para criar quaisquer carteiras a partir delas, é grandiosa.

Para ter esta funcionalidade em cinco, faça uma classe de negociação com apoio à divisão virtual da conta de negociação em subcontas

Ou criar no terminal uma oportunidade de adicionar o seu próprio símbolo virtual com base nos símbolos existentes.

 

Talvez esteja atrasado em relação às novas características do MT5, mas gostaria de poder exibir gráficos por coordenadas X e Y, e não por barras e preço, se tal possibilidade já existe, aconselhe-me, se não, penso que é fácil de implementar usando OBJ_CHART objecto gráfico com um certo símbolo/ferramenta XY_Symbol

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

О! Obrigado, Nikolai! Podes terminar até ao fim? Refiro-me à implementação de 4 funções específicas:

Parece que já tem o puzzle resolvido, e eu terei de mexer nele durante muito tempo. Ficar-lhe-ia muito grato se o pudesse fazer.

Em algum lugar como este. Se precisar de um ângulo diferente, este pode ser recalculado a partir das dimensões de pixel da janela.

//+------------------------------------------------------------------+
//| Преобразование координат. Верхний левый угол привязки            |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| 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)));
  };

Exemplo de chamada.

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
 
Embora mais uma vez, seria melhor ter estas funções como padrão. Então todos os utilizadores de línguas saberiam sobre eles, e não apenas aqueles que lêem este tópico.
 
Corrigido o posto de código, descrito como funções separadas (sem classe) e alterado o ângulo de ligação.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки - Документация по MQL5
 
Urain:
Embora mais uma vez, seria melhor ter estas funções como padrão. Então todos os utilizadores de línguas saberiam sobre eles, e não apenas aqueles que lêem este tópico.

Obrigado!
 
MetaDriver:
Obrigado!
Colocar os controlos, porque por vezes não há dados e obtém-se uma divisão por zero.
 

Gostaria de ver uma implementação padrão da função procurando um número de barra num determinado momento.

Neste momento estou a implementá-lo com a CArrayLong. Mas neste caso tenho de carregar muitos dados que já existem no próprio gráfico. Significa que essencialmente duplica a memória. Penso que funcionaria muito mais rapidamente de uma forma padrão.

 
Urain:
Colocar os controlos, porque por vezes não há dados e obtém-se uma divisão por zero.
OK.