Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 723
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Leute sagen mir, was ich falsch mache, warum zwei Indikatoren iRSI,iCCI Indikator verursacht kein Problem, aber die muwings und BB geben eine Warnung aus (möglicher Datenverlust aufgrund der Typkonvertierung Indikator.mqh )
//| 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];
}
Ich möchte auch fragen: Was sollte ich in der Handelsanforderung ändern, der Fehler 10030 erschien, das Jahr vor dem Expert Advisor Code funktionierte ohne Probleme, und jetzt macht es mich lesen / suchen nach Änderungen in MQL5 wieder
// функция открытия позиции с рынка
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);
}
Und ich wollte auch fragen: Was sollte in der Handelsanforderung geändert werden, gibt es einen Fehler 10030 ,, früher der Expert Advisor Code arbeitete ohne Probleme und jetzt zwingt es mich wieder zu lesen / suchen nach Änderungen in MQL5
// функция открытия позиции с рынка
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);
}
Ich würde die hervorgehobene Stelle wie folgt schreiben:
Ich würde die hervorgehobene Stelle so schreiben:
Aus tiefstem Herzen...!!! )
Es hat funktioniert, es hat funktioniert!
Danke Alexej!!!!!!!!!!!!!!
Guten Tag. Können Sie einen EA für MT5 vorschlagen? Können Sie einen EA mit einem Trailing-Stop vorschlagen? Vorzugsweiseeinen SCALPER oder einen, der mit NEWS oder anderen arbeitet. Ich danke Ihnen im Voraus.
Bitte erklären Sie mir, wie ich den gekauften Indikator auf dem Terminal installieren kann, denn ich habe ihn gekauft, kann ihn aber nicht aktivieren und weiß nicht, wo das Problem liegt.
Klarstellung: Haben Sie bei Market gekauft?
Nach dem Kauf habe ich auf "Im Terminal installieren" geklickt und bin dann zum Handelsterminal gegangen, aber es ist nichts passiert, der Indikator ist nicht erschienen