KimIV'ten faydalı özellikler - sayfa 89

 
Sevgili Igor! e-CloseByPercentProfit.mq4 Expert Advisor'ınıza, kurulu olduğu tablodaki çift için TP ve SL'yi ayarlayacak şekilde bir ekleme yapmak mümkün müdür.İnternet ile çok sık bağlantı kesilmesi olduğu için bu gereklidir.
 

Hepinize iyi günler.

fonksiyon hakkında soru


//+------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                        |
//|  Описание : Возвращает количество позиций.      |
//+------------------------------------------------------------------+

int NumberOfPositions ( string sy = "" , int op = - 1 , int mn = - 1 ) {
  int i , k = OrdersTotal ( ) , kp = 0 ;  if ( sy = = "0" ) sy = Symbol ( ) ;
  for ( i = 0 ; i < k ; i + + )                                    {
    if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) )      {
      if ( OrderSymbol ( ) = = sy | | sy = = "" )                   {
        if ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) {
          if ( op < 0 | | OrderType ( ) = = op )                   {
            if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) kp + + ;
          } } } } }  return ( kp ) ; }  
          

Çoklu para birimi danışmanım var. Çiftler harici parametrelerde ayarlanır. Sihriyle (her çift için).

Her enstrüman için giriş koşulları arasında şunlar bulunur:
if ( NumberOfPositions(Symbol_1, -1,Magic_1)<1){//если нет открытых
//позиций по 1-му инструменту, 
VEYA (ikinci çift için)
if ( NumberOfPositions(Symbol_2, -1,Magic_2)<1){//если нет открытых
//позиций по 2-му инструменту, проверяем ОСТАЛЬНЫЕ условия

Öyle oldu ki dün her iki sembolü de yükledim - EURUSD ve sabah sadece bir anlaşmanın açıldığını öğrendim, ancak görünüşe göre her iki durumda da sinyaller vardı.

Ve sonra aklıma geldi. işlevi nedir

NumberOfPositions ( string sy = "" , int op = - 1 , int mn = - 1 )
İlk olarak, sembolle açık bir pozisyon olup olmadığını kontrol eder. Ve sonra diğer her şey.

Başka bir deyişle, EIRUSD enstrümanı için zaten açık bir pozisyon (bu Uzman Danışman tarafından) varsa, o zaman ikinci pozisyon, farklı bir sihirle bile, farklı bir algoritmaya göre açılmayacak mı?

Lütfen söyle bana, doğru mu değil mi?

Yoksa akıl yürütmemde yanılıyor muyum? - ve işlev verilen tüm kriterleri " tamamen " değerlendirir ve sırayla değil ...


 

Bu işlevi sıklıkla kullanırım, her şeyi giriş parametrelerine göre döndürür. İşlev tarafından yinelenen konumlar, parametrelere göre sırayla sıralanır. Evet, kendiniz görün.

 int NumberOfPositions ( string sy = "" , int op = - 1 , int mn = - 1 ) {
   int i , k = OrdersTotal ( ) , kp = 0 ;

   if ( sy = = "0" ) sy = Symbol ( ) ;
   for ( i = 0 ; i < k ; i + + ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ) {
       if ( OrderSymbol ( ) = = sy | | sy = = "" ) { //далее внутри символа
         if ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) {
           if ( op < 0 | | OrderType ( ) = = op ) { //далее внутри типа ордера
             if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) kp + + ; //внутри магика, и только здесь позиция учтена 
           }
         }
       }
     }
   }
   return ( kp ) ;
}
 

Yani bu, Uzman Danışmanımın birinci pozisyon açıkken farklı bir büyü ile bile ikinci EURUSD pozisyonunu açamayacağı anlamına mı geliyor?

Görünüşe göre öyle. Çünkü test cihazında bile kesişen pozisyonlar yok gibi görünüyor.

//------------------------------------------------ --------

 
Rita >> :

Yani Uzman Danışmanım birinci pozisyon açıkken farklı bir büyü ile bile ikinci EURUSD pozisyonunu açamayacak mı demek oluyor?...

Tam tersi :)) Bu, işlevin sembollerinizi ve büyülerinizi ayrı ayrı saydığı anlamına gelir. Yani Magic_1 ile bir EURUSD pozisyonu açılırsa NumberOfPositions("EURUSD", -1, Magic_2)==0; , tabii Magic_2 ile başka bir EURUSD pozisyonu yoksa.

Genel olarak, işlev açık pozisyonları ilkeye göre sayar (sy && op && mn), yani. pozisyonlar bu parametrelerle sayılacaktır. En az bir parametre eşleşmezse, sıra dikkate alınmayacak ve fonksiyon bunu görmeyecektir.

Yorumda fonksiyon değerlerini görüntüleyin ve gerçek zamanlı olarak sipariş sayısını ve fonksiyonun doğru çalışmasını izleyeceksiniz. Büyük olasılıkla, algoritmanın yanlış çalışmasının nedeni EA kodundadır.

 
TAMAM. Şimdi kodu kontrol edeceğim.
 
hope писал(а) >>

Bir işlev çağrısında bir sembole bağlantı eklemek yardımcı olmaz. Neden her pozisyon için karı ayrı hesaplıyor (yukarıdaki resim)?

Hayır, sana çizimimi teklif etmeyi tercih ederim...

...ve senaryo...

 
KimIV писал(а) >>

Hayır, sana çizimimi teklif etmeyi tercih ederim...

...ve senaryo...

Anladım ki "ben de aptalım"... Et ve süt ekleyerek meme alamayacaksınız...

 
KimIV писал(а) >>
Angela , derleyici benim fonksiyon tanımımı bu yerde görmeyi beklemiyordu. Bu, kodda daha yüksek bir yerde bir şeye sahip olmadığınız anlamına gelir. Noktalı virgül veya kapanış kaşlı ayraç olabilir. Genel olarak, kodu dikkatlice kontrol edin.

Anladım, işlevinizi int start() içine ekledim, int start() içinden çıkardığımda her şey derlendi. Sorun farklıdır, test cihazındaki görselleştirme modundaki göstergede, bu işlev danışmandan göstergeye veri almaz.

 
e-Haber-Lucky$.mq4

Şanslı$ ve KimIV

http://www.kimiv.ru

Merhaba Igor!

Danışmanınızı kullanıyorum, çok iyi, dün göstergeyi iCustom aracılığıyla sabitlemek istedim, ancak görmüyor, göstergeleri iCustom aracılığıyla nasıl kaydedebilirim? İlginç olan, iHigh, iLow gibi yerleşik işlevler sorunsuz görüyor, ancak göstergeye göre herhangi bir gecikme ayarlamak istemiyor, zaten kafamı kırdım, sorun ne olabilir?

Günlük çubuğun iHigh ve iLow'u için şimdi bu şekilde kayıtlıdır , bu fonksiyon ile beklendiği gibi çalışır, gecikmeleri ayarlar, ancak göstergeye göre hiç çalışmaz (((.... gösterebilirsiniz) bir kod parçası, bu EA'daki gösterge tarafından gecikmelerin nasıl ayarlanacağı Gösterge, yalnızca iCustom işlevine yapılan bir çağrı yoluyla herkes yapabilir.

Zamanın varsa, teşekkür ederim.

 //глобальные переменные

double Hi_Bar ;
double Lou_Bar ;

//+------------------------------------------------------------------+
//| Установка ордеров                                                |
//+------------------------------------------------------------------+
void SetOrders ( ) {
  Hi_Bar   = iHigh ( Symbol ( ) , PERIOD_D1 , 0 ) ;
  Lou_Bar =    iLow ( Symbol ( ) , PERIOD_D1 , 0 ) ;
   double ldStop = 0 , ldTake = 0 ;
   int     spr = MarketInfo ( Symbol ( ) , MODE_SPREAD ) ;
   double pAsk = Hi_Bar + ( DistanceSet + spr ) * Point ;
   double pBid = Lou_Bar - DistanceSet * Point ;


Neden: