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.