Hatalar, hatalar, sorular - sayfa 8

 
FEDOR_MQL :

Sakıncası yoksa kodu görebilir misin? Sonra farklı şeyler deniyorum, hiçbir şey işe yaramıyor.

Veya depodan yüzde olarak danışman riskine daha basit bir ekleme için başka bir seçenek var mı? Teşekkür ederim!

Hatasız çalışan bir kod gönderdim
 
sergey1294 :

Her durum bir tamsayı sabiti, bir karakter sabiti veya bir sabit ifade ile işaretlenebilir. Sabit bir ifade, değişkenleri veya işlev çağrılarını içeremez. Switch ifadesi ifadesi tamsayı türünde olmalıdır.
 
Valmars :
Her durum bir tamsayı sabiti, bir karakter sabiti veya bir sabit ifade ile işaretlenebilir. Sabit bir ifade, değişkenleri veya işlev çağrılarını içeremez. Switch ifadesi ifadesi tamsayı türünde olmalıdır.
Bu zaten halledildi.
 
sergey1294 :
Hatasız çalışan bir kod gönderdim
Doğru, oradaki akım, kodun geri kalanını kaydetmek değil, gereksiz yere atmak gerekiyordu ...
 

Bu formdaki yapının neden çalışmadığını merak ediyorum, hata veriyor - '}' - tüm kontrol yolları bir değer döndürmez

 //+------------------------------------------------------------------+
#property copyright "2010, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//--- input parameters

input double    Lots= 0.1 ;
input bool      MM = true;
input double    Risk = 10.0 ;

double lots;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   if (MM) lots = LotSon();       //вызов функции LotSon 
   else lots = Lots;
  }
//+------------------------------------------------------------------+
double LotSon()
{
   double LotMin     = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN );
   double LotMax     = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MAX );
   double LotStep    = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP );
   double Lot        = AccountInfoDouble ( ACCOUNT_FREEMARGIN )/ 100000.0 * Risk;
  Lot               = MathMin (LotMax, MathMax (LotMin,Lot));
  
   if (Lot < LotMin) Lot = LotMin;
   if (Lot > LotMax) Lot = LotMax;

   if (LotStep == 0.01 ) return ( NormalizeDouble (Lot, 2 ));
   if (LotStep == 0.1 ) return ( NormalizeDouble (Lot, 1 ));
   if (LotStep == 1.0 ) return ( NormalizeDouble (Lot, 0 ));
}
 
sergey1294 :
Hatasız çalışan bir kod gönderdim
Üzgünüm Sergey, bir şekilde kaçırdım. Şimdi bulundu. Hepinize çok teşekkür ederim bu kadar uzun süreceğini düşünmemiştim.
 
sergey1294 :

Bu formdaki yapının neden çalışmadığını merak ediyorum, hata veriyor - '}' - tüm kontrol yolları bir değer döndürmez


Sizce bu fonksiyon ne döndürmeli? Bence -
 return (Lot);
 
Interesting :
Sizce bu fonksiyon ne döndürmeli? Bence -

İşte böyle çalışmıyor


   if (LotStep == 0.01 ) return ( NormalizeDouble (Lot, 2 ));
   if (LotStep == 0.1 ) return ( NormalizeDouble (Lot, 1 ));
   if (LotStep == 1.0 ) return ( NormalizeDouble (Lot, 0 ));

Ve bu böyle çalışır

   if (LotStep == 0.01 )Lot= NormalizeDouble (Lot, 2 );
   if (LotStep == 0.1 ) Lot= NormalizeDouble (Lot, 1 );
   if (LotStep == 1.0 ) Lot= NormalizeDouble (Lot, 0 );

  return (Lot); 

	          
 
sergey1294 :

İşte böyle çalışmıyor

Doğru ve çalışmıyor. Elbette kimin umrunda, ama ben şahsen her zaman herhangi bir işlevin sonunda return() öğesinin bildirilmesi gerektiğine inandım ve derleyici bu konuda beni destekliyor.


not

Şahsen, döndürülen değeri hesaplamak için MQL4'teki Result değişkenini kullanmaya başladım. Aynı zamanda, işlev kodunun sonunda return() öğesinin çağrılmasının zorunlu olduğu ve kodun başında / ortasında bulunmasının bazen bir tür kırılma analogu olarak algılanacağına dikkat edilmelidir. tek fark, aranın kendisinin derleyici tarafından bir değer işlevi sonucu döndürme komutu olarak algılanmamasıdır).

 

Çift tip değişkenler için == koşulunu kullanmak doğru değildir. Bunun gibi bir şeyi karşılaştırmanız önerilir:

 double LotSon()
{
   double LotMin     = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN );
   double LotMax     = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MAX );
   double LotStep    = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP );
   double Lot        = AccountInfoDouble ( ACCOUNT_FREEMARGIN )/ 100000.0 * Risk;
  Lot               = MathMin (LotMax, MathMax (LotMin,Lot));
  
   if (Lot < LotMin) Lot = LotMin;
   if (Lot > LotMax) Lot = LotMax;

   if ( MathAbs (LotStep- 0.01 )< 0.001 ) return ( NormalizeDouble (Lot, 2 ));
   if ( MathAbs (LotStep- 0.1 )< 0.001 ) return ( NormalizeDouble (Lot, 1 ));
   if ( MathAbs (LotStep- 1.0 )< 0.001 ) return ( NormalizeDouble (Lot, 0 ));
   return (- 1 );
}
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5