Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 723

 

İnsanlar bana neyi yanlış yaptığımı söylüyorlar, Neden iki gösterge iRSI, iCCI sorunlara neden olmuyor ve MA ve BB bir uyarı veriyor (Indicator.mqh türünden olası veri kaybı )

//+------------------------------------------------------------------+
//|                                                    Indicator.mqh |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
// интерфейс к индикаторам.  

class CIndicators
{
public :

   double iRSI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift);
   double iCCI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift);  
   double iBands ( string symbol, ENUM_TIMEFRAMES tf, int BBPeriod, int shift, double BBDeviation, ENUM_APPLIED_PRICE BBPrice );  
   double iMA ( string symbol, ENUM_TIMEFRAMES tf, int nMAPeriod, int shift, ENUM_MA_METHOD eMAMethod , ENUM_APPLIED_PRICE MAPrice);
      
};
// -Создадим экземпляр индикатора iRSI
double CIndicators:: iRSI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift)
{
//---  
   int hRSI = iRSI (symbol, tf, period, applied);
   if (hRSI == INVALID_HANDLE )
       return 0.0 ;
   double rsi[];
   CopyBuffer (hRSI, 0 , shift, 1 , rsi);
   if ( ArraySize (rsi))
       return rsi[ 0 ];
   return 0.0 ;
//--Создадим экземпляр индикатора iCCI
}
//----------------------------------
double CIndicators:: iCCI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift)
{
   int hCCI = iCCI ( Symbol (), PERIOD_CURRENT , 55 , PRICE_CLOSE );
   if (hCCI == INVALID_HANDLE ) return 0.0 ;
   double cci[];
   ArrayResize (cci, 1 );
   CopyBuffer (hCCI, 0 , 0 , 1 , cci);
   return cci[ 0 ];
}
//--------------------------------------------------
// Создадим экземпляр индикатора ВВ
double CIndicators:: iBands ( string symbol, ENUM_TIMEFRAMES tf, int BBPeriod, int shift, double BBDeviation, ENUM_APPLIED_PRICE BBPrice)
{

   int hBands = iBands ( Symbol (),tf,BBPeriod, 0 ,BBDeviation, PRICE_CLOSE );
   if (hBands== INVALID_HANDLE ) return 0.0 ;
   // Создадим массив значений верхней границы ВВ
   double fBBUpper[];
   ArrayResize (fBBUpper, true );
   CopyBuffer (hBands, UPPER_BAND , 0 , 3 ,fBBUpper);
   return fBBUpper[ 0 ];  
   // Создадим массив значений нижней границы ВВ
   double fBBLower[];
   ArraySetAsSeries (fBBLower, true );
   CopyBuffer (hBands, LOWER_BAND , 0 , 3 ,fBBLower);
   return   fBBLower[ 0 ];
   }
  
// Создадим экземпляр индикатора МА  
double CIndicators:: iMA ( string symbol, ENUM_TIMEFRAMES tf, int nMAPeriod, int shift, ENUM_MA_METHOD eMAMethod , ENUM_APPLIED_PRICE MAPrice)
{
// получим его хэндл
   int hMA= iMA ( Symbol (), PERIOD_CURRENT , nMAPeriod, 0 , MODE_EMA , PRICE_CLOSE );
   if (hMA == INVALID_HANDLE ) return 0.0 ;
// Создадим массив значений МА,заполним тремя последними значениями мувинга.
   double fMA[];
   ArraySetAsSeries (fMA, true );
   CopyBuffer (hMA, 0 , 0 , 3 ,fMA);
   return fMA[ 0 ];

}
 

Bir de şunu sormak istedim: Takas talebinde nelerin değişmesi gerekiyor, 10030 hatası çıktı,,, bir yıl önce EA kodu sorunsuz çalışıyordu ve şimdi yine beni MQL5 değişikliklerinin yeniliklerini okumaya/aramaya zorluyor.


// функция открытия позиции с рынка
bool MarketOrder( const string sSymbol, const ENUM_POSITION_TYPE eType, const double fLot, const int nSL = 0 , const int nTP = 0 , const ulong nMagic = 0 , const uint nSlippage = 1000 )
{
         bool bRetVal = false ;
        
         // запрос
         MqlTradeRequest oRequest = { 0 };
         MqlTradeResult    oResult = { 0 };
        
         double fPoint = SymbolInfoDouble (sSymbol, SYMBOL_POINT );
         int nDigits     = ( int ) SymbolInfoInteger (sSymbol, SYMBOL_DIGITS );

        oRequest.action         = TRADE_ACTION_DEAL ;
        oRequest.symbol         = sSymbol;
        oRequest.volume         = fLot;
        oRequest.stoplimit      = 0 ;
        oRequest.deviation      = nSlippage;
        
         if (eType == POSITION_TYPE_BUY )
        {
                oRequest.type           = ORDER_TYPE_BUY ;
                oRequest.price          = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_ASK ), nDigits);
                oRequest.sl                     = NormalizeDouble (oRequest.price - nSL * fPoint, nDigits) * (nSL > 0 );
                oRequest.tp                     = NormalizeDouble (oRequest.price + nTP * fPoint, nDigits) * (nTP > 0 );
        }
        
         if (eType == POSITION_TYPE_SELL )
        {
                oRequest.type           = ORDER_TYPE_SELL ;
                oRequest.price          = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_BID ), nDigits);
                oRequest.sl                     = NormalizeDouble (oRequest.price + nSL * fPoint, nDigits) * (nSL > 0 );
                oRequest.tp                     = NormalizeDouble (oRequest.price - nTP * fPoint, nDigits) * (nTP > 0 );
        }
        
         // определим допустимый тип заливки ордера (зависит от типа исполнения - Instant, Market, биржевое и т.д.)
         switch (( int ) SymbolInfoInteger (sSymbol, SYMBOL_FILLING_MODE ))
        {
         case SYMBOL_FILLING_FOK :
                oRequest.type_filling = ORDER_FILLING_FOK ;
                 break ;
         case SYMBOL_FILLING_IOC :
                oRequest.type_filling = ORDER_FILLING_IOC ;
                 break ;
         default :
                oRequest.type_filling = ORDER_FILLING_RETURN ;
        }

        oRequest.magic                          = nMagic;
        
        
         // проверка перед отправкой
         MqlTradeCheckResult oCheckResult= { 0 };
        
         bool bCheck = OrderCheck (oRequest, oCheckResult);

         Print ( "Проверка заявки MarketOrder:" ,
                         " OrderCheck = " ,               bCheck,
                         ", retcode = " ,         oCheckResult.retcode,
                         ", balance = " ,         NormalizeDouble (oCheckResult.balance, 2 ),
                         ", equity = " ,                   NormalizeDouble (oCheckResult.equity, 2 ),
                         ", margin = " ,                   NormalizeDouble (oCheckResult.margin, 2 ),
                         ", margin_free = " ,     NormalizeDouble (oCheckResult.margin_free, 2 ),
                         ", margin_level = " ,     NormalizeDouble (oCheckResult.margin_level, 2 ),
                         ", comment = " ,         oCheckResult.comment);
        
         // если проверка удачная - отправка заявки
         if (bCheck == true && oCheckResult.retcode == 0 )
        {
                 bool bResult = false ;
                
                 // 3 попытки выставления ордера
                 for ( int k = 0 ; k < 3 ; k++)
                {
                        bResult = OrderSend (oRequest, oResult);
                        
                         if (bResult == true && oResult.retcode == TRADE_RETCODE_DONE )
                                 break ;
                        
                         if (k == 2 )
                                 break ;
                                
                         Sleep ( 100 );
                }
        
                 Print ( "Отправка заявки:" ,
                                 " OrderSend = " ,        bResult,
                                 ", retcode = " , oResult.retcode,
                                 ", deal = " ,            oResult.deal,
                                 ", order = " ,           oResult.order,
                                 ", volume = " ,           NormalizeDouble (oResult.volume, 2 ),
                                 ", price = " ,           NormalizeDouble (oResult.price, _Digits ),
                                 ", bid = " ,                     NormalizeDouble (oResult.bid, _Digits ),
                                 ", ask = " ,                     NormalizeDouble (oResult.ask, _Digits ),
                                 ", comment = " , oResult.comment,
                                 ", request_id = " ,oResult.request_id);  
                                
                 if (oResult.retcode == TRADE_RETCODE_DONE )
                        bRetVal = true ;
        }
         else if (oResult.retcode == TRADE_RETCODE_NO_MONEY )
        {
                 Print ( "Недостаточно денег для открытия позиции. Работа эксперта прекращена." );
                 ExpertRemove ();
        }
        
         return (bRetVal);
}
 
Alexander Antoshkin :

Bir de şunu sormak istedim: Takas talebinde nelerin değişmesi gerekiyor, 10030 hatası çıktı,,, bir yıl önce EA kodu sorunsuz çalışıyordu ve şimdi yine beni MQL5 değişikliklerinin yeniliklerini okumaya/aramaya zorluyor.


// функция открытия позиции с рынка
bool MarketOrder( const string sSymbol, const ENUM_POSITION_TYPE eType, const double fLot, const int nSL = 0 , const int nTP = 0 , const ulong nMagic = 0 , const uint nSlippage = 1000 )
{
         bool bRetVal = false ;
        
         // запрос
         MqlTradeRequest oRequest = { 0 };
         MqlTradeResult    oResult = { 0 };
        
         double fPoint = SymbolInfoDouble (sSymbol, SYMBOL_POINT );
         int nDigits     = ( int ) SymbolInfoInteger (sSymbol, SYMBOL_DIGITS );

        oRequest.action         = TRADE_ACTION_DEAL ;
        oRequest.symbol         = sSymbol;
        oRequest.volume         = fLot;
        oRequest.stoplimit      = 0 ;
        oRequest.deviation      = nSlippage;
        
         if (eType == POSITION_TYPE_BUY )
        {
                oRequest.type           = ORDER_TYPE_BUY ;
                oRequest.price          = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_ASK ), nDigits);
                oRequest.sl                     = NormalizeDouble (oRequest.price - nSL * fPoint, nDigits) * (nSL > 0 );
                oRequest.tp                     = NormalizeDouble (oRequest.price + nTP * fPoint, nDigits) * (nTP > 0 );
        }
        
         if (eType == POSITION_TYPE_SELL )
        {
                oRequest.type           = ORDER_TYPE_SELL ;
                oRequest.price          = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_BID ), nDigits);
                oRequest.sl                     = NormalizeDouble (oRequest.price + nSL * fPoint, nDigits) * (nSL > 0 );
                oRequest.tp                     = NormalizeDouble (oRequest.price - nTP * fPoint, nDigits) * (nTP > 0 );
        }
        
         // определим допустимый тип заливки ордера (зависит от типа исполнения - Instant, Market, биржевое и т.д.)
         switch (( int ) SymbolInfoInteger (sSymbol, SYMBOL_FILLING_MODE ))
        {
         case SYMBOL_FILLING_FOK :
                oRequest.type_filling = ORDER_FILLING_FOK ;
                 break ;
         case SYMBOL_FILLING_IOC :
                oRequest.type_filling = ORDER_FILLING_IOC ;
                 break ;
         default :
                oRequest.type_filling = ORDER_FILLING_RETURN ;
        }

        oRequest.magic                          = nMagic;
        
        
         // проверка перед отправкой
         MqlTradeCheckResult oCheckResult= { 0 };
        
         bool bCheck = OrderCheck (oRequest, oCheckResult);

         Print ( "Проверка заявки MarketOrder:" ,
                         " OrderCheck = " ,               bCheck,
                         ", retcode = " ,         oCheckResult.retcode,
                         ", balance = " ,         NormalizeDouble (oCheckResult.balance, 2 ),
                         ", equity = " ,                   NormalizeDouble (oCheckResult.equity, 2 ),
                         ", margin = " ,                   NormalizeDouble (oCheckResult.margin, 2 ),
                         ", margin_free = " ,     NormalizeDouble (oCheckResult.margin_free, 2 ),
                         ", margin_level = " ,     NormalizeDouble (oCheckResult.margin_level, 2 ),
                         ", comment = " ,         oCheckResult.comment);
        
         // если проверка удачная - отправка заявки
         if (bCheck == true && oCheckResult.retcode == 0 )
        {
                 bool bResult = false ;
                
                 // 3 попытки выставления ордера
                 for ( int k = 0 ; k < 3 ; k++)
                {
                        bResult = OrderSend (oRequest, oResult);
                        
                         if (bResult == true && oResult.retcode == TRADE_RETCODE_DONE )
                                 break ;
                        
                         if (k == 2 )
                                 break ;
                                
                         Sleep ( 100 );
                }
        
                 Print ( "Отправка заявки:" ,
                                 " OrderSend = " ,        bResult,
                                 ", retcode = " , oResult.retcode,
                                 ", deal = " ,            oResult.deal,
                                 ", order = " ,           oResult.order,
                                 ", volume = " ,           NormalizeDouble (oResult.volume, 2 ),
                                 ", price = " ,           NormalizeDouble (oResult.price, _Digits ),
                                 ", bid = " ,                     NormalizeDouble (oResult.bid, _Digits ),
                                 ", ask = " ,                     NormalizeDouble (oResult.ask, _Digits ),
                                 ", comment = " , oResult.comment,
                                 ", request_id = " ,oResult.request_id);  
                                
                 if (oResult.retcode == TRADE_RETCODE_DONE )
                        bRetVal = true ;
        }
         else if (oResult.retcode == TRADE_RETCODE_NO_MONEY )
        {
                 Print ( "Недостаточно денег для открытия позиции. Работа эксперта прекращена." );
                 ExpertRemove ();
        }
        
         return (bRetVal);
}

Vurgulananı şöyle yazardım:

switch (( ENUM_SYMBOL_TRADE_EXECUTION ) SymbolInfoInteger (sSymbol, SYMBOL_TRADE_EXEMODE );
 
Güzel gün. İzleyen stop ile danışmanları bana söyleyebilir misiniz?
 
Alexey Viktorov :

Vurgulananı şöyle yazardım:

switch (( ENUM_SYMBOL_TRADE_EXECUTION ) SymbolInfoInteger (sSymbol, SYMBOL_TRADE_EXEMODE );

Kalpten...!!! )

Yardımcı oldu, işe yaradı!

Alex'e teşekkürler!!!!!!!!!!

 
Güzel gün. Bana MT5 danışmanlarını söyleme Bana takip eden stoplu danışmanları söyleme? tercihen bir SCALPER VEYA HABERLER ÜZERİNDE ÇALIŞMAK veya diğerleri. Şimdiden teşekkürler
 
Alex2018 :
Güzel gün. Bana MT5 danışmanlarını söyleme Bana takip eden stoplu danışmanları söyleme? tercihen bir SCALPER VEYA HABERLER ÜZERİNDE ÇALIŞMAK veya diğerleri. Şimdiden teşekkürler
Aramayı kullandın mı? Burada bağlantılar bile var: Son duraklı Uzman Danışmanlar
 
Lütfen satın alınan göstergeyi terminale yükleme prosedürünü açıklayın, çünkü satın aldım, ancak etkinleştiremiyorum, sorunun ne olduğunu bilmiyorum?
 
act1on :
Lütfen satın alınan göstergeyi terminale yükleme prosedürünü açıklayın, çünkü satın aldım, ancak etkinleştiremiyorum, sorunun ne olduğunu bilmiyorum?
Belirtiniz: Marketten satın alındı mı?
 
Vladimir Karputov :
Belirtiniz: Marketten satın alındı mı?
Evet Pazarda: https://www.mql5.com/ru/market/mt5/indicator
Satın alma işleminden sonra "Terminale yükle" ye tıkladım, ardından ticaret terminaline gittim, ancak hiçbir şey olmadı, gösterge görünmedi
MQL5 Маркет: Индикаторы
MQL5 Маркет: Индикаторы
  • www.mql5.com
Маркет - магазин программ для MetaTrader 5 и MetaTrader 4