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

 

Bon après-midi.

Pouvez-vous me dire comment trouver la bonne barre par date et heure sans passer par toutes les barres une par une ?

 
Sergey:

Bon après-midi.

Pouvez-vous me dire comment trouver la bonne barre par date et heure sans passer par toutes les barres une par une ?


En savoir plus sur iBarShift
 

int TotalPos=-1 ;

void start()

{
//le reste du code

//--
if(OrdersTotal()!=TotalPos) { // ne pas torturer à chaque tick
for(int i=OrdersHistoryTotal()-1 ; i>=0 ; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
Histoire() ;


}
}}} TotalPos=OrdersTotal() ; // se souvenir de la quantité
//--
}



void History() {
string Ticket=(string)OrderTicket() ;
color col=Red ;
si(OrderType()==0)col=Bleu ;
datetime a=OrderOpenTime() ;
double b=OrderOpenPrice() ;
datetime c=OrderCloseTime() ;
double d=OrderClosePrice() ;
double prSep=OrderProfit()+OrderCommission()+OrderSwap() ;
double prAll=0 ;
int cn=0 ;
string hTicket ;
for(int i=OrdersHistoryTotal()-1 ; i>=0 ; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
datetime ct=OrderCloseTime() ;
// 60 secondes de différence entre la clôture du premier et du dernier ordre dans la grille.
si(c<=ct+60 && c>=ct-60) {
prAll+=OrderProfit()+OrderCommission()+OrderSwap() ;
hTicket=(string)OrderTicket() ;
cn++ ;
}
}}}
ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b) ;
ObjectSet(Ticket+"Open",OBJPROP_COLOR,col) ;
ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1) ;

ObjectCreate(Ticket+"Ligne",OBJ_TREND,0,a,b,c,d) ;
ObjectSet(Ticket+"Line",OBJPROP_COLOR,col) ;
ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1) ;
ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT) ;
ObjectSet(Ticket+"Line",OBJPROP_RAY,0) ;

ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d) ;
ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green) ;
ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3) ;

Ticket=cn>1?hTicket:Ticket ;
ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d) ;
ObjectSet(Ticket+"Profit",OBJPROP_ANCHOR,0) ;
ObjectSetText(Ticket+"Profit",DoubleToString(prAll,2),10, "Arial",White) ;
ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d) ;
ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+Period()*60*2) ;
}

qu'ajouter au code de cette fonction pour dessiner une ligne de niveau à ces endroits des transactions

coordonnée des métiers au bord du graphique offset

 

Aide pour la lecture d'un fichier .crv

contient l'entrée suivante :

2010.03.18 01:35:00;1.37409;1.37119

Comment écrire un code pour obtenir chaque valeur séparément dans une variable ?

 
missha32:

Aide pour la lecture d'un fichier .crv

contient l'entrée suivante :

2010.03.18 01:35:00;1.37409;1.37119

Comment écrire un code pour obtenir chaque valeur séparément dans une variable ?

Lire/étudier ici.
Основы программирования на MQL5: Файлы
Основы программирования на MQL5: Файлы
  • 2016.09.28
  • Dmitry Fedoseev
  • www.mql5.com
Статья-практикум по работе с файлами в MQL5. Читайте, выполняйте несложные задания, и к концу статьи вы обретете не только теоретические знания, но и практические навыки по работе с файлами в MQL5.
 
Alexander Antoshkin:

int TotalPos=-1 ;

void start()

{
//le reste du code

//--
if(OrdersTotal()!=TotalPos) { // ne pas torturer à chaque tick
for(int i=OrdersHistoryTotal()-1 ; i>=0 ; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
Histoire() ;


}
}}} TotalPos=OrdersTotal() ; // se souvenir de la quantité
//--
}



void History() {
string Ticket=(string)OrderTicket() ;
color col=Red ;
si(OrderType()==0)col=Bleu ;
datetime a=OrderOpenTime() ;
double b=OrderOpenPrice() ;
datetime c=OrderCloseTime() ;
double d=OrderClosePrice() ;
double prSep=OrderProfit()+OrderCommission()+OrderSwap() ;
double prAll=0 ;
int cn=0 ;
string hTicket ;
for(int i=OrdersHistoryTotal()-1 ; i>=0 ; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
datetime ct=OrderCloseTime() ;
// 60 secondes de différence entre la clôture du premier et du dernier ordre dans la grille.
si(c<=ct+60 && c>=ct-60) {
prAll+=OrderProfit()+OrderCommission()+OrderSwap() ;
hTicket=(string)OrderTicket() ;
cn++ ;
}
}}}
ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b) ;
ObjectSet(Ticket+"Open",OBJPROP_COLOR,col) ;
ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1) ;

ObjectCreate(Ticket+"Ligne",OBJ_TREND,0,a,b,c,d) ;
ObjectSet(Ticket+"Line",OBJPROP_COLOR,col) ;
ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1) ;
ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT) ;
ObjectSet(Ticket+"Line",OBJPROP_RAY,0) ;

ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d) ;
ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green) ;
ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3) ;

Ticket=cn>1?hTicket:Ticket ;
ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d) ;
ObjectSet(Ticket+"Profit",OBJPROP_ANCHOR,0) ;
ObjectSetText(Ticket+"Profit",DoubleToString(prAll,2),10, "Arial",White) ;
ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d) ;
ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+Period()*60*2) ;
}

qu'ajouter au code de cette fonction pour dessiner une ligne de niveau à ces endroits des transactions

coordonnée des métiers au bord du graphique offset

quelque chose comme ça :

string level="Level"+IntegerToString(iTime(_Symbol,iBarShift(OrderCloseTime())); // ид.уровня - по времени бара (!! не по тикету)

if (ObjectFind(level)‌==-1) {

  // гор.вектора нет - видимо первый ордер из закрытых на баре

  // сделать горизонтальную линию‌

  ObjectCreate(0,level,OBJ_TREND,0,OrderCloseTime(),OrderClosePrice(),OrderCloseTime()+PeriodSeconds(_Period)*3,OrderClosePrice);

 // указывающую только вправо‌

  ObjectSetInteger(level,‌OBJPROP_RAY,1);

  ObjectSetInteger(level,OBJPROP_RAYLEFT,0);

‌ // украсить её как-то :-)

 ObjectSetInteger(level,OBJPROP_‌COLOR,....)

 ....‌

} else {

  // гор.уровень есть - значит были ордера закрытые на этом баре

  // по фантазии - обновить метки/корректировать уровень/etc‌

}‌

 

Bonjour !

Quelles sont les raisons pour lesquelles le terminal ne voit pas de robot ? Il a été écrit par un programmeur local. Les autres robots sont en partie visibles et en partie non visibles.

 
Serg_72:

Bonjour !

Quelles sont les raisons pour lesquelles le terminal ne voit pas de robot ? Il a été écrit par un programmeur local. Les autres robots sont en partie visibles et en partie non visibles.

Et le "programmeur local" ne peut pas vous dire pourquoi vous ne pouvez pas faire fonctionner son robot ?
 

Bonsoir !

S'il vous plaît, aidez-moi à écrire ce code, je sens que je ne peux pas le faire moi-même :

Lorsque j'exécute un EA sur EURUSD, je dois placer deux ordres en attente si je n'ai pas d'ordres ouverts/en attente sur cette paire,

Si l'un d'entre eux est déclenché, un autre n'est pas affiché, c'est-à-dire que la somme totale de tous les ordres en attente sur la paire ne doit pas dépasser 2 et elle ne doit pas prendre en compte les ordres en attente/ouverts déjà affichés sur d'autres paires.

Je me suis déjà creusé la tête, il ne place rien du tout, puis à chaque tique il place.

J'en suis très reconnaissant.

Je vous en serai très reconnaissant.

 
Serg_72:

Bonjour !

Quelles sont les raisons pour lesquelles le terminal ne voit pas de robot ? Il a été écrit par un programmeur local. Les autres robots sont en partie visibles et en partie non visibles.

Le robot doit se trouver dans le dossier "experts" et être sous la forme *.ex4 (*.ex5 pour 5).
Dans le terminal - menu "Fichier/Ouvrir le dossier de données" puis "MQL4/Experts".

Et le code source *.mq4 *.mq5 ne démarrera pas - il doit être compilé.

Et en attendant, arrachez la tête du programmeur qui ne vous a pas dit comment utiliser son produit...