Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 37

 
ed3sss :

Tamam, işte aynı döngü, siparişleri neden kapatıyor?)

Çünkü olabilir. Ama yine de kötü yazılmış.
 
Vitalie Postolache :
Çünkü olabilir. Ama yine de kötü yazılmış.
Akıllı öner! eğer bilginize aldırmazsanız.
 
ed3sss :
Akıllı öner! eğer bilginize aldırmazsanız.

İşte hala iyileştirme için yeri olan biraz daha doğru bir versiyon:

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

Merhaba !

bu hindi bir çizelgeye yerleştirildiğinde iyi çalışıyor

ancak terminali yeniden başlattıktan sonra veri yok, veri yerine biraz çöp

gerçek, TF programını değiştirerek tedavi edilir

Bilgimin yeterli olduğu her şeyi denedim - işe yaramıyor

Metin etiketini ayarlarken bir sorun olduğunu anlıyorum - lütfen yardım edin, şimdiden teşekkürler!

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

Merhaba !

bu hindi bir grafiğe yerleştirildiğinde iyi çalışıyor

ancak terminali yeniden başlattıktan sonra veri yok, veri yerine biraz çöp

gerçek, TF programını değiştirerek tedavi edilir

Bilgimin yeterli olduğu her şeyi denedim - işe yaramıyor

anladığım kadarıyla, metin etiketini ayarlarken bir sorun var - lütfen yardım edin, şimdiden teşekkürler!

Belki bu yüzden?

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 :

Belki bu yüzden?

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


İlginiz için teşekkürler ama sonuç aynı! başka bir şey yanlış!

Bu yardımcı olabilir! nedense 3. ve 2. doğru görüntülenmiyor!

TF normunu değiştirdikten sonra!

Dosyalar:
1.jpg  439 kb
 
Peki, sorunla aynı olanlara yardım edin - henüz çözülmedi!
 
Tünaydın. MT4'ü bilgisayarıma kurdum. Özel olarak D sürücüsüne koydum. Ama sürekli olarak C sürücüsünde veriler içeren bir klasör oluşturuyor . Her zamanki gibi, orada yeterli alan yok, bu yüzden günde birkaç kez test yaparken test cihazı günlüklerini temizlemeniz gerekiyor. Ölümcül olamaz, değil mi? Lütfen çaydanlığa MT4'ü başka bir diskte bir "veri dizini" klasörü oluşturmaya nasıl zorlayacağını söyleyin? Ayarlar'da bulamıyorum.
 
VHS :
Tünaydın. MT4'ü bilgisayarıma kurdum. Özel olarak D sürücüsüne koydum. Ama sürekli olarak C sürücüsünde veriler içerenbir klasör oluşturuyor . Her zamanki gibi, orada yeterli alan yok, bu yüzden günde birkaç kez test yaparken test cihazı günlüklerini temizlemeniz gerekiyor. Ölümcül olamaz, değil mi? Lütfen çaydanlığa MT4'ü başka bir diskte bir "veri dizini" klasörü oluşturmaya nasıl zorlayacağını söyleyin? Ayarlar'da bulamıyorum.

Tabii ki profesyonel değilim, ama bir sim'e yardım etmenin bir yolu olmadığını düşünüyorum!

Sadece diski boşaltın veya Windows ile birlikte her şeyi yeniden düzenleyin ve daha fazlasını yapın!

 
VHS :
Tünaydın. MT4'ü bilgisayarıma kurdum. Özel olarak D sürücüsüne koydum. Ama sürekli olarak C sürücüsünde veriler içerenbir klasör oluşturuyor . Her zamanki gibi, orada yeterli alan yok, bu yüzden günde birkaç kez test yaparken test cihazı günlüklerini temizlemeniz gerekiyor. Ölümcül olamaz, değil mi? Lütfen çaydanlığa MT4'ü başka bir diskte bir "veri dizini" klasörü oluşturmaya nasıl zorlayacağını söyleyin? Ayarlar'da bulamıyorum.
Ve muhtemelen aramayı nasıl kullanacağınızı da bilmiyorsunuz. /taşınabilir mod hakkında, bu forumda ve diğerlerinde de sayısız kez yazılmıştır. Sorun 3 yıldır böyle.