Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 234

 
Vitaly Muzichenko:

Una buena programación "de tono" es un programa sin errores ni avisos, todo lo demás es amateur.


Dejemos el buen gusto. Supongo que estas advertencias se hacen por una razón. La pregunta es ¿por qué?

 
Artyom Trishkin:
Usted no va a retirar el dinero ganado por el Asesor Experto de la revista. En consecuencia, el programa debe procesar los errores para actuar en consecuencia.

Por lo tanto, el software los maneja de todos modos, si los hay, y muestra mensajes sobre ellos. ¿Qué me estoy perdiendo aquí?

 
Andrey Sokolov:

Por lo tanto, el software los maneja de todos modos, si los hay, y muestra mensajes sobre ellos. ¿Qué me estoy perdiendo aquí?

No el programa, sino el terminal.
Para que el programa los procese, primero hay que buscarlos. Para ello, las funciones comerciales devuelven false en caso de error. Además, si el resultado de la función es falso, debes obtener el código de error GetLastError() y manejarlo en tu programa.
 

hola! la terminal no está autorizada! ¿dónde ir, qué hacer?

 
kalmyk87 hola! el terminal no autoriza! ¿dónde ir, qué hacer?
Autorización = conexión al servidor del corredor, es necesario encender el internet. Si demo - nó olvidaste tu contraseña, abre una nueva cuenta. Si es real, llame a su agente.
 
STARIJ:
Autorización = comunicación con el servidor del corredor, es necesario encender el internet. Si demo - olvida la contraseña, abra una nueva cuenta. Si es real, llama al corredor.

He autorizado mi cuenta...pero el perfil mql5 no está autorizado por alguna razón...

 

Buenas tardes. Por favor, ayuda con esta pregunta...

El indicador dibuja un nivel blanco para el día actual desde el CSV. Si el precio no alcanza este nivel, éste (el nivel) sigue apareciendo con una línea de puntos en los días siguientes. Cuando el precio alcanza esta línea blanca punteada en el futuro, se detiene. Sin embargo, tras comprobar los niveles no alcanzados al día siguiente, el indicador considera el nivel como completado y deja de dibujarlo.

Me gustaría que esta línea de puntos se mantuviera en el gráfico. Gracias.

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

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"); // убираю всплывающую надпись
}
 
AYÚDAME A ENTENDER QUÉ ES UN BONO
1) ¿Cómo se calcula la fianza? ¿Cómo puedo obtener este valor en EA?
2) ¿Cómo se calcula el margen de bloqueo? ¿Cómo puedo obtener este valor en mi EA?
3) ¿Cómo obtengo el valor del margen del ticket de una orden abierta? No he podido encontrar funciones como OrderMargin(), aunque puedo ver el margen de las órdenes en el terminal (¿o es mentira?).
4) ¿El depósito es un parámetro que se fija una vez en el momento de la apertura de la orden o se recalcula (flotante) en cada nuevo momento de la apertura de la orden al tipo actual?

¿Es correcta la fórmula de cálculo manual del depósito?
(base_lot * trade_lot * current_rate%%%%%USD) / apalancamiento = margen en USD
 
smart_man:
AYÚDAME A ENTENDER QUÉ ES UN DEPÓSITO
1) ¿Cómo se calcula la fianza? ¿Cómo puedo obtener este valor en mi EA?
2) ¿Cómo se calcula el margen de bloqueo? ¿Cómo puedo obtener este valor en mi EA?
3) ¿Cómo obtengo el valor del margen del ticket de una orden abierta? No he podido encontrar funciones como OrderMargin(), aunque puedo ver el margen de las órdenes en el terminal (¿o es mentira?).
4) ¿El depósito es un parámetro que se fija una vez en el momento de la apertura de la orden o se recalcula (flotante) en cada nuevo momento de la apertura de la orden al tipo actual?

¿Es correcta la fórmula de cálculo manual del depósito?
(base_lot * trade_lot * current_rate%%%%%USD) / apalancamiento = margen en USD

1)

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

2) no utilizar

3)la fórmula es la misma que la suya, sólo que en lugar de "current_%%%%%USD", es el precio de apertura de la posición.

4) el parámetro es fijo


Correcto

 
Alekseu Fedotov:

1)

2) no utilizar

3)la fórmula es la misma que la suya, sólo que en lugar de "current_%%%%%USD", es el precio de apertura de la posición.

4) el parámetro es fijo


Correcto

Gracias.

2) Encontré información de que la fórmula es la misma, sólo que al final sigue dividiendo todo por 2, pero no sé si esto es realmente cierto

3) Precio de apertura de la posición, que por OrderOpenPrice() ?

5) Otra pregunta, si se planifica alguna apertura, entonces antes hay que calcular todos los costes futuros de la orden (importe del margen, importe de las ganancias y pérdidas, pero aquí también hay que calcular el valor del punto, comprobar la disponibilidad de fondos libres, limitar en porcentaje los fondos libres para el riesgo de una vez, ¿me he perdido algo más? ¿O hay alguna otra manera? ¿Hay que calcular también la reducción de la deuda?

5.1) ¿Cómo se calcula el valor del pip?

5.2) ¿Cómo puedo comprobar si tengo fondos disponibles?

Hago estas preguntas, porque es difícil de entender por mí mismo, ya que hay muchos detalles, como la contabilidad.

Razón de la queja: