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

 
Alexey Viktorov:
Te lo concedo. Ma ci vuole molto sforzo per capire che questa è la finestra "Trading" e non la finestra "Account History". La disattenzione e la pigrizia, senza sforzare i muscoli della testa, mi hanno fatto credere che si trattasse della finestra della cronologia dell'account.

Succede. Perdonabile.

 

Disabilitato la linea di offerta standard sul grafico a causa della scomodità di leggere cinque cifre, ha reso l'uscita a 4 cifre nell'angolo superiore, ma a volte il prezzo scende, il che causa di nuovo scomodità :-)

Voglio far muovere l'oggetto Label con il prezzo, l'etichetta del prezzo giustoOBJ_ARROW_RIGHT_PRICE non mi piace a causa della cornice.

Ma per qualche motivo il posizionamento per prezzo d'offerta non funziona, l'etichetta viene visualizzata nell'angolo in alto a sinistra


//+------------------------------------------------------------------+
//|                                              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:

Disabilitato la linea di offerta standard sul grafico a causa della scomodità di leggere cinque cifre, ha reso l'uscita a 4 cifre nell'angolo superiore, ma a volte il prezzo scende, il che causa di nuovo scomodità :-)

Voglio far muovere l'oggetto Label con il prezzo, l'etichetta del prezzo giustoOBJ_ARROW_RIGHT_PRICE non mi piace a causa della cornice.

Ma per qualche motivo il posizionamento per prezzo d'offerta non funziona, l'etichetta viene visualizzata nell'angolo in alto a sinistra


PerOBJ_LABEL il rapporto di posizione è specificato in pixel.

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);
}

Ho deciso di scrivere un semplice codice per calcolare la tendenza a perdere un conto. A questo scopo ho preso una semplice formula di conto Z e ho cercato di trasferirla nel codice mq4.
Tutto sembra essere corretto, ma quando eseguo l'output semplice usando Print l'EA non funziona subito. Non ricevo alcun errore durante la compilazione.
Mi sono già scervellato sul codice semplice.

Grazie se potete aiutare!

 
Aliaksei Karalkou:

Ho deciso di scrivere un semplice codice per calcolare la tendenza a perdere un conto. A questo scopo ho preso una semplice formula di Z-account e ho cercato di usarla nel codice mq4.
Tutto sembra essere corretto, ma quando eseguo l'output semplice usando Print l'EA non funziona subito. Non ricevo alcun errore durante la compilazione.
Mi sono già scervellato sul codice semplice.

Grazie se potete aiutare!

Controlla il permesso di lavoro per l'EA. E dove nell'output di stampa? Questo pezzo di codice deve restituire qualcosa, se non ci sono errori, allora il problema è fuori da questo pezzo di codice. Tranne che la divisione per 0 può avvenire in questo blocco.

 
Ilya Prozumentov:

PerOBJ_LABEL il rapporto di posizione è specificato in pixel.

Ilya, grazie, ha funzionato.

Solo quando si passa alla fase successiva - tenendo conto del ridimensionamento della finestra - il compilatore dà un avvertimento sulla conversione del tipo di dati:

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

possibile perdita di dati dovuta alla conversione del tipo 4digit+.mq5 36 14


Anche se la funzione restituisce il tipo int.


 
psyman:

Ilya, grazie, ha funzionato.

Solo quando si passa alla fase successiva - tenendo conto del ridimensionamento della finestra - il compilatore dà un avvertimento sulla conversione del tipo di dati:

possibile perdita di dati dovuta alla conversione del tipo 4digit+.mq5 36 14


Anche se la funzione restituisce il tipo int.


La funzione restituisce il tipo lungo
 
novichok2018:

Davvero? E dove si vede che l'ordine è stato chiuso?

Un TP verde nella finestra "trade" significa che il prezzo corrente è entro -100 pip dal TP, o, per essere più corretti, entro 100 pip dal TP.

Grazie!
 
Artyom Trishkin:
La funzione restituisce il tipo lungo

Cosa dovrei fare in questi casi, cambiare il tipo della variabile o lasciarla così com'è?

 
psyman:

Cosa si consiglia di fare in questi casi, cambiare il tipo di variabile o lasciarla così com'è?

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