Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 733

 
Alexey Viktorov:
Je vous l'accorde. Mais il faut beaucoup d'efforts pour comprendre qu'il s'agit de la fenêtre "Trading" et non de la fenêtre "Historique du compte". L'inattention et la paresse, sans forcer sur les muscles de ma tête, m'ont amené à croire qu'il s'agissait de la fenêtre Historique du compte.

Ça arrive. Pardonnable.

 

Désactivation de la ligne d'offre standard sur le graphique en raison de l'inconvénient de la lecture de cinq chiffres, a fait la sortie de 4 chiffres dans le coin supérieur, mais parfois le prix descend, ce qui provoque à nouveau l'inconvénient :-)

Je veux faire bouger l'objet Étiquette avec le prix, l'étiquette de prix droiteOBJ_ARROW_RIGHT_PRICE que je n'aime pas à cause du cadre.

Mais pour une raison quelconque, le positionnement par prix d'offre ne fonctionne pas, l'étiquette est affichée dans le coin supérieur gauche.


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

Désactivation de la ligne d'offre standard sur le graphique en raison de l'inconvénient de la lecture de cinq chiffres, a fait la sortie de 4 chiffres dans le coin supérieur, mais parfois le prix descend, ce qui provoque à nouveau l'inconvénient :-)

Je veux faire bouger l'objet Étiquette avec le prix, l'étiquette de prix droiteOBJ_ARROW_RIGHT_PRICE que je n'aime pas à cause du cadre.

Mais pour une raison quelconque, le positionnement par prix d'offre ne fonctionne pas, l'étiquette est affichée dans le coin supérieur gauche.


PourOBJ_LABEL, le rapport de position est spécifié en 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);
}

J'ai décidé d'écrire un code simple pour calculer la tendance à perdre un compte. Dans ce but, j'ai pris une formule simple de compte Z et j'ai essayé de la transférer au code mq4.
Tout semble être correct, mais lorsque j'exécute une sortie simple en utilisant Print, l'EA ne fonctionne pas immédiatement. Je n'obtiens aucune erreur lors de la compilation.
Je me suis déjà creusé la tête pour trouver un code simple.

Merci si vous pouvez nous aider !

 
Aliaksei Karalkou:

J'ai décidé d'écrire un code simple pour calculer la tendance à la perte d'un compte. Dans ce but, j'ai pris une formule simple du compte Z et j'ai essayé de l'utiliser dans le code mq4.
Tout semble être correct, mais lorsque j'exécute une sortie simple en utilisant Print, l'EA ne fonctionne pas immédiatement. Je n'obtiens aucune erreur lors de la compilation.
Je me suis déjà creusé la tête pour trouver un code simple.

Merci si vous pouvez nous aider !

Vérifiez le permis de travail de l'EA. Et où dans la sortie imprimée ? Ce morceau de code doit retourner quelque chose, s'il n'y a pas d'erreurs, alors le problème est en dehors de ce morceau de code. Sauf que la division par 0 peut se produire dans ce bloc.

 
Ilya Prozumentov:

PourOBJ_LABEL, le rapport de position est spécifié en pixels.

Ilya, merci, ça a marché.

Ce n'est que lors du passage à l'étape suivante - la prise en compte du redimensionnement de la fenêtre - que le compilateur émet un avertissement concernant la conversion du type de données :

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

perte possible de données due à la conversion de type 4digit+.mq5 36 14


Bien que la fonction renvoie le type int.


 
psyman:

Ilya, merci, ça a marché.

Ce n'est que lors du passage à l'étape suivante - la prise en compte du redimensionnement de la fenêtre - que le compilateur émet un avertissement concernant la conversion du type de données :

perte possible de données due à la conversion de type 4digit+.mq5 36 14


Bien que la fonction renvoie le type int.


La fonction renvoie le type long
 
novichok2018:

Vraiment ? ! Et où est-il indiqué que la commande a été clôturée ?

Un TP vert dans la fenêtre "trade" signifie que le prix actuel est à moins de -100 pips du TP, ou, pour être plus correct, à moins de 100 pips du TP.

Merci !
 
Artyom Trishkin:
La fonction renvoie un type long

Que dois-je faire dans ce cas, changer le type de la variable ou la laisser telle quelle ?

 
psyman:

Qu'est-il recommandé de faire dans ce cas, changer le type de variable ou le laisser tel quel ?

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