MQL5: Doğrulama :-( Ne olduğunu ve nasıl çözüldüğünü araştırmak için şimdiden beynimi harcamıştım. - sayfa 4

 
Kodu kaldırdı.
 
Andrey Minaev :
Hangi kontrollerin geçileceğini okudum. Neden hepiniz bunu yazıyorsunuz? Hacim hakkında bir sorum var, neyin yanlış olduğu.

Okumak ve yapmak çok farklı iki şeydir.

Tedavi yöntemi: Okumaya ek olarak yazılanları yapın. Hatayı anlayana kadar tekrarlayın.


Eklendi: Kavşak 2 iMA Seçme Stratejileri kodu, OpenBuy, OpenSell, LotCheck fonksiyonlarını incelemek için.

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

Seni nasıl anlayabilirim, ben çok soruyorum, bana fiyat normalleşmesine bakmamı tavsiye ediyorsun.

Çok zaman harcadım, neyin yanlış olduğunu anlayamıyorum. Yazdıklarını yaptım. Görünüşe göre onlar da nasıl yardım edeceklerini bilmiyorlar.

Nasıl olunur?

 
Andrey Minaev :

Seni nasıl anlayabilirim, ben çok soruyorum, bana fiyat normalleşmesine bakmamı tavsiye ediyorsun.

Çok zaman harcadım, neyin yanlış olduğunu anlayamıyorum. Yazdıklarını yaptım. Görünüşe göre onlar da nasıl yardım edeceklerini bilmiyorlar.

Nasıl olunur?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL5: Doğrulama :-( Ne olduğunu ve nasıl çözüldüğünü araştırmak için şimdiden beynimi harcamıştım.

Vladimir Karputov , 2020.03.10 18:36

Okumak ve yapmak çok farklı iki şeydir.

Tedavi yöntemi: Okumaya ek olarak yazılanları yapın. Hatayı anlayana kadar tekrarlayın.


Eklendi: Kavşak 2 iMA Seçme Stratejileri kodu, OpenBuy, OpenSell, LotCheck fonksiyonlarını incelemek için.

Yanlışlıkla fiyatların normalleştirilmesini ekledim - burada üzgünüm.
 

LotCheck işlevinizi ekledim.

İşte sonuç

 

Biri yardım edebilir mi? Ben zaten her şeyi denedim.

 
Andrey Minaev :

Biri yardım edebilir mi? Ben zaten her şeyi denedim.

Kod nerede? Düğmeyi kullanarak kodu yapıştırın kod

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

Yardım edebilecek var mı? Ben zaten her şeyi denedim.

Pozisyonları nasıl kapatıyorsunuz ?