Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 37

 
ed3sss:

OK, qui è lo stesso ciclo, perché chiude gli ordini).

Perché può. Ma la scrittura è ancora analfabeta.
 
Vitalie Postolache:
Perché può. Ma è ancora analfabeta.
Suggerisci bene! Se non risparmi le tue conoscenze.
 
ed3sss:
Suggerisci in modo intelligente! Se non risparmi le tue conoscenze.

Ecco una versione leggermente più corretta, che ha ancora margine di miglioramento:

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

Ciao!

L'indicatore dato funziona bene quando lo metto su un grafico

Ma dopo aver riavviato il terminale, non ci sono dati, solo qualcosa al posto dei dati

Posso risolvere il problema cambiando il TF

Ho provato tutto quello che so - non funziona

Penso che l'impostazione dell'etichetta di testo sia qualcosa di sbagliato - aiuto per favore grazie in anticipo!

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

Ciao!

L'indicatore dato funziona bene quando lo metto su un grafico

Ma dopo aver riavviato il terminale, non ci sono dati, solo qualcosa al posto dei dati

Posso risolvere il problema cambiando il TF

Ho provato tutto quello che so - non funziona

Penso che l'impostazione dell'etichetta di testo sia qualcosa di sbagliato - per favore aiutatemi, grazie in anticipo!

Forse 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:

Che ne dite di questo?

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


Grazie per avermi avvisato, ma il risultato è lo stesso!

Forse questo vi aiuterà! Non c'è il 3° e il 2° non va bene!

Dopo aver cambiato il TF è normale!

File:
1.jpg  439 kb
 
Quindi aiutate lo stesso con il problema - non è ancora stato risolto!
 
Buon pomeriggio. Ho installato MT4 sul mio computer. Mettetelo sull'unità D per uno scopo. Ma si ostina a creare una cartella dati sull'unità C. Lo spazio lì non è sufficiente, come al solito, quindi devo pulire i registri del tester più volte al giorno durante i test. Beh, non può essere fatale, no? Potete per favore consigliare a un dummie come fare in modo che MT4 crei una cartella "data directory" su un'altra unità? Non riesco a trovarlo in Impostazioni.
 
VHS:
Pomeriggio. Ho installato MT4 sul mio computer. L'ho volutamente messo sull'unità D. Ma crea ostinatamente una cartella dati sul drive C. Lo spazio lì non è sufficiente, come al solito, quindi devo pulire i registri del tester durante i test più volte al giorno. Beh, non può essere fatale, no? Potete per favore consigliare a un dummie come fare in modo che MT4 crei una cartella "data directory" su un'altra unità? Non riesco a trovarlo in Impostazioni.

Non sono un professionista, ma non credo che ci sia qualcosa di sim che possa fare!

Basta liberare il disco c o reinstallare il tutto con il windup e fare di più!

 
VHS:
Buon pomeriggio. Ho installato MT4 sul mio computer. Mettetelo sull'unità D per uno scopo. Ma si ostina a creare una cartella dati sull'unità C. Lo spazio lì non è sufficiente, come al solito, quindi devo pulire i registri del tester più volte al giorno durante i test. Beh, non può essere fatale, no? Potete per favore consigliare a un dummie come fare in modo che MT4 crei una cartella "data directory" su un'altra unità? Non riesco a trovarlo in Impostazioni.
Non so nemmeno come usare il motore di ricerca. È stato scritto innumerevoli volte su questo e altri forum sulla modalità /portable. Il problema ha già tre anni.
Motivazione: