Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 723
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
İ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);
}
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:
Vurgulananı şöyle yazardım:
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
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ı?
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