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

 

Buon pomeriggio.

Potete dirmi come trovare la barra giusta per data e ora senza passare attraverso tutte le barre una per una?

 
Sergey:

Buon pomeriggio.

Potete dirmi come trovare la barra giusta per data e ora senza passare attraverso tutte le barre una per una?


Leggi su iBarShift
 

int TotalPos=-1;

void start()

{
//il resto del codice

//--
if(OrdersTotal()!=TotalPos) { // non torturare ogni tick
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
Storia();


}
}}} TotalPos=OrdiniTotali(); // ricorda la quantità
//--
}



void Storia() {
stringa Ticket=(stringa)OrderTicket();
colore col=Rosso;
if(OrderType()==0)col=Blu;
datetime a=OrderOpenTime();
double b=OrderOpenPrice();
datetime c=OrderCloseTime();
double d=OrderClosePrice();
double prSep=OrderProfit()+OrderCommission()+OrderSwap();
doppio prAll=0;
int cn=0;
stringa 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 secondi di differenza tra la chiusura del primo e dell'ultimo ordine nella griglia
if(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+"Line",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);
}

cosa aggiungere al codice di questa funzione per disegnare una linea di livello in questi luoghi delle compravendite

coordinata dagli scambi al bordo del grafico offset

 

Per favore aiutatemi a leggere da un file .crv

ha la seguente voce:

2010.03.18 01:35:00;1.37409;1.37119

come scrivere codice per ottenere ogni valore separatamente in una variabile

 
missha32:

Per favore aiutatemi a leggere da un file .crv

ha la seguente voce:

2010.03.18 01:35:00;1.37409;1.37119

come scrivere codice per ottenere ogni valore separatamente in una variabile

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

int TotalPos=-1;

void start()

{
//il resto del codice

//--
if(OrdersTotal()!=TotalPos) { // non torturare ogni tick
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
Storia();


}
}}} TotalPos=OrdiniTotali(); // ricorda la quantità
//--
}



void Storia() {
stringa Ticket=(stringa)OrderTicket();
colore col=Rosso;
if(OrderType()==0)col=Blu;
datetime a=OrderOpenTime();
double b=OrderOpenPrice();
datetime c=OrderCloseTime();
double d=OrderClosePrice();
double prSep=OrderProfit()+OrderCommission()+OrderSwap();
doppio prAll=0;
int cn=0;
stringa 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 secondi di differenza tra la chiusura del primo e dell'ultimo ordine nella griglia
if(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+"Line",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);
}

cosa aggiungere al codice di questa funzione per disegnare una linea di livello in questi luoghi delle compravendite

coordinata dagli scambi al bordo del grafico offset

qualcosa del genere:

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‌

}‌

 

Buon pomeriggio!

Quali sono le ragioni per cui il terminale non vede un robot? è stato scritto da un programmatore locale. Gli altri robot sono in parte visibili e in parte no.

 
Serg_72:

Buon pomeriggio!

Quali sono le ragioni per cui il terminale non vede un robot? è stato scritto da un programmatore locale. Gli altri robot sono in parte visibili e in parte no.

E il "programmatore locale" non può dirvi perché non potete far funzionare il suo robot?
 

Buona sera!

Per favore aiutatemi a scrivere questo codice, sento che non posso farlo da solo:

Quando eseguo un EA su EURUSD dovrei piazzare due ordini pendenti se non ho ordini aperti/pendenti su questa coppia,

Se uno di essi è scattato, un altro non viene mostrato, cioè la somma totale di tutti gli ordini pendenti sulla coppia non deve superare 2 e non deve tenere conto degli ordini pendenti/aperti già mostrati su altre coppie.

Mi sono già scervellato, non piazza niente, poi ogni spunta la piazza.

Sono molto grato per questo.

Vi sarò molto grato per questo.

 
Serg_72:

Buon pomeriggio!

Quali sono le ragioni per cui il terminale non vede un robot? è stato scritto da un programmatore locale. Gli altri robot sono in parte visibili e in parte no.

Il robot dovrebbe trovarsi nella cartella "experts" ed essere sotto forma di *.ex4 (*.ex5 per 5).
Nel terminale - menu "File/Apri cartella dati" poi "MQL4/Experts".

E il codice sorgente *.mq4 *.mq5 non partirà - ha bisogno di essere compilato.

E nel frattempo, staccate la testa al programmatore che non vi ha detto come usare il suo prodotto