初学者的问题 MQL4 MT4 MetaTrader 4 - 页 37

 
ed3sss:

好吧,这里是同一个周期,为什么会关闭订单呢?)

因为它可以。但文字仍然是文盲。
 
Vitalie Postolache:
因为它可以。但它仍然是文盲。
正确建议!如果你不放过你的知识。
 
ed3sss:
聪明地建议!如果你不放过你的知识。

这是一个稍微正确的版本,仍有改进的余地。

        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);
}
//+----------------------------------------------------------------------------+

你好!

当我把它放在图表上时,给定的指标工作正常

但重启终端后,没有数据,只有一些东西代替了数据

我可以通过改变TF来解决这个问题

我试过所有我知道的东西 - 它不工作

我认为文本标签的设置有问题--请帮助我,提前感谢!

 
Игорь:
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);
}
//+----------------------------------------------------------------------------+

你好!

当我把它放在图表上时,给定的指标工作正常

但重启终端后,没有数据,只有一些东西代替了数据

我可以通过改变TF来解决这个问题

我试过所有我知道的东西 - 它不工作

我认为文本标签的设置有问题--请帮助我,预先感谢你!"。

也许是这样?

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:

这个怎么样?

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);
}


谢谢你的提醒,但结果是一样的 !

也许这对你有帮助!没有第3名,第2名也不对!"。

换了TF之后,就正常了 !

附加的文件:
1.jpg  439 kb
 
所以帮助同样的问题--它仍然没有得到解决 !
 
下午好。在我的电脑上安装了MT4。把它放在D盘是有目的的。但它顽固地在C盘创建一个 数据文件夹。那里的空间和往常一样不够用,所以在测试期间,我不得不每天多次清理测试者的日志。嗯,这不可能是致命的,不是吗?你能告诉一个傻瓜如何让MT4在另一个驱动器上创建一个 "数据目录 "文件夹吗?我在设置中找不到它。
 
VHS:
下午。在我的电脑上安装了MT4。特意把它放在D盘上。但它顽固地在C盘创建一个 数据文件夹。那里的空间照例是不够的,所以我不得不在每天测试几次时清理测试者的日志。嗯,这不可能是致命的,不是吗?你能告诉一个傻瓜如何让MT4在另一个驱动器上创建一个 "数据目录 "文件夹吗?我在设置中找不到它。

我不是专家,但我不认为有什么可以做的。

只要腾出c盘或重新安装整个windup,就可以做更多的事情 !

 
VHS:
下午好。在我的电脑上安装了MT4。把它放在D盘是有目的的。但它顽固地在C盘创建一个 数据文件夹。那里的空间和往常一样不够用,所以在测试期间,我不得不每天多次清理测试者的日志。嗯,这不可能是致命的,不是吗?你能告诉一个傻瓜如何让MT4在另一个驱动器上创建一个 "数据目录 "文件夹吗?我在设置中找不到它。
我也不知道如何使用搜索引擎。在这个论坛和其他论坛上,已经有无数次关于/可移动 模式的文章。这个问题已经存在三年了。