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

 
WinProject:

Merci !) la variable Cena=FileReadString(handle) ; j'insère dans la fonction Separator=StringReplace(Sepa,",",".") ; il s'écrit erreur "conversion implicite de nombre à chaîne" -

ne veut pas lire la valeur avec le séparateur "," (1,22426) comme une chaîne, et StringReplace ne fonctionne pas. Ou je m'y prends mal ?


Veuillez copier la partie du code telle que vous l'avez, à partir du début de la lecture du fichier, en spécifiant le type de variable CENA

 
Vladislav Andruschenko:

Veuillez copier la partie du code telle que vous l'avez, à partir du début de la lecture du fichier, en spécifiant le type de la variable CENA


void MyFunc()

{

handle=FileOpen('Data.csv',FILE_CSV|FILE_READ,';') ;

while(FileIsEnding(handle)!=true)

{ string cena=FileReadString(handle) ;

string Separ=StringReplace(cena,",".") ;

si(FileIsEnding(handle)==true)

pause ;

}

FileClose(handle) ;

}

 
WinProject:

void MyFunc()

{

handle=FileOpen('Data.csv',FILE_CSV|FILE_READ,';') ;

while(FileIsEnding(handle)!=true)

{ string cena=FileReadString(handle) ;

string Separ=StringReplace(cena,",".") ;

si(FileIsEnding(handle)==true)

pause ;

}

FileClose(handle) ;

}

Veuillez lire ce que cette fonction renvoie. Vous essayez d'enchaîner le résultat. Mais cette fonction ne fait que substituer un caractère à une chaîne de caractères. Vous pouvez continuer à utiliser cena avec des changements
 
Vladislav Andruschenko:
Veuillez lire ce que cette fonction renvoie. Vous essayez d'enchaîner le résultat. Mais cette fonction ne fait que remplacer un caractère par un autre. Vous pouvez continuer à utiliser cena déjà avec les changements
J'ai compris mon erreur, (string Separ=est redondant ici) et ça a marché.

Merci, merci !)

 

Aide, j'ai besoin de dessiner un rectangle à partir du haut de la bougie précédente jusqu'à un point 200p au-dessus de celui-ci et de chronométrer une barre en avance.

J'ai écrit le code, mais je ne comprends pas pourquoi le point gauche du rectangle ne bouge pas ? Et le droit glisse derrière le hai.

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 &spread[])
  {
//---
   //ObjectDelete(0,"Name");
   ArraySetAsSeries(high,true);
   ObjectCreate(0,"Name",OBJ_RECTANGLE,0,TimeCurrent(),high[0],TimeCurrent()+PeriodSeconds(PERIOD_CURRENT)*2,high[0]+200*_Point);
   ObjectSetInteger(0,"Name",OBJPROP_FILL,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Roman Sharanov:

Aide, j'ai besoin de dessiner un rectangle à partir du haut de la bougie précédente jusqu'à un point 200p au-dessus de celui-ci et de chronométrer une barre en avance.

J'ai écrit le code, mais je ne comprends pas pourquoi le point gauche du rectangle ne bouge pas ? Et le droit glisse derrière le hai.


Peut-être essayez-vous de créer un objet qui se trouve déjà dans le graphique ?


Et la barre précédente est 1 et non 0.

high[0] - это ХАЙ текущего бара
 
Vladislav Andruschenko:

Peut-être essayez-vous de créer un objet qui se trouve déjà sur le graphique ? Il serait peut-être préférable de vérifier s'il y a déjà des objets sur le graphique.


Oui et la barre précédente est 1 et non 0.


C'est vrai, j'ai déjà réparé les indices.

J'ai changé le nom, j'ai regardé la liste, rien n'a changé, tout est pareil, un point est accroché à un endroit, l'autre suit le hai

 
Roman Sharanov:  C'est vrai, j'ai déjà réparé les indices.

J'ai changé le nom, j'ai regardé la liste, rien n'a changé, c'est toujours la même chose, un point est accroché à un endroit, l'autre suit le hai

   ObjectDelete(0,"Name");
   ObjectCreate(0,"Name",OBJ_RECTANGLE,0,
                TimeCurrent()-_Period*60,high[1],
                TimeCurrent()+PeriodSeconds(PERIOD_CURRENT)*2,high[0]+200*_Point);
   ObjectSetInteger(0,"Name",OBJPROP_FILL,true);
   return(rates_total);

C'est en mouvement.


 
STARIJ:
C'est très simple. Vous devez définir 7 paramètres pour le calcul d'iMA. Le premier paramètre, le nom du symbole, est évident. Pour le second, le cadre temporel, mettez M1. Le troisième paramètre - la période - définit autant de fois que vous le souhaitez, combien de jours sont supérieurs à une minute. Le quatrième paramètre - shift = 0. Les deux paramètres suivants - la méthode de calcul de la moyenne et le type de prix - vous les connaissez. Le dernier est le numéro de barre. Veuillez calculer le numéro de barre si vous connaissez le temps dont vous avez besoin. C'est tout ! Vérifiez-le en effectuant des calculs pour les échéances M5 et M15. Peut-être même pour le M30.

STARIJ, Merci pour votre aide, vérifié, malheureusement la correspondance avec l'original est faible, et comme la TF augmente (par exemple de 30 min à la semaine) la correspondance diminue de manière significative. Cette méthode est mieux que rien, mais elle n'est pas très précise. Existe-t-il d'autres variantes ?

 
Boss11:

STARIJ, Merci pour votre aide, vérifié, malheureusement la correspondance avec l'original est faible, et comme la TF augmente (par exemple de 30 min à la semaine) la correspondance diminue de manière significative. Cette méthode est mieux que rien, mais elle n'est pas très précise. Existe-t-il d'autres variantes ?

Oui. Nous devrions utiliser M1, et M5, ... - pour vérifier. Peut-être devrions-nous utiliser l'interpolation ? MT5 a un historique des tics. Si vous me dites où sont les bénéfices, je regarderai à nouveau.