Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 37

 
ed3sss:

OK, es el mismo ciclo aquí, ¿por qué cierra los pedidos?)

Porque sí. Pero la escritura sigue siendo analfabeta.
 
Vitalie Postolache:
Porque sí. Pero sigue siendo analfabeto.
¡Sugiérelo bien! Si no escatimas en conocimientos.
 
ed3sss:
Sugiere con inteligencia, si no escatimas en conocimientos.

He aquí una versión ligeramente más correcta, que aún puede mejorarse:

        int error=0;
        for(i=OrdersTotal()-1;i>=0;i--)
        {//+----------------------------------------------------------------------------------------+for
         if(!OrderSelect(i,SELECT_BY_POS)) continue;
         if(OrderSymbol()!=Symbol())continue;
         if(OrderType()>1)continue;
         RefreshRates();
         if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3))
          {
           error=_LastError;
           Print("Error #",error);
          }
         if(error==6){Alert("Нет связи");return(0);}
         if(error==132){Alert("Рынок закрыт");return(0);}
        }
 
//+----------------------------------------------------------------------------+
//|                                                   i-TotalStopCurrency.mq4  |
//|  21.12.2011  Indicator of the Total Stop in the Deposit Currency.          |
//|              Индикатор суммарного стопа в валюте депозита.                 |
//|  04.05.2012  Добавил способ расчета прибыли для Futures.                   |
//+----------------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 0

//------- Внешние параметры индикатора ----------------------------------------+
extern string symbol   = "";
extern color  ecText   = Black;    // Цвет текста
extern int    eiCorner = 3;       // Номер угла привязки:
                                  //   0 - левый верхний
                                  //   1 - правый верхний
                                  //   2 - левый нижний
                                  //   3 - правый нижний

//------- Глобальные переменные индикатора ------------------------------------+


//+----------------------------------------------------------------------------+
//|                                                                            |
//|  ПРЕДОПРЕДЕЛЁННЫЕ ФУНКЦИИ                                                  |
//|                                                                            |
//+----------------------------------------------------------------------------+
//|  Custom indicator initialization function                                  |
//+----------------------------------------------------------------------------+
void init() {
  Comment("");
}

//+----------------------------------------------------------------------------+
//|  Custom indicator deinitialization function                                |
//+----------------------------------------------------------------------------+
void deinit() {
  Comment("");
  for (int i=0; i<3; i++) ObjectDelete("iTotalStopCurrency"+i);
}

//+----------------------------------------------------------------------------+
//|  Custom indicator iteration function                                       |
//+----------------------------------------------------------------------------+
void start() {
  double s=ProfitIFStopInCurrency(symbol);
  int pn=ProfitIFStopInCurrency2(symbol);
  
  SetLabel("iTotalStopCurrency0", "Уровень стопа", ecText, 5, 30, eiCorner);
  SetLabel("iTotalStopCurrency1", DoubleToStr(s, 2)+" "+AccountCurrency(), ecText, 5, 5, eiCorner);
  SetLabel("iTotalStopCurrency2", "Спр="+DoubleToStr(MarketInfo(Symbol(),MODE_SPREAD),0)+" Орд="+OrdersTotal()
  +" Приб="  +DoubleToStr(AccountProfit(),2)+" Сред="+DoubleToStr(AccountEquity(),2)+" Бал="+DoubleToStr(AccountBalance(),2)+"  "+pn
  +"пипс "+DoubleToStr(s/AccountBalance()*100, 2)+"%", ecText, 130, 5, eiCorner);
}
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания стопа открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFStopInCurrency(string sy="", int op=-1, int mn=-1) {
  /*if (sy=="0") */ sy=Symbol();  // Текущий символ
  int    i, k=OrdersTotal(); // Подсчёт открытых позиций
  int    m;                  // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
  double l;                  // Размер контракта в базовой валюте инструмента
  double p;                  // Размер пункта в валюте котировки
  double t;                  // Минимальный шаг изменения цены инструмента в валюте котировки
  double v;                  // Размер минимального изменения цены инструмента в валюте депозита
  double s=0;                // Подсчёт стопа в валюте депозита
  double pn=0;               // Подсчёт стопа в пунктах

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
          l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
          m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
          v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
          if (OrderType()==OP_BUY) {
            if (m==0) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots(); pn-=(OrderOpenPrice()-OrderStopLoss())*MathPow(10,MarketInfo(OrderSymbol(),MODE_DIGITS));
            if (m==1) s-=(OrderOpenPrice()-OrderStopLoss())/p*v/t/l*OrderLots();
            if (m==2) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
            s+=OrderCommission()+OrderSwap();
          }
          if (OrderType()==OP_SELL) {
            if (OrderStopLoss()>0) {
              if (m==0) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots(); pn-=(OrderStopLoss()-OrderOpenPrice())*MathPow(10,MarketInfo(OrderSymbol(),MODE_DIGITS));
              if (m==1) s-=(OrderStopLoss()-OrderOpenPrice())/p*v/t/l*OrderLots();
              if (m==2) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
              s+=OrderCommission()+OrderSwap();
            } else s=-AccountBalance();
          }
        }
      }
    }
  }
  if (AccountBalance()+s<0) s=-AccountBalance(); // Ограничение убытка балансом счёта
  return(s);
}
//+----------------------------------------------------------------------------+
double ProfitIFStopInCurrency2(string sy="", int op=-1, int mn=-1) {
  /*if (sy=="0") */ sy=Symbol();  // Текущий символ
  int    i, k=OrdersTotal(); // Подсчёт открытых позиций
  int    m;                  // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
  double l;                  // Размер контракта в базовой валюте инструмента
  double p;                  // Размер пункта в валюте котировки
  double t;                  // Минимальный шаг изменения цены инструмента в валюте котировки
  double v;                  // Размер минимального изменения цены инструмента в валюте депозита
  double s=0;                // Подсчёт стопа в валюте депозита
  double pn=0;               // Подсчёт стопа в пунктах

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
          l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
          m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
          v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
          if (OrderType()==OP_BUY) {
            if (m==0) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots(); pn-=(OrderOpenPrice()-OrderStopLoss())*MathPow(10,MarketInfo(OrderSymbol(),MODE_DIGITS));
            if (m==1) s-=(OrderOpenPrice()-OrderStopLoss())/p*v/t/l*OrderLots();
            if (m==2) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
            s+=OrderCommission()+OrderSwap();
          }
          if (OrderType()==OP_SELL) {
            if (OrderStopLoss()>0) {
              if (m==0) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots(); pn-=(OrderStopLoss()-OrderOpenPrice())*MathPow(10,MarketInfo(OrderSymbol(),MODE_DIGITS));
              if (m==1) s-=(OrderStopLoss()-OrderOpenPrice())/p*v/t/l*OrderLots();
              if (m==2) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
              s+=OrderCommission()+OrderSwap();
            } else s=-AccountBalance();
          }
        }
      }
    }
  }
  if (AccountBalance()+s<0) s=-AccountBalance(); // Ограничение убытка балансом счёта
  return(pn);
}
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки, объект OBJ_LABEL.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний )                    |
//|                                     1 - правый верхний                     |
//|                                     2 - левый нижний                       |
//|                                     3 - правый нижний )                    |
//|    fs - размер шрифта              (9 - по умолчанию  )                    |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=14) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
//+----------------------------------------------------------------------------+

¡Hola !

El indicador dado funciona bien cuando lo pongo en un gráfico

Pero después de reiniciar el terminal, no hay datos, sólo algo en lugar de datos

puedo arreglarlo cambiando el TF

He intentado todo lo que sé - no funciona

¡Creo que la configuración de la etiqueta de texto es algo incorrecto - ayuda por favor gracias de antemano!

 
Игорь:
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=14) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
//+----------------------------------------------------------------------------+

¡Hola !

El indicador dado funciona bien cuando lo pongo en un gráfico

Pero después de reiniciar el terminal, no hay datos, sólo algo en lugar de datos

puedo arreglarlo cambiando el TF

He intentado todo lo que sé - no funciona

Creo que la configuración de la etiqueta de texto es algo incorrecto - por favor, ayúdeme, ¡gracias de antemano!

¿Quizás?

void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=14) {
  if (ObjectFind(nm)<0) {
   ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
   ObjectSet(nm, OBJPROP_COLOR    , cl);
   ObjectSet(nm, OBJPROP_XDISTANCE, xd);
   ObjectSet(nm, OBJPROP_YDISTANCE, yd);
   ObjectSet(nm, OBJPROP_CORNER   , cr);
   ObjectSet(nm, OBJPROP_FONTSIZE , fs);
  }
   ObjectSetText(nm, tx, fs);
}
 
Vitaly Muzichenko:

¿Qué te parece esto?

void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=14) {
  if (ObjectFind(nm)<0) {
   ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
   ObjectSet(nm, OBJPROP_COLOR    , cl);
   ObjectSet(nm, OBJPROP_XDISTANCE, xd);
   ObjectSet(nm, OBJPROP_YDISTANCE, yd);
   ObjectSet(nm, OBJPROP_CORNER   , cr);
   ObjectSet(nm, OBJPROP_FONTSIZE , fs);
  }
   ObjectSetText(nm, tx, fs);
}


Gracias por el aviso, pero el resultado es el mismo.

¡Quizá esto ayude! ¡No hay 3ª y 2ª no está bien!

¡Después de cambiar el TF es normal !

Archivos adjuntos:
1.jpg  439 kb
 
Así que ayuda lo mismo con el problema - ¡todavía no se ha resuelto!
 
Buenas tardes. He instalado MT4 en mi ordenador. Póngalo en la unidad D con un propósito. Pero se obstina en crear una carpeta de datos en la unidad C. El espacio allí no es suficiente, como siempre, así que tengo que limpiar los registros del probador varias veces al día durante las pruebas. Bueno, no puede ser fatal, ¿verdad? ¿Pueden por favor aconsejar a un dummie cómo hacer que MT4 cree una carpeta de "directorio de datos" en otra unidad? No puedo encontrarlo en Configuración.
 
VHS:
Por la tarde. He instalado MT4 en mi ordenador. Ponerlo a propósito en la unidad D. Pero se obstina en crear una carpeta de datos en la unidad C. El espacio allí no es suficiente, como siempre, por lo que tengo que limpiar los registros del probador al hacer las pruebas varias veces al día. Bueno, no puede ser fatal, ¿verdad? ¿Pueden por favor aconsejar a un dummie cómo hacer que MT4 cree una carpeta de "directorio de datos" en otra unidad? No puedo encontrarlo en Configuración.

No soy un profesional, pero no creo que haya nada que pueda hacer Sim.

¡Solo hay que liberar la unidad c o reinstalar todo con el windup y hacer más !

 
VHS:
Buenas tardes. He instalado MT4 en mi ordenador. Póngalo en la unidad D con un propósito. Pero se obstina en crear una carpeta de datos en la unidad C. El espacio allí no es suficiente, como siempre, así que tengo que limpiar los registros del probador varias veces al día durante las pruebas. Bueno, no puede ser fatal, ¿verdad? ¿Pueden por favor aconsejar a un dummie cómo hacer que MT4 cree una carpeta de "directorio de datos" en otra unidad? No puedo encontrarlo en Configuración.
Tampoco sé cómo utilizar el motor de búsqueda. Se ha escrito sobre el modo /portable innumerables veces en este y otros foros. El problema tiene ya tres años.
Razón de la queja: