Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 840

 

O que está errado?

Há uma classe de modelo

template <typename T>
class MyList{
 private:
    T *array[];
    int _size;
public:
    WavesList(){
        _size = 0;
    }
    void add(T &obj){
        _size++;
        ArrayResize(array, _size, 0);
        array[_size-1] = obj;
    }
    void cut(){
        delete array[_size-1];
        _size--;
        ArrayResize(array, _size, 0);
    }
    int size(){
        return _size;
    }
    T lastWave(){
        return array[size-1];
    }
};

Então, no código eu tento fazer assim:

MyList myList<OtherClass>();

É uma carranca!

 
Roman Sharanov:

Então eu tento fazer isso no código:

É uma carranca!

Eu preciso assim:

MyList<OtherClass> myList;

aqui está um exemplo de como trabalhar com modelos postadosem https://www.mql5.com/ru/forum/221917/page25#comment_11205772

veja se você pode usar meu código como uma analogia com o seu

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2019.04.03
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 
Igor Makanu:

tem que ser assim:

aqui está um exemplo de como trabalhar com os modelos que eu publiqueihttps://www.mql5.com/ru/forum/221917/page25#comment_11205772

Veja se você pode usar meu código para escrever o seu

Obrigado

 

é possível definir a posição do texto em relação à linha ?

A linha é criada programática, o texto é traçado acima da linha, mas em alguns casos preciso que o texto esteja no fundo...


como fazer isso ?


void paintShLine(datetime sdata, datetime edata, double bev, string nm, string txt, color cl)
   {
      ObjectCreate(0, nm, OBJ_TREND, 0, sdata, bev, edata, bev);
       
      //--- установим цвет линии
      ObjectSetInteger(0,nm,OBJPROP_COLOR,cl);
      //--- установим стиль отображения линии
      ObjectSetInteger(0,nm,OBJPROP_STYLE,STYLE_DASH);
      //--- установим толщину линии
      ObjectSetInteger(0,nm,OBJPROP_WIDTH,1);
      //--- включим (true) или отключим (false) режим продолжения отображения линии вправо
      ObjectSetInteger(0,nm,OBJPROP_RAY_RIGHT,true);
      ObjectSetInteger(0,nm,OBJPROP_RAY,true);    
      //--- отобразим на переднем (false) или заднем (true) плане
      ObjectSetInteger(0,nm,OBJPROP_BACK,true);
      //--- включим (true) или отключим (false) режим перемещения линии мышью
      ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
      //--- установим текст
      if (showShadowText) ObjectSetString(0,nm,OBJPROP_TEXT,"  "+txt);
      //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
      ObjectSetInteger(0,nm,OBJPROP_HIDDEN,true);
 }
 
Boa tarde,
Gostaria de fazer com que ao abrir uma negociação de compra o consultor compare o lote comercial do lote comercial aberto com o lote comercial máximo e se o lote estiver acima de um certo valor o consultor fecha automaticamente a última negociação.

no exemplo abaixo indiquei que o consultor fecha negociações se o lote comercial estiver acima de 2... Como você acha que essa condição vai funcionar?

if ((typeLastOrder===OP_BUY && orderlots()>2 || typeLastOrder===OP_BUYSTOP && orderlots()>2 || typeLastOrder===OP_BUYLIMIT && orderlots()>2)){
Alerta("não é permitido muito mais de 2");
CloseDelete(lastTicket);
retorno;
}
 
Konstantins Korolkovs:
Boa tarde,
Gostaria que o Assessor Especialista comparasse o volume de comércio do comércio aberto com o volume máximo de comércio, e se o volume for maior que um determinado valor, o Assessor Especialista fechará automaticamente o último comércio.

No exemplo abaixo, especifiquei que o Expert Advisor deve fechar negócios se o lote comercial for superior a 2. Como você acha que essa condição vai funcionar?

if ((typeLastOrder===OP_BUY && orderlots()>2 || typeLastOrder===OP_BUYSTOP && orderlots()>2 || typeLastOrder===OP_BUYLIMIT && orderlots()>2)){
Alerta ("lote maior que 2 não pode ser usado");
CloseDelete(lastTicket);
retornar;
}

E por que eu deveria abrir e depois fechar imediatamente? Talvez seja melhor não abrir de jeito nenhum?

 
Alexey Viktorov:

Por que abrir primeiro e depois fechar imediatamente? Não seria melhor não abrir de forma alguma?

Para controlar sua ganância

 

A ajuda muda para a esquerda, direita ou horizontalmente os números das velas em cima como vermelho, verde, amarelo são raros. Estes números se movem verticalmente, mas não posso fazê-lo horizontalmente. Quero que eles estejam diante da vela a que pertencem. O código do indicador:


//+------------------------------------------------------------------+

//| Bons volumes.mq4 |
//| eevviill | eevviill |
//| itisallillusion@gmail.com |
//+------------------------------------------------------------------+
#propriedade copyright "Aliev
#link de propriedade "businessystems.ru

#janela_indicadora de propriedade_separarate_window
#indicador de propriedade_mínimo 0
#property indicator_buffers 6

#largura_do_indicador de propriedade1 2
#largura_do_indicador de propriedade2 2
#largura_do_indicador de propriedade3 2
#largura_do_indicador de propriedade4 4
#largura_do_indicador de propriedade5 4

#indicador de propriedade_color1 SkyBlue
#indicador de propriedade_color2 Maroon
#indicador de propriedade_color3 Amarelo
#indicador de propriedade_color4 Azul
#indicador de propriedade_color5 Vermelho



Barras externas internasToCount = 400;

pus1 = "";
string externa p_s = "Configurações de pontos";
pontos_de_utilização de bool externo = verdadeiro;
ponto_de_intervalo externo = 80;
color_point_u_côr exterior = Cal;
color_point_d = Vermelho;
color_point_s_s de cor externa = Amarelo;
ponto_de_tamanho int externo = 6;

pus2 = "";
fio externo s_w = "Caminho";
uso_de_semana_externo de bool = verdadeiro;
uso_de_semana_de_semana_exterior = verdadeiro;

pus3 = "";
al al = "Alertas";
alertas externos de uso de bool_alerts = falsos;
string up_alert externo = "Para cima";
string externo down_alert = "Down";




dobrar[];
dobro para baixo[];
duplo meio[];
dobrar para cima2[];
dobro para baixo2[];
o dobro de nenhum[];

estático no tempo pré-vertido = 0;

///////////////////////////////////////
int init()
{
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,up);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,down);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexBuffer(2,mid);
SetIndexStyle(3,DRAW_HISTOGRAM);
SetIndexBuffer(3,up2);
SetIndexStyle(4,DRAW_HISTOGRAM);
SetIndexBuffer(4,down2);
SetIndexStyle(5,DRAW_NONE);
SetIndexBuffer(5,nenhum);


IndicatorShortName("Aliev FX Volumes");


retorno(0);
}

///////////////////////////////////////
int deinit()
{
nome da cadeia_de;
for(int c=BarsToCount;c>=0;c--)
{
name_de="Vol_"+DoubleToStr(c,0);
if(ObjectFind(name_de)!=-1) ObjectDelete(name_de);
}
retorno(0);
}


//////////////////////////////////////////
int start()
{
////////////
up[0]=EMPTY_VALUE;
down[0]=EMPTY_VALUE;
mid[0]=EMPTY_VALUE;
if(Close[0]>Open[0]) up[0]=Volume[0];
if(Close[0]<Open[0]) down[0]=Volume[0];
if(Close[0]==Open[0]) mid[0]=Volume[0];

////////////////
if(use_points)
Ob_cre(0);

if(!use_points)
Ob_del(0);
////////
if(use_show_daily_way)
Ob_cre2();
if(!use_show_daily_way)
Ob_del2();

////////////
se (Time[0] == antes do tempo) retornar(0);
prevtime = Tempo[0];
///////////////////////////
for(int c=BarsToCount;c>=1;c--)
{
////////////
if(use_points)
Ob_cre(c);

if(!use_points)
Ob_del(c);
////////////
up[c]=EMPTY_VALUE;
down[c]=EMPTY_VALUE;
mid[c]=EMPTY_VALUE;
up2[c]=EMPTY_VALUE;
down2[c]=EMPTY_VALUE;




/////////////////
if(Close[c]>Open[c]) up[c]=Volume[c];
if(Close[c]<Open[c]) down[c]=Volume[c];
if(Close[c]==Open[c]) mid[c]=Volume[c];
none[c]=Volume[c]+Volume[c]/6;


//////////////
if(use_show_same_way)
{

if(Close[c]>Open[c] && Close[c+1]>Open[c+1])
{
up2[c]=Volume[c]; up2[c+1]=Volume[c+1];
up[c]=EMPTY_VALUE; up[c+1]=EMPTY_VALUE;
}

if(Close[c]<Open[c] && Close[c+1]<Open[c+1])
{
down2[c]=Volume[c]; down2[c+1]=Volume[c+1];
down[c]=EMPTY_VALUE; down[c+1]=EMPTY_VALUE;
}

}


if(use_alerts)
{
if(up2[1]!=EMPTY_VALUE && up2[4]==EMPTY_VALUE) Alerta(up_alert);
if(down2[1]!=EMPTY_VALUE && down2[4]==EMPTY_VALUE) Alerta(down_alert);
}



}
retorno(0);
}
//func
//+------------------------------------------------------------------+///////////////////////////////
Ob_cre(int num_de_bar) vazio
{
string name="Vol_"+DoubleToStr(num_of_bar,0);

cor col_po;
if(Close[num_of_bar]>Open[num_of_bar]) col_po=color_point_u;
if(Close[num_of_bar]<Open[num_of_bar]) col_po=color_point_d;
if(Close[num_of_bar]==Open[num_of_bar]) col_po=color_point_s;

if(ObjectFind(nome)==-1)
{
ObjectCreate(nome,OBJ_TEXT,0,0)
}
ObjectSet(name,OBJPROP_TIME1,Time[num_de_bar]));
ObjectSet(name,OBJPROP_PRICE1,High[num_of_bar]+distance_point*Point);
ObjectSet(nome,OBJPROP_ANGLE,90);
ObjectSetText(name,DoubleToStr(Volume[num_do_bar],0),size_point, "Arrial",col_po);


}

/////////////////////////////////////////
Ob_cre2() vazio
{
int Num_of_win = WindowFind("Aliev FX Volumes");

if(ObjectFind("D_w")==-1)
{
ObjectCreate("D_w",OBJ_LABEL,Num_of_win,0,0);
ObjectSet("D_w",OBJPROP_CORNER,1);
ObjectSet("D_w",OBJPROP_XDISTANCE,20);
ObjectSet("D_w",OBJPROP_YDISTANCE,20);
ObjectSetText("D_w", "Volume diário",10, "Arrial",White);
}


if(ObjectFind("D_w_v")==-1)
{
ObjectCreate("D_w_v",OBJ_LABEL,Num_of_win,0,0);
ObjectSet("D_w_v",OBJPROP_CORNER,1);
ObjectSet("D_w_v",OBJPROP_XDISTANCE,20);
ObjectSet("D_w_v",OBJPROP_YDISTANCE,45);
}
cor vol_col;
if(iClose(Symbol(),PERIOD_D1,0)>iOpen(Symbol(),PERIOD_D1,0)) vol_col=Lime;
if(iClose(Symbol(),PERIOD_D1,0)<iOpen(Symbol(),PERIOD_D1,0)) vol_col=OrangeRed;

ObjectSetText("D_w_v",DoubleToStr(iVolume(Symbol(),PERIOD_D1,0),0),12, "Arrial",vol_col);


}

/////////////////////////////////////////////////////////////////
Ob_del(int num_de_bar) vazio
{
string name="vol_"+DoubleToStr(num_of_bar,0);

if(ObjectFind(nome)!=-1)
{
ObjectDelete(nome);
}


}

/////////////////////////////////////////
Ob_del2() vazio
{
if(ObjectFind("D_w")!=-1)
ObjectDelete("D_w");


if(ObjectFind("D_w_v")!=-1)
ObjectDelete("D_w_v");



}
 
koctja:

A ajuda muda para a esquerda, direita ou horizontalmente os números das velas em cima como vermelho, verde, amarelo são raros. Estes números se movem verticalmente, mas não posso fazê-lo horizontalmente. Quero que eles estejam em frente à vela à qual pertencem. O código do indicador:


Eu apenas colocaria um espaço em frente ao número em tais casos (se imprimindo horizontalmente)...
 
koctja:

Ajude a mover para a esquerda, direita ou horizontalmente os números das velas em cima como vermelho, verde, amarelo são raros. Estes números se movem verticalmente, mas não posso fazê-lo horizontalmente. Quero que eles estejam diante da vela a que pertencem. O código do indicador:

Tentedefinir o ponto de ancoragem para o objetoOBJ_TEXT no


ANCHOR_CENTER

O ponto de ancoragem está estritamente no centro do objeto


ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_CENTER);
Razão: