"Uzman Danışmanlarda Sınırlamalar ve Doğrulamalar" makalesi için tartışma - sayfa 2

 

Teşekkür ederim.

 
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

'SYMBOL_VOLUME_LIMIT' - bildirilmemiş tanımlayıcı.............

'SymbolInfoDouble' - aşırı yüklerin hiçbiri işlev çağrısına uygulanamaz.............

Sadece bana mı öyle geliyor?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
gumgum:

'SYMBOL_VOLUME_LIMIT' - bildirilmemiş tanımlayıcı.............

'SymbolInfoDouble' - aşırı yüklerin hiçbiri işlev çağrısına uygulanamaz.............

Sorun sadece bende mi?

Yeni bir yapı yayınlanır yayınlanmaz her şey normale dönecektir. Derlemeyi bekliyoruz.
 
Rosh:

Bunu yapabilir misin?

lot_max=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
 

SeriesInfoInteger() fonksiyonu hakkında bir soru daha.

"AccountInfo..." konusunu oluştururkenBilgi ilişkisi" konusunu oluştururken, "yazılım ortamında önbelleğe alınan" verileri kullanan işlevler olduğunu ve her zaman "gerçek verilere doğrudan erişimi olan" işlevler olduğunu öğrendim.

SeriesInfoInteger() fonksiyonu hangi fonksiyon kategorisine aittir?

 

CheckVolumeValue işlevinde aşağıdaki kod kullanılır:

int ratio=(int)MathRound(volume/volume_step);

if(MathAbs(ratio*volume_step-volume)>0.0000001)

{

description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",

volume_step,ratio*volume_step);

return(false);

}

Ancak bu daha doğrudur:

int ratio = (int)MathRound((volume-min_volume)/volume_step);

if (MathAbs(ratio*volume_step+min_volume-volume)>0.0000001)

{

description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",

  volume_step,ratio*volume_step+min_volume);

return(false);

}

Çünkü hacim değişiminin minimum adımı minimum değerden sayılmalıdır.

 

Ve belki de kod parçacığı

//--- вычислим значение маржи

bool check=OrderCalcMargin(type,Symbol(),lots,last_tick.ask,margin);

ile değiştirilmelidir:

//--- вычислим значение маржи

double price = (type == ORDER_TYPE_BUY || type == ORDER_TYPE_BUY_LIMIT || type == ORDER_TYPE_BUY_STOP || type == ORDER_TYPE_BUY_STOP_LIMIT) ? last_tick.ask : last_tick.bid;

bool check=OrderCalcMargin(type,Symbol(),lots,price,margin);

 
Ekli kaynak kodu dosyaları ve HTML kodundaki kaynak kodu ekleri artık size kolaylık sağlamak için tamamen Portekizceye çevrilmiştir.
MQL5.community - User Memo
MQL5.community - User Memo
  • 2010.02.25
  • MetaQuotes Software Corp.
  • www.mql5.com
You have just registered and most likely you have questions such as, "How do I insert a picture to my a message?" "How do I format my MQL5 source code?" "Where are my personal messages kept?" You may have many other questions. In this article, we have prepared some hands-on tips that will help you get accustomed in MQL5.community and take full advantage of its available features.
 
Rashid Umarov:

MQL5'teki değişiklikler nedeniyle, artık bir sembol için izin verilen maksimum toplam hacim aşağıdaki gibi elde edilebilir:

Eski varyantı kullanmayın! Bu şekildeydi:

Makale düzeltilmiş ve yeni Check_Order_And_Volume_Limits.mq5 uzman kodu eklenmiştir.

Sayın Yönetici

Bu işlevi kullanmaya çalışıyorum ancak her durumda 0 döndürüyor.

MT5 yapım 2280

 
double orders_volume_on_symbol=PendingsVolume(symbol);


hata veriyor, böyle bir işlev yok

Ve fonksiyonu bekleyen emirleri içermeyecek şekilde değiştirdikten sonra, 0 veriyor


double NewOrderAllowedVolume(string symbol)
  {
   double allowed_volume=0;
//--- bir siparişin maksimum hacmine ilişkin sınırlamayı alın
   double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- bir sembol tarafından hacim sınırlamasını al
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

//--- bir sembole göre açık pozisyon hacmini al
   double opened_volume=PositionVolume(symbol);
   if(opened_volume>=0)
     {
      //--- mevcut hacmi zaten kullandıysak
      if(max_volume-opened_volume<=0)
         return(0);

      //--- açık pozisyonun hacmi max_volume değerini aşmaz
      //double orders_volume_on_symbol=PendingsVolume(symbol);
      //allowed_volume=max_volume-opened_volume-orders_volume_on_symbol;
      allowed_volume=max_volume-opened_volume;
      if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
     }
   return(allowed_volume);
  }

Bunun nedeni max_volume'un 0 ve opened_volume'un 0 olmasıdır;

Açılmış pozisyon yoksa maksimum hacim neden 0?

Yapı 2715

Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
  • www.mql5.com
Predefined Macro Substitutions - Named Constants - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5