Surligné...si <0, alors le lot de la transaction perdante est augmenté.
si >0, alors le lot d'un trade à profit est augmenté
Salut.
J'ai une autre question concernant votre EA
En le testant sur un compte de démonstration, le phénomène suivant s'est produit :
Lorsque l'EA atteint les paramètres spécifiés, il est passé en mode "stop", c'est-à-dire que le bouton "start" est allumé, mais le trading ne s'est pas arrêté et les transactions sont très courtes, littéralement un ou deux cents. Est-ce que c'est comme ça que ça doit être ?
J'ai également découvert que l'EA a fermé certaines transactions non pas au prix d'achat ou au prix limite et non pas à la limite monétaire, mais "pour rien" et le prix a dépassé plusieurs points avant la fermeture. Dans le même temps, le conseiller expert couvre complètement les pertes précédentes, de quelques centimes, (par exemple, trois transactions d'affilée ont (-15,59 $) une transaction rentable = +15,62 $ et l'a clôturée immédiatement !)
J'ai regardé les logs, aucune erreur nulle part...
J'ai une autre question concernant votre conseiller expert
En le testant sur une démo, le phénomène suivant s'est produit :
Lorsque l'EA atteint les paramètres prédéfinis, il passe en mode "stop", c'est-à-dire que le bouton "start" est allumé, mais le trading n'est pas arrêté, mais des trades très courts sont ouverts, juste un ou deux cents. Est-ce que c'est comme ça que ça doit être ?
J'ai également découvert que l'EA a clôturé certaines transactions non pas au prix d'achat ou au prix limite et non pas à la limite monétaire, mais "pour rien" et le prix a dépassé plusieurs points avant la clôture. Dans le même temps, le conseiller expert couvre complètement les pertes précédentes, de quelques centimes, (par exemple, trois transactions d'affilée ont (-15,59 $) une transaction rentable = +15,62 $ et l'a clôturée immédiatement !)
J'ai regardé les logs, aucune erreur nulle part...
Veuillez nous envoyer le code avec vos corrections. Nous verrons bien.
Veuillez me conseiller sur la fonction et l'endroit à ajouter à ce simple EA,
En plus des moyens existants pour réinitialiser beaucoup à l'initiale,
Si vous voulez fermer la position actuelle lorsqu'un drawdown de la position actuelle est atteint, spécifié dans la devise de dépôt, et ensuite, lorsque vous ouvrez la suivante, remettre le lot à celui de départ ?
//+-----------------------------------------------------------------------------------------------+//| Simple Moving Average.mq4 |//| Copyright 2016, Andrey Minaev |//| https://www.mql5.com/ru/users/id.scorpion |//+-----------------------------------------------------------------------------------------------+#property copyright"Copyright 2016, Andrey Minaev"#property link"https://www.mql5.com/ru/users/id.scorpion"#property version"1.00"#property strict// Параметры советникаexternstring sParametersEA = ""; // Параметры советникаexterndouble dLots = 0.01; // Количество лотовexternint iStopLoss = 30; // Уровень убытка (в пунктах)externint iTakeProfit = 30; // Уровень прибыли (в пунктах)externint iSlippage = 3; // Проскальзование (в пунктах)externint iMagic = 1; // Индентификатор советникаexterndouble K_Martin = 2.0;
externint OrdersClose = 5;
externint DigitsLot = 2;
// Параметры индикатораexternstring sParametersMA = ""; // Параметры индикатораexternint iPeriodMA = 14; // Период усреднения// Глобальные переменныеdouble dMA;
//+-----------------------------------------------------------------------------------------------+intOnInit()
{
// Если брокер использует 3 или 5 знаков после запятой, то умножаем на 10if(Digits == 3 || Digits == 5)
{
iStopLoss *= 10;
iTakeProfit *= 10;
iSlippage *= 10;
}
return(INIT_SUCCEEDED);
}
//+-----------------------------------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+-----------------------------------------------------------------------------------------------+voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0, iPeriodMA, 0, MODE_SMA, PRICE_CLOSE, 0);
// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
}
}
//+-----------------------------------------------------------------------------------------------+//| Функция проверки открытых оредров |//+-----------------------------------------------------------------------------------------------+bool bCheckOrders()
{
// Переберем в цикле ордера, для проверки открытых ордеров данным советникомfor(int i = 0; i <= OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
return(false);
return(true);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на покупку |//+-----------------------------------------------------------------------------------------------+bool bSignalBuy()
{
if(dMA > Open[1] && dMA < Close[1])
return(true);
return(false);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на продажу |//+-----------------------------------------------------------------------------------------------+bool bSignalSell()
{
if(dMA < Open[1] && dMA > Close[1])
return(true);
return(false);
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на покупку |//+-----------------------------------------------------------------------------------------------+void vOrderOpenBuy()
{
int iOTi = 0; // Тикет ордера
iOTi = OrderSend(Symbol(), OP_BUY, LOT(), Ask, iSlippage, 0, 0, "", iMagic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на продажу |//+-----------------------------------------------------------------------------------------------+void vOrderOpenSell()
{
int iOTi = 0; // Тикет ордера
iOTi = OrderSend(Symbol(), OP_SELL, LOT(), Bid, iSlippage, 0, 0, "", iMagic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
//+-----------------------------------------------------------------------------------------------+//| Функция модификации ордера |//+-----------------------------------------------------------------------------------------------+void vOrderModify(int iOTi)
{
int iOTy = -1; // Тип ордераdouble dOOP = 0; // Цена открытия ордераdouble dOSL = 0; // Стоп Лоссint iMag = 0; // Идентификатор советникаdouble dSL = 0; // Уровень убыткаdouble dTP = 0; // Уровень прибыли// Выберем по тикету открытый ордер, получим некоторые значенияif(OrderSelect(iOTi, SELECT_BY_TICKET, MODE_TRADES))
{
iOTy = OrderType();
dOOP = OrderOpenPrice();
dOSL = OrderStopLoss();
iMag = OrderMagicNumber();
}
// Если ордер открыл данный советник, то входим в условиеif(OrderSymbol() == Symbol() && OrderMagicNumber() == iMag)
{
// Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордерif(dOSL == 0)
{
if(iOTy == OP_BUY)
{
dSL = NormalizeDouble(dOOP - iStopLoss * Point, Digits);
dTP = NormalizeDouble(dOOP + iTakeProfit * Point, Digits);
bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
}
if(iOTy == OP_SELL)
{
dSL = NormalizeDouble(dOOP + iStopLoss * Point, Digits);
dTP = NormalizeDouble(dOOP - iTakeProfit * Point, Digits);
bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
}
}
}
}
//+-----------------------------------------------------------------------------------------------+//| Функция обработки ошибок |//+-----------------------------------------------------------------------------------------------+void vError(int iErr)
{
switch(iErr)
{
case129: // Неправильная ценаcase135: // Цена измениласьcase136: // Нет ценcase138: // Новые ценыSleep(1000);
RefreshRates();
break;
case137: // Брокер занятcase146: // Подсистема торговли занятаSleep(3000);
RefreshRates();
break;
}
}
//+-----------------------------------------------------------------------------------------------+double LOT()
{
int n=0;
double OL=dLots;
for (int j = OrdersHistoryTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
{
if (OrderProfit()<0)
{
if (n==0) OL=NormalizeDouble(OrderLots()*K_Martin,DigitsLot);
n++;
if (n>=OrdersClose) {Comment("1");return(dLots);}
}
else
{
if (n==0) {Comment("2");return(dLots);}
else {Comment("3");return(OL);}
}
}
}
}
return(OL);
}
//------------------------------------------------------------------
Merci pour le conseil, je l'ai fait de cette façon, il dit quand il va au stop loss ou au take profit.
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
double deal_profit =0.0;
double deal_volume =0.0;
string deal_symbol ="";
long deal_magic =0;
long deal_reason =-1;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_profit=HistoryDealGetDouble(trans.deal,DEAL_PROFIT);
deal_volume=HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
deal_reason=HistoryDealGetInteger(trans.deal,DEAL_REASON);
}
elsereturn;
if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_OUT)
{
if(deal_reason==DEAL_REASON_SL)
SendNotification (" Закрыл позицию > StopLoss");
if(deal_reason==DEAL_REASON_TP)
SendNotification ("Закрыл позицию > TakeProfit");
}
}
}
et ainsi de suite, un nouvel achat ou une nouvelle vente
void OPENORDER(string ord)
{
double priceL=m_symbol.Ask();
if(ord=="Sell")
SendNotification (" открыл позицию > short");//--- check for free moneyif(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_BUY,my_lot,priceL)<0.0)
printf("We have no money. Free Margin = %f",m_account.FreeMargin());
elseif(!m_trade.Sell(my_lot,Symbol(),m_symbol.Bid(),my_SL,my_TP,""))
Print("BUY_STOP -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of Retcode: ",m_trade.ResultRetcodeDescription(),
", ticket of order: ",m_trade.ResultOrder()); // Если sell, то не открываемсяdouble priceS=m_symbol.Bid();
if(ord=="Buy")
SendNotification (" открыл позицию > long");//--- check for free moneyif(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_SELL,my_lot,priceS)<0.0)
printf("We have no money. Free Margin = %f",m_account.FreeMargin());
elseif(!m_trade.Buy(my_lot,Symbol(),m_symbol.Ask(),my_SL,my_TP,""))
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription(),
", ticket of deal: ",m_trade.ResultDeal());
J'ai besoin de faire un EA basé sur un indicateur, afin que l'EA puisse fonctionner sans la présence d'un indicateur. Est-il possible de faire afficher sur le graphique les données d'un indicateur qui y est inscrit, afin que ces lignes ne deviennent pas des objets?
J'ai besoin de faire un EA basé sur un indicateur, afin que l'EA puisse fonctionner sans l'indicateur. Est-il possible d'afficher les données de l'indicateur qui y est inscrit sur le graphique, afin de ne pas faire de ces lignes des objets?
Surligné...si <0, alors le lot de la transaction perdante est augmenté.
si >0, alors le lot d'un trade à profit est augmenté
Salut.
J'ai une autre question concernant votre EA
En le testant sur un compte de démonstration, le phénomène suivant s'est produit :
Lorsque l'EA atteint les paramètres spécifiés, il est passé en mode "stop", c'est-à-dire que le bouton "start" est allumé, mais le trading ne s'est pas arrêté et les transactions sont très courtes, littéralement un ou deux cents. Est-ce que c'est comme ça que ça doit être ?
J'ai également découvert que l'EA a fermé certaines transactions non pas au prix d'achat ou au prix limite et non pas à la limite monétaire, mais "pour rien" et le prix a dépassé plusieurs points avant la fermeture. Dans le même temps, le conseiller expert couvre complètement les pertes précédentes, de quelques centimes, (par exemple, trois transactions d'affilée ont (-15,59 $) une transaction rentable = +15,62 $ et l'a clôturée immédiatement !)
J'ai regardé les logs, aucune erreur nulle part...
Bonjour.
J'ai une autre question concernant votre conseiller expert
En le testant sur une démo, le phénomène suivant s'est produit :
Lorsque l'EA atteint les paramètres prédéfinis, il passe en mode "stop", c'est-à-dire que le bouton "start" est allumé, mais le trading n'est pas arrêté, mais des trades très courts sont ouverts, juste un ou deux cents. Est-ce que c'est comme ça que ça doit être ?
J'ai également découvert que l'EA a clôturé certaines transactions non pas au prix d'achat ou au prix limite et non pas à la limite monétaire, mais "pour rien" et le prix a dépassé plusieurs points avant la clôture. Dans le même temps, le conseiller expert couvre complètement les pertes précédentes, de quelques centimes, (par exemple, trois transactions d'affilée ont (-15,59 $) une transaction rentable = +15,62 $ et l'a clôturée immédiatement !)
J'ai regardé les logs, aucune erreur nulle part...
Veuillez nous envoyer le code avec vos corrections. Nous verrons bien.
Postez le code avec vos correctifs. On verra.
donc je teste toujours celui non corrigé, votre natif.
donc je teste toujours la version non corrigée, ta version native.
Je ne vois pas d'erreurs...
Écrivez quelle période, sur quelle paire et quels paramètres étaient présents lorsque les erreurs se sont produites.
Je ne vois pas d'erreurs...
écrire quelle période, sur quelle paire et quels paramètres étaient présents lorsque les erreurs se sont produites.
ces paramètres :
timeframe_RSI=0 period_RSI=14 level_buy=30 level_sell=70 Lot=0.01 K_Martin=1.6 Stoploss=200 Takeprofit=1000 CountLoss=100.0 CountProfit=25.0 Magic=777 DigitsLot=2 slippage=3
Le rapport est joint ci-dessous.
il y a des lignes jaunes avec une fermeture "peu claire", ni par arrêt ,ni par prise, ni par argent.
et bleu - des transactions qui ont été ouvertes et fermées presque immédiatement
Bonjour !
Veuillez me conseiller sur la fonction et l'endroit à ajouter à ce simple EA,
En plus des moyens existants pour réinitialiser beaucoup à l'initiale,
Si vous voulez fermer la position actuelle lorsqu'un drawdown de la position actuelle est atteint, spécifié dans la devise de dépôt, et ensuite, lorsque vous ouvrez la suivante, remettre le lot à celui de départ ?
voici les paramètres :
timeframe_RSI=0 period_RSI=14 level_buy=30 level_sell=70 Lot=0.01 K_Martin=1.6 Stoploss=200 Takeprofit=1000 CountLoss=100.0 CountProfit=25.0 Magic=777 DigitsLot=2 slippage=3
Le rapport est joint ci-dessous.
il y a des lignes jaunes avec une fermeture "peu claire", ni par arrêt ,ni par prise, ni par argent.
Et les lignes bleues représentent les transactions qui ont été ouvertes et fermées presque immédiatement.
Dans quel délai ?
et ainsi de suite, un nouvel achat ou une nouvelle vente
Salutations. Veuillez me conseiller sur mt5.
J'ai besoin de faire un EA basé sur un indicateur, afin que l'EA puisse fonctionner sans la présence d'un indicateur.
Est-il possible de faire afficher sur le graphique les données d'un indicateur qui y est inscrit, afin que ces lignes ne deviennent pas des objets?
Salutations. Veuillez me conseiller sur mt5.
J'ai besoin de faire un EA basé sur un indicateur, afin que l'EA puisse fonctionner sans l'indicateur.
Est-il possible d'afficher les données de l'indicateur qui y est inscrit sur le graphique, afin de ne pas faire de ces lignes des objets?
ChartIndicatorAdd()