[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 390

 

Buenas tardes. Pregunta sobre la función estándar SendMail... Paraentender cómo funciona la función, escribí este script:

//+------------------------------------------------------------------+
//|                                             функция_SendMail.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//+------------------------------------------------------------------+

SendMail("Скрипт Функция_SendMail","Webmoney - идите в жопу!!!!");
Alert(GetLastError());
   
//+------------------------------------------------------------------+   
   return(0);
  }
//+------------------------------------------------------------------+

Cuando se ejecuta en la ventana del terminal del cliente, aparece un error en el registro:

En la configuración (menú del terminal cliente Herramientas -> Configuración -> pestaña Correo) se establecen los siguientes parámetros:

Donde en lugar de tres puntos en los campos SMTP login y From Whom hay un nombre de ese buzón desde el que quiero enviar el mensaje, y en el campo To - nombre del buzón al que quiero enviar el mensaje.

Al mismo tiempo, elnúmero de puerto especificado en elcampo Servidor SMTP es realmente 25:

Nota: la captura de pantalla se hizo en la sección de Ayuda del Correo.Ru.

Pregunta: ¿qué es este error y cómo eliminarlo? El compilador no muestra errores y la función GetLastError() devuelve 0.

P.S. Para no saturar el foro, gracias de antemano por su respuesta.

 
7777877:

Buenas tardes. Pregunta sobre la función estándar SendMail... Paraentender cómo funciona la función, escribí este script:

Cuando se ejecuta en la ventana del terminal del cliente, aparece un error en el registro:

En la configuración (menú del terminal cliente Herramientas -> Configuración -> pestaña Correo) se establecen los siguientes parámetros:

Donde en lugar de tres puntos en los campos SMTP login y From Whom hay un nombre de ese buzón desde el que quiero enviar el mensaje, y en el campo To - nombre del buzón al que quiero enviar el mensaje.

Al mismo tiempo, elnúmero de puerto especificado en elcampo Servidor SMTP es realmente 25:

Nota: la captura de pantalla se realizó en la sección de Ayuda del Correo.Ru.

Pregunta: ¿Qué es este error y cómo eliminarlo? El compilador no muestra errores y la función GetLastError() devuelve 0.

P.S. Para no saturar el foro, gracias de antemano por su respuesta.

Mira el puerto y la encriptación. Tal vez deberías ponerlo en 2525.
 

ayuda por favor.

Este es el código


//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
        if(BuyLots  > SellLots)money = BuyLots * 10;
        if(BuyLots  < SellLots)money = SellLots * 10;
  if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           

No tengo forma de hacer que se abra un bucle cuando una operación se cerró en menos y si la siguiente orden se cerró por encima de cero, es decir, con saldo positivo, pero menor que el negativo, sumamos el más al negativo y obtenemos un nuevo valor negativo, que ya es menor.

if(OrderProfit() >= 0 && Sum_Loss < 0.0)
                  double lastLoss_two = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss_two;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
               }

Si es más negativo, según la señal, cerramos la orden y empezamos el ciclo desde el principio.


La situación es que cuando este código cierra la operación en pérdida, entonces recuerda el saldo negativo, y cuando cierra la operación en el plus, y el plus es menor que el saldo, entonces resetea Sum_Loss y necesito que no se ponga a cero, y se acote.

Así es como funciona ahora:

comprueba una orden cerrada, si el beneficio de la orden cerrada es menor que cero, entonces este beneficio se añade a la Suma_Pérdida, y así sucesivamente hasta que el beneficio de la operación abierta supere (será mayor que) la Suma_Pérdida, cuando se alcanza, la operación se cierra, y la Suma_Pérdida se pone a cero y el ciclo comienza de nuevo.

Lo necesito:

orden cerrada en negativo, su beneficio negativo se añade a la Suma_Pérdida, entonces si la siguiente operación se cierra con un beneficio positivo, la Suma_Pérdida se reduce en la cantidad derivada del beneficio, lo que significa que la siguiente orden abierta Suma_Pérdida ya es una cantidad menor, y así sucesivamente hasta que el beneficio de la orden es mayor que la Suma_Pérdida, y entonces se borra la Suma_Pérdida y comienza un nuevo ciclo.

Suma_Pérdida = 0;

1ª orden cerrada: Beneficio (-50) < 0

Suma_Pérdida + beneficio (Suma_Pérdida + (-50))

Suma_Pérdida = -50;

2ª orden cerrada: Beneficio (+40) > 0 y Suma_Pérdida < 0

Suma_Pérdida + beneficio (Suma_Pérdida + 40)

Suma_Pérdida = -10
 
7777877:

Buenas tardes. Pregunta sobre la función estándar SendMail... Paraentender cómo funciona la función, escribí este script:

Cuando se ejecuta en la ventana del terminal del cliente, aparece un error en el registro:

En la configuración (menú del terminal cliente Herramientas -> Configuración -> pestaña Correo) se establecen los siguientes parámetros:

Donde en lugar de tres puntos en los campos SMTP login y From Whom hay un nombre de ese buzón desde el que quiero enviar el mensaje, y en el campo To - nombre del buzón al que quiero enviar el mensaje.

Al mismo tiempo, elnúmero de puerto especificado en elcampo Servidor SMTP es realmente 25:

Nota: la captura de pantalla se realizó en la sección de Ayuda del Correo.Ru.

Pregunta: ¿Qué es este error y cómo eliminarlo? El compilador no muestra errores y la función GetLastError() devuelve 0.

P.S. Para no ensuciar el foro, gracias de antemano por su respuesta.

ayuda

el servidor smtp.mail.ru:25 realmente funciona

 
YOUNGA:

ayuda

El servidor smtp.mail.ru:25 realmente funciona.

Mi inicio de sesión de prueba, de quién, a quién, coincide.

¿Quizá los cortafuegos se interponen?

Oh, hombre, eso es un millón de consejos - ¡reiniciar el terminal!


 

Ayudar a la gente

Pongo una orden pendiente al precio x. La orden se convierte en una orden de mercado al precio Y. ¿Puedo averiguar en algún lugar a qué precio se colocó la orden pendiente (en el diario ...o ) o tendré que escribir mi propia matriz

 

¡Buenas noches!

Por favor, aconséjeme sobre el posible origen del error. Estoy aprendiendo el idioma, así que estoy un poco perplejo.

La tarea en el código del Asesor Experto es leer los datos del archivo .scv (dos valores en una línea, 400 líneas) y escribirlos en un array.

double signals_array[400][2];

int init()
  {

   int Handle;
      Handle=FileOpen("Signals.csv",FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
      {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла");//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла");//..такое сообщ
         PlaySound("Bzrrr.wav");          // Звуковое сопровождение
         return;                          // Выход из start()      
      }

   for (int i = 0; i < 400; i++)
      {
      for (int j = 0; j < 2; j++)
         signals_array[i][j] = StrToDouble(FileReadString(Handle));
      }

Alert (signals_array[120][0],"; ",signals_array[0][1]," OK!");
//----
   return(0);
  }

El problema es el siguiente: si lanzo el EA en un gráfico, imprime una alerta con los valores correctos del array, pero si intento probar el EA, imprime una alerta "No file" en el registro. Es decir, parece que no puede acceder al archivo (aunque es increíble) y escribe valores en el array (lo que se confirma con otra alerta), pero se queda atascado al encontrar el archivo, según el registro. Confundido. A continuación se muestra una captura de pantalla.

 

alexeymosc:

El problema es el siguiente: si lanzo el Asesor Experto en el gráfico, sale una alerta con los valores correctos de la matriz, pero si intento probar el Asesor Experto, sale la alerta "No hay archivo" en el registro. Es decir, parece que no puede acceder al archivo (aunque es increíble) y escribe los valores en un array (esto lo confirma otra alerta) pero se congela al encontrar un archivo en el registro. Confundido.


En el probador y en el gráfico los archivos se escriben y se leen en directorios diferentes:

  1. MetaTrader 4\\N-perperts\files
  2. MetaTrader 4\\Nde los archivos
 
alexeymosc:

¡Buenas noches!

Por favor, aconséjeme sobre el posible origen del error. Estoy aprendiendo el idioma, así que estoy un poco perplejo.

La tarea en el código del Asesor Experto es leer los datos del archivo .scv (dos valores en una línea, 400 líneas) y escribirlos en un array.

El problema es el siguiente: si lanzo el EA en un gráfico, imprime una alerta con los valores correctos del array, pero si intento probar el EA, imprime una alerta "No file" en el registro. Es decir, parece que no puede acceder al archivo (aunque es increíble) y escribe valores en el array (lo que se confirma con otra alerta), pero se queda atascado al encontrar el archivo, según el registro. Confundido. A continuación se muestra una captura de pantalla.

Si un archivo está abierto, debe cerrarse, incluso si se recibe un error al trabajar con él. De momento no veo más errores.

Se puede leer así:

signals_array[i][j] = FileReadDouble(Handle);
 
Reshetov:

En el probador y en el gráfico, los archivos se escriben y se leen en directorios diferentes:

  1. MetaTrader 4\\N-perperts\files
  2. MetaTrader 4\\Nde los archivos

¡Yuri, respeto! Ahora lo he entendido y lo he arreglado.

Zhunko, gracias. Lo intenté así, pero me dio un error algo así como que no se pueden leer datos binarios de un archivo de cadena o algo así. De todos modos, mi construcción funciona.