MQL5 : Validation :-( Je me suis déjà creusé la tête pour savoir de quoi il s'agit et comment on le résout. - page 4

 
Le code a été supprimé.
 
Andrey Minaev:
Je lis les contrôles à passer. Pourquoi tu écris ça à tout le monde. J'ai une question sur le volume, qu'est-ce qui ne va pas.

Lire et faire sont deux grandes différences.

La méthode de traitement : en plus de la lecture, faire ce qui est écrit. Répétez jusqu'à ce que vous compreniez l'erreur.


Ajouté : Au code d'étudeIntersection 2 iMA Choosing Strategies, les fonctions OpenBuy, OpenSell, LotCheck.

Intersection 2 iMA Choosing Strategies
Intersection 2 iMA Choosing Strategies
  • www.mql5.com
На баре может быть только одна сделка 'вход в рынок' (это внутренний параметр, он не вынесен во входные параметры и это не имеет отношения к параметру ' Only one positions'). При работе в режиме 'внутри бара' ('Search signals, in seconds' больше или равно '10') текущий бар - бар #0, при работе в режиме 'только в момент рождения нового бара'...
 

Comment je vous comprends, je vous demande des lots, vous me conseillez de regarder la normalisation des prix.

J'ai déjà passé beaucoup de temps, je n'arrive pas à comprendre de quoi il s'agit. J'ai fait ce qu'ils écrivent. Il s'avère qu'ici aussi on ne sait pas comment aider.

Que faire ?

 
Andrey Minaev:

Comment je vous comprends, je vous demande des lots, vous me conseillez de regarder la normalisation des prix.

J'ai déjà passé beaucoup de temps, je n'arrive pas à comprendre de quoi il s'agit. J'ai fait ce qu'ils ont écrit. Il s'avère qu'ici aussi on ne sait pas comment aider.

Que faire ?

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

MQL5 : Validation :-( Je me suis déjà creusé la tête pour savoir ce que c'est et comment on le résout.

Vladimir Karputov, 2020.03.10 18:36

Vous avez lu et exécuté - sont deux grandes différences.

Méthodes de traitement : Faites ce que vous lisez, mais lisez aussi ce qui est écrit. Répétez jusqu'à ce que vous compreniez l'erreur.


Ajouté : au code d'étudeIntersection 2 iMA Choosing Strategies, les fonctions OpenBuy, OpenSell, LotCheck.

J'ai mis la normalisation des prix par erreur - désolé.
 

J'ai inséré votre fonction LotCheck.

Voici le résultat

 

Quelqu'un peut-il m'aider ? J'ai déjà tout essayé.

 
Andrey Minaev:

Quelqu'un peut-il m'aider ? J'ai tout essayé.

Où est le code ? Collez le code en utilisant le boutonCode

 
//+-----------------------------------------------------------------------------------------------+
//| Функция открывает позицию Sell                                                                |
//+-----------------------------------------------------------------------------------------------+
void OpenSell(void)
{
   double volume=CalculateVolume(ORDER_TYPE_SELL);
   //volume=CheckVolumeValue(volume);
   //volume=NormalizeDouble(volume,DigitsLots());
   volume=LotCheck(volume,symb);
   if(!CheckMoneyForTrade(volume,ORDER_TYPE_BUY))
   {
      sell.allowOpen=false;
      return;
   }
   if(volume==0)
   {
      sell.allowOpen=false;
      return;
   }
   if(trd.Sell(volume,symb.Name(),symb.Bid(),0,0,inpComment))
//+-----------------------------------------------------------------------------------------------+
//| Функция рассчитывает объем позиции                                                            |
//+-----------------------------------------------------------------------------------------------+
double CalculateVolume(ENUM_ORDER_TYPE type)
{
   double volume=0;
   
   double size=cndl.high-cndl.low;
   
   if(symb.Point()==0)
      return 0;
   
   double sl=(size*inpStopLoss*0.01)/symb.Point();
   double risk=AccountInfoDouble(ACCOUNT_BALANCE)*inpRisk*0.01;
   
   volume=(risk/sl)/symb.TickValue();
   
   if(sl==0 || symb.TickValue()==0)
      return 0;
   
   if(inpMaxVolume>0 && inpMaxVolume<volume)
   {
      volume=inpMaxVolume;
      //Print(STR_TIME,"Установлен максимальный объем установленный в настройках");
      //Print(STR_TIME,"The maximum volume set in the settings is set");
   }
   return volume;
}
double LotCheck(double lots,CSymbolInfo &symbol)
  {
//--- calculate maximum volume
   double volume=NormalizeDouble(lots,2);
   double stepvol=symbol.LotsStep();
   if(stepvol>0.0)
      volume=stepvol*MathFloor(volume/stepvol);
//---
   double minvol=symbol.LotsMin();
   if(volume<minvol)
      volume=0.0;
//---
   double maxvol=symbol.LotsMax();
   if(volume>maxvol)
      volume=maxvol;
   return(volume);
  }
 
bool CheckMoneyForTrade(double lots,ENUM_ORDER_TYPE type)
  {
//--- получим цену открытия
   MqlTick mqltick;
   SymbolInfoTick(symb.Name(),mqltick);
   double price=mqltick.ask;
   if(type==ORDER_TYPE_SELL)
      price=mqltick.bid;
//--- значения необходимой и свободной маржи
   double margin,free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   //--- вызовем функцию проверки
   if(!OrderCalcMargin(type,symb.Name(),lots,price,margin))
     {
      //--- что-то пошло не так, сообщим и вернем false
      Print("Error in ",__FUNCTION__," code=",GetLastError());
      return(false);
     }
   //--- если не хватает средств на проведение операции
   if(margin>free_margin)
     {
      //--- сообщим об ошибке и вернем false
      Print("Not enough money for ",EnumToString(type)," ",lots," ",symb.Name()," Error code=",GetLastError());
      return(false);
     }
//--- проверка прошла успешно
   return(true);
  }
 
Andrey Minaev:

Quelqu'un peut-il m'aider ? J'ai déjà tout essayé.

Comment fermer des positions?