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

 
Vitaly Muzichenko:

Una buona programmazione "a tono" è un programma senza errori o avvertimenti, tutto il resto è amatoriale.


Lasciamo perdere il buon gusto. Suppongo che tali avvertimenti siano fatti per una ragione. La domanda è perché?

 
Artyom Trishkin:
Non ritirerete il denaro guadagnato dall'Expert Advisor dal giornale. Di conseguenza, il programma deve elaborare gli errori per agire di conseguenza.

Quindi il software li gestisce comunque, se ce ne sono, e visualizza dei messaggi su di essi. Cosa mi manca qui?

 
Andrey Sokolov:

Quindi il software li gestisce comunque, se ce ne sono, e visualizza dei messaggi su di essi. Cosa mi manca qui?

Non il programma, ma il terminale.
Affinché il programma li elabori, devono prima essere recuperati. Per fare questo, le funzioni commerciali restituiscono false in caso di errore. Inoltre, se il risultato della funzione è falso, dovete ottenere il codice di errore GetLastError() e gestirlo nel vostro programma.
 

salve! il terminale non è autorizzato! dove andare, cosa fare?

 
kalmyk87 ciao! il terminale non si autorizza! dove andare, cosa fare?
Autorizzazione = connessione al server del broker, è necessario accendere internet. Se demo - hai dimenticato la tua password, apri un nuovo account. Se reale - chiama il tuo broker.
 
STARIJ:
Autorizzazione = comunicazione con il server del broker, è necessario accendere internet. Se demo - dimentica la password, apri un nuovo account. Se reale - chiama il broker.

Ho autorizzato il mio account...ma il profilo mql5 non è autorizzato per qualche motivo...

 

Buon pomeriggio. Per favore, aiutatemi con questa domanda...

L'indicatore disegna un livello bianco per il giorno corrente dal CSV. Se il prezzo non raggiunge questo livello, esso (il livello) continua ad essere visualizzato con una linea tratteggiata nei giorni successivi. Quando il prezzo raggiunge questa linea bianca tratteggiata nel futuro, si ferma. Tuttavia, dopo aver controllato i livelli non raggiunti il giorno successivo, l'indicatore considera il livello come completato e smette di disegnarlo.

Vorrei che questa linea tratteggiata rimanesse sul grafico, grazie.

//------------- читаю и разбираю строку из файла --

txt_data = FileReadString(file);   дата_уровней = StrToTime(txt_data+" 00:00");
if(FileIsEnding(file)==true)     break; // если конец  Выход из цикла
ArrayInitialize(d_input, 0);
for (int i=0; i<12; i++)  //== считываю уровни в массив
 {
 txt_data = FileReadString(file); 
 d_input[i] = replace_dot(txt_data);
 if ( FileIsLineEnding(file) ) break;
 }

if(уровни == Daily)
  {
   double white = d_input[4];
   t0 = дата_уровней + 1*PeriodSeconds(PERIOD_H1);
   t1 = дата_уровней + 23*PeriodSeconds(PERIOD_H1);
     Draw_Level("white", white, c_day_3, STYLE_SOLID, толщина); 
      if(показ_неотработок)
    if( !check_white_level(дата_уровней, white) )
     draw_line(t0, white, c_day_3) ;
  }
//   отображение  уровней 
void Draw_Level(string name, double _level, color _colr, int _style, int _width)
{
string o_name = i_name +"_"+ name +"_"+ TimeToStr(t0,TIME_DATE);
if (_level>0)
 {
  if (ObjectFind(o_name) != 0)
   ObjectCreate(o_name, OBJ_TREND, 0, t0, _level, t1, _level);
  ObjectSet(o_name, OBJPROP_TIME1, t0);
  ObjectSet(o_name, OBJPROP_PRICE1, _level);
  ObjectSet(o_name, OBJPROP_TIME2, t1);
  ObjectSet(o_name, OBJPROP_PRICE2, _level);
  ObjectSet(o_name, OBJPROP_COLOR, _colr);
  ObjectSet(o_name, OBJPROP_STYLE, _style);
  if(_style == STYLE_DOT)   ObjectSet(o_name, OBJPROP_WIDTH, 1);
    else     ObjectSet(o_name, OBJPROP_WIDTH, _width);
  ObjectSet(o_name, OBJPROP_RAY, false);  // луч
  ObjectSetText(o_name, DoubleToStr(_level, 4) );
  ObjectSetInteger(0, o_name, OBJPROP_SELECTABLE, False); 
   ObjectSetInteger(0, o_name, OBJPROP_HIDDEN, True);  
   ObjectSetString(0, o_name, OBJPROP_TOOLTIP, "\n"); // убираю всплывающую надпись
 }
}
// проверка_отработки уровня
bool check_white_level(datetime t_open, double _level)
{
if (_level <= 0) return(False);
int bar0 = iBarShift(NULL, 0, t_open);
double max = High[iHighest(NULL, 0, MODE_HIGH, bar0, 0)];
double min = Low[iLowest(NULL, 0, MODE_LOW, bar0, 0)];
if( _level <= max && _level >= min )
  return(TRUE);
return(False);
}
void draw_line(datetime begin, double _level, color _clr)
{
if (_level <= 0) return;
string o_name = i_name +"_wh1_"+ TimeToStr(begin,TIME_DATE);
datetime t_0 = begin ;
datetime t_1 = TimeCurrent() ;
  if (ObjectFind(o_name) != 0)
   ObjectCreate(o_name, OBJ_TREND, 0, t_0, _level, t_1, _level);
  ObjectSet(o_name, OBJPROP_TIME1, t_0);
  ObjectSet(o_name, OBJPROP_PRICE1, _level);
  ObjectSet(o_name, OBJPROP_TIME2, t_1);
  ObjectSet(o_name, OBJPROP_PRICE2, _level);
  ObjectSet(o_name, OBJPROP_COLOR, _clr);
  ObjectSet(o_name, OBJPROP_STYLE, STYLE_DOT);
   ObjectSet(o_name, OBJPROP_WIDTH, 1);
    ObjectSet(o_name, OBJPROP_RAY, false);  // луч
    ObjectSetInteger(0, o_name, OBJPROP_SELECTABLE, False); 
  ObjectSetInteger(0, o_name, OBJPROP_HIDDEN, True);  
  ObjectSetString(0, o_name, OBJPROP_TOOLTIP, "\n"); // убираю всплывающую надпись
}
 
AIUTATEMI A CAPIRE COS'È UN'OBBLIGAZIONE
1) Come posso calcolare la mia cauzione? Come posso ottenere questo valore in EA?
2) Come si calcola un margine di chiusura? Come posso ottenere questo valore nel mio EA?
3) Come posso ottenere il valore del margine dal ticket di un ordine aperto? Non sono riuscito a trovare funzioni come OrderMargin(), anche se posso vedere il margine sugli ordini nel terminale (o mente?).
4) Il deposito è un parametro fissato una volta al momento dell'apertura dell'ordine o ricalcolato (fluttuante) ad ogni nuovo momento di apertura dell'ordine al tasso attuale?

La formula per il calcolo manuale del deposito è corretta?
(base_lot * trade_lot * current_rate%%%%%USD) / leverage = margine USD
 
smart_man:
AIUTATEMI A CAPIRE COS'È UN DEPOSITO
1) Come si calcola il deposito? Come posso ottenere questo valore nel mio EA?
2) Come si calcola un margine di chiusura? Come posso ottenere questo valore nel mio EA?
3) Come posso ottenere il valore del margine dal ticket di un ordine aperto? Non sono riuscito a trovare funzioni come OrderMargin(), anche se posso vedere il margine sugli ordini nel terminale (o mente?).
4) Il deposito è un parametro fissato una volta al momento dell'apertura dell'ordine o ricalcolato (fluttuante) ad ogni nuovo momento di apertura dell'ordine al tasso attuale?

La formula per il calcolo manuale del deposito è corretta?
(base_lot * trade_lot * current_rate%%%%%USD) / leverage = margine USD

1)

 margin =AccountInfoDouble(ACCOUNT_MARGIN);                        //-Размер зарезервированных залоговых средств на счете  в валюте депозита

2) non usare

3) La formula è la stessa della tua, solo che invece di "current_%%%%%USD", è il prezzo aperto della posizione.

4) il parametro è fisso


Corretto

 
Alekseu Fedotov:

1)

2) non usare

3) La formula è la stessa della tua, solo che invece di "current_%%%%%USD", è il prezzo aperto della posizione.

4) il parametro è fisso


Corretto

Grazie!

2) Trovato informazioni che la formula è la stessa, solo alla fine ancora dividere tutto per 2, ma non so se questo è effettivamente vero

3) Prezzo di apertura della posizione, che da OrderOpenPrice() ?

5) Un'altra domanda, se qualsiasi apertura è prevista, allora prima che tutti i costi futuri dell'ordine devono essere calcolati (importo del margine, importo del profitto e della perdita, ma qui dobbiamo anche calcolare il valore del punto, controllare la disponibilità dei fondi liberi, limite in percentuale dei fondi liberi per il rischio in una volta, ho perso qualcos'altro? O c'è qualche altro modo? C'è un drawdown, deve essere calcolato anche questo?

5.1) Come si calcola il valore del pip?

5.2) Come posso controllare se ho dei fondi disponibili?

Faccio queste domande, perché è difficile capire da solo, c'è così tanto di specifico, come la contabilità.