MQL5: Validierung :-( Ich habe mir schon das Hirn zermartert, um herauszufinden, was es ist und wie es gelöst wird. - Seite 4

 
Der Code wurde entfernt.
 
Andrey Minaev:
Ich lese, welche Prüfungen zu bestehen sind. Warum schreiben Sie das an alle? Ich habe eine Frage zur Lautstärke, was ist los?

Lesen und Tun sind zwei große Unterschiede.

Die Behandlungsmethode: Lesen Sie nicht nur, sondern tun Sie, was geschrieben steht. Wiederholen Sie dies, bis Sie den Fehler verstehen.


Hinzugefügt: Um CodeIntersection 2 iMA Choosing Strategies, Funktionen OpenBuy, OpenSell, LotCheck zu studieren.

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

Wie soll ich Sie verstehen, ich frage nach Losen, Sie raten mir, die Preisnormalisierung zu betrachten.

Ich habe schon viel Zeit damit verbracht, ich kann nicht verstehen, worum es hier eigentlich geht. Ich habe getan, was sie schreiben. Es stellt sich heraus, dass auch sie nicht wissen, wie sie helfen können.

Was ist zu tun?

 
Andrey Minaev:

Wie soll ich Sie verstehen, ich frage nach Losen, Sie raten mir, die Preisnormalisierung zu betrachten.

Ich habe schon viel Zeit damit verbracht, ich kann nicht verstehen, worum es hier eigentlich geht. Ich habe getan, was sie schreiben. Es stellt sich heraus, dass auch sie nicht wissen, wie sie helfen können.

Was ist zu tun?

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

MQL5: Validierung :-( Ich habe mir schon den Kopf zerbrochen, was das ist und wie es gelöst wird.

Vladimir Karputov, 2020.03.10 18:36

Sie haben gelesen und ausgeführt - das sind zwei große Unterschiede.

Ihre Behandlungsmethode: Tun Sie, was Sie lesen, aber lesen Sie auch, was geschrieben steht. Wiederholen Sie dies, bis Sie den Fehler verstehen.


Hinzugefügt: zum StudiencodeIntersection 2 iMA Choosing Strategies, Funktionen OpenBuy, OpenSell, LotCheck.

Ich habe die Preisnormalisierung versehentlich eingegeben - das tut mir leid.
 

Ich habe Ihre LotCheck-Funktion eingefügt.

Hier ist das Ergebnis

 

Kann jemand helfen? Ich habe schon alles versucht.

 
Andrey Minaev:

Kann jemand helfen? Ich habe alles versucht.

Wo ist der Code? Fügen Sie den Code über die SchaltflächeCodeein.

 
//+-----------------------------------------------------------------------------------------------+
//| Функция открывает позицию 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:

Kann jemand helfen? Ich habe schon alles versucht.

Wie schließen Sie Positionen?