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

 
Alexey Viktorov:
Isso eu lhe garanto. Mas é preciso muito esforço para descobrir que esta é a janela "Negociação" e não a janela "Histórico da Conta". A desatenção e a preguiça, sem cansar a cabeça, me levaram a acreditar que era a janela do Histórico de Contas.

Isso acontece. Perdoável.

 

Desabilitou a linha de oferta padrão no gráfico por causa do inconveniente de ler cinco dígitos, fez com que a saída fosse de 4 dígitos no canto superior, mas às vezes o preço desce, o que novamente causa inconveniência :-)

Quero fazer o objeto Label mover-se com o preço, etiqueta de preço justoOBJ_ARROW_RIGHT_PRICE que eu não gosto por causa da moldura.

Mas por alguma razão o posicionamento por preço de compra não funciona, a etiqueta é exibida no canto superior esquerdo


//+------------------------------------------------------------------+
//|                                              CandleTimeStationary|
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property strict

//---- input parameters
input color Clock_Color = clrCrimson;

string objname="Bid";


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
        ObjectCreate(0, objname, OBJ_LABEL,0, 0, 0);
        
    

        return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) { ObjectDelete(0, objname); } 

//+------------------------------------------------------------------+
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& spreads[])
{

        ObjectSetDouble(0, objname, OBJPROP_PRICE, SymbolInfoDouble(Symbol(), SYMBOL_BID));     
        ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(SymbolInfoDouble(Symbol(), SYMBOL_BID), _Digits-1));
        ObjectSetInteger(0, objname, OBJPROP_FONTSIZE, 12);
        ObjectSetInteger(0, objname, OBJPROP_COLOR, Clock_Color);
        ObjectSetString(0, objname, OBJPROP_FONT, "Verdana");
        
        return(rates_total);
}
 
psyman:

Desabilitou a linha de oferta padrão no gráfico por causa do inconveniente de ler cinco dígitos, fez com que a saída fosse de 4 dígitos no canto superior, mas às vezes o preço desce, o que novamente causa inconveniência :-)

Quero fazer o objeto Label mover-se com o preço, etiqueta de preço justoOBJ_ARROW_RIGHT_PRICE que eu não gosto por causa da moldura.

Mas por alguma razão o posicionamento por preço de compra não funciona, a etiqueta é exibida no canto superior esquerdo


ParaOBJ_LABEL, o relatório de posição é especificado em pixels.

ChartTimePriceToXY(0, 0, TimeCurrent(), Bid, x, y); // x, y добавьте в переменные, тип int
ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, ulong(y)); //если на эту строчку будет предупреждение в компиляторе то, значит ulong ненужен
//ObjectSetDouble(0, objname, OBJPROP_PRICE, SymbolInfoDouble(Symbol(), SYMBOL_BID));
ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(Bid, _Digits-1));
 
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

double Znomer()
{
zn=0; // z-число
psd=0; // кол. положительных сделок
usd=0; // количество отрицательных сделок 
ww=0; // боол переменная 
nn=0; // боол переменная
C=0; // C = количество чередований между отрицательными и положительными сделками
index=OrdersHistoryTotal(); 
if(OrdersHistoryTotal()>302) index=301; // берём не более 301 сделки
if(index<30) return(1); // берём не менее 30
count=OrdersHistoryTotal(); // считаем от скольки 
prom=count-index; // выделяем только последние сделки
if (prom<0) prom=0; // исключаем ошибки

for( i=count;i>prom;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)== true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{// далее магия
pribul=OrderProfit(); 
if (ww==0&&pribul>1){C++;ww=1;nn=0;}// подсчитываем смену тенденции
if (nn==0&&pribul<1){C++;ww=0;nn=1;}// подсчитываем смену тенденции 
if (pribul>1){psd++;}//прибыльные сделки
if (pribul<1){usd++;}// убыточные сделки

}
}
}
/*/*
Величина Z = (A * (C — 0.5) — B)/ ((B*(B — C))/(C -1))^(1/2), где:
A = количество анализируемых сделок;
B = 2*количество прибыльных сделок * количество убыточных сделок;
C = количество чередований в выборке (чередованием считается каждая пара сделок, 
когда прибыльная сделка сменяет убыточную либо наоборот).
*/
zn = (index*(C-0.5)-(2*psd*usd))/
((((2*psd*usd)*((2*psd*usd)-C))/
(C-1))*((((2*psd*usd)*((2*psd*usd)-C))/
(C-1))*0.5));



return(zn);
}

Decidi escrever um código simples para calcular a tendência de perder uma conta. Para este fim, peguei uma simples fórmula da conta Z e tentei transferi-la para o código mq4.
Tudo parece estar correto, mas quando executo uma saída simples usando a Impressão, a EA não funciona de uma só vez. Eu não recebo nenhum erro ao compilar.
Eu já me arrebentei em um código simples.

Obrigado se você puder ajudar !

 
Aliaksei Karalkou:

Decidi escrever um código simples para calcular a tendência de perder uma conta. Para este fim, peguei uma fórmula simples da conta Z e tentei usá-la em código mq4.
Tudo parece estar correto, mas quando executo uma saída simples usando a Impressão, a EA não funciona de uma só vez. Eu não recebo nenhum erro ao compilar.
Eu já me arrebentei em um código simples.

Obrigado se você puder ajudar !

Verifique a permissão de trabalho para a EA. E em que parte da produção impressa? Este pedaço de código deve retornar algo, se não houver erros, então o problema está fora deste pedaço de código. Exceto que a divisão por 0 pode ocorrer neste bloco.

 
Ilya Prozumentov:

ParaOBJ_LABEL, o relatório de posição é especificado em pixels.

Ilya, obrigado, funcionou.

Somente quando se passa para a próxima etapa - contabilizando o redimensionamento da janela - o compilador dá um aviso sobre a conversão do tipo de dados:

int width = ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);

possível perda de dados devido à conversão do tipo 4digit+.mq5 36 14


Embora a função retorne ao tipo int.


 
psyman:

Ilya, obrigado, funcionou.

Somente quando se passa para a próxima etapa - contabilizando o redimensionamento da janela - o compilador dá um aviso sobre a conversão do tipo de dados:

possível perda de dados devido à conversão do tipo 4digit+.mq5 36 14


Embora a função retorne o tipo int.


A função retorna o tipo longo
 
novichok2018:

A sério? E onde mostra que o pedido foi fechado?

Um TP verde na janela "trade" significa que o preço atual está dentro de -100 pips do TP, ou, para ser mais correto, dentro de 100 pips do TP.

Obrigado!
 
Artyom Trishkin:
A função retorna tipo longo

O que devo fazer nesses casos, mudar o tipo da variável ou deixá-la como está?

 
psyman:

O que é recomendado fazer em tais casos, mudar o tipo de variável ou deixá-la como está?

int width = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
Razão: