Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 403

 
Link_x :

Ve işlevi gerçekten kemiklerle sökerseniz, boşuna işlev başlığını kesersiniz, önemli bilgiler vardır.

Son açık konumun türünü veya -1'i döndürür - bu, kapalı konum yoksa, işlev çağrıldığında değerinin = -1 olacağı anlamına gelir.

sy - enstrümanın adı (döviz çifti)

mn sihirli bir sayıdır. -1'i ayarlarsanız, işlev ne kadar sihirli olursa olsun, son kapatılan siparişin türünü döndürür.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней открытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
 
Link_x :
Nokta nokta, üzgünüm.
1 - programlama dehası mı?
2 - Dürüst olmak gerekirse, dışkı ve diğer çürüme ürünleri dışında gereksiz bir şey yoktur (açık bir görüş, tartışmaya hazırım, ancak başka bir konuda :)).
3 - şimdi her şey açık. :)
4 kesinlikle doğru. Biliyorum. Biraz "yanlış konuştum" ve metni "OrderSend" işleviyle yazdım.

"Bricks of Functions Parsing" şablonunun oluşturulmasına katkıda bulunduğunuz için teşekkür ederiz. :)

1. Alay etmeden yapalım, ha? Öğrenmenizi rahat ve kolay hale getirdi. Zeka bunun neresinde?
2. Tartışmalı.
3. Koddaki yorumlarınıza bakılırsa Nifiga sizin için net değil.
4. Olur.

 int GetTypeLastClosePos( string sy= "" , int mn=- 1 ) {    
   datetime t;                                         // Переменная хранит время закрытия
   int       i, k= OrdersHistoryTotal (), r=- 1 ;           // Объявление переменных i - индекс k - количество ордеров в истории r - будет хранить тип ордера
   if (sy== "0" ) sy= Symbol ();                           // Если в функцию в качестве значения символа передан NULL, то будет использоваться текущий символ графика
   for (i= 0 ; i<k; i++) {                               // Цикл по истории от нуля до OrdersHistoryTotal()
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) { // Если ордер с индексом i выбран в истории
// ---------------------- определение нужного нам ордера ордера ---------------------               
         if (( OrderSymbol ()==sy || sy== "" ) &&         // если переданный символ совпадает с символом ордера или передано значение по-умолчанию
             (mn< 0 || OrderMagicNumber ()==mn)) {       // если передано значение по-умолчанию или магик ордера равен переданному в функцию значению
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) { // если это или Buy или Sell
// --------------------- определение последнего закрытого ордера --------------------               
               if (t< OrderCloseTime ()) {                       // если значение, записанное в t меньше времени закрытия ордера
                  t= OrderCloseTime ();                           // запоминаем значение времени закрытия выбранного ордера для следующего сравнения
                  r= OrderType ();                               // запоминаем тип ордера
                  }                                             // Конец блока определения времени закрытия.
               }                                               // Конец блока обработки найденного нужного ордера по типу (одного из возможных)
            }                                                   // Конец блока проверки по символу и магику
         }                                                     // Конец блока обработки выбранного ордера
      }                                                         // Идём проверять следующий ордер (если i всё ещё меньше k)
// -- после прохода в цикле по всей истории в r будет лежать тип ордера или -1 (если не нашли ничего) --               
   return (r);                                                   // возвращаем результат поиска (либо тип ордера, либо -1)
}                                                               // Аминь. 

2. nokta için bir örnek:

 int GetTypeLastClosePos( string sy, int mn) {    
   datetime t;                                         // Переменная хранит время закрытия
   int       i, k= OrdersHistoryTotal ()- 1 , r=- 1 ;         // Объявление переменных i - индекс k - количество ордеров в истории r - будет хранить тип ордера
   for (i=k; i>= 0 ; i--) {                             // Обратный цикл по истории от OrdersHistoryTotal()-1 до нуля 
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) { // Если ордер с индексом i выбран в истории
// ---------------------- определение нужного нам ордера ордера ---------------------               
         if ( OrderMagicNumber ()!=mn) continue ;         // если магик не тот - идём выбирать следующий ордер в истории
         if ( OrderSymbol ()!=sy)       continue ;         // если переданный символ не равен символу ордера - идём выбирать следующий ордер в истории
         if ( OrderType ()> 1 )         continue ;         // если это не Buy и не Sell - идём выбирать следующий ордер в истории
// --------------------- дальше имеем выбранный нужный нам ордер --------------------        
// -------------------------- определяем время его закрытия -------------------------               
         if (t< OrderCloseTime ()) {                     // если значение, записанное в t меньше времени закрытия ордера
            t= OrderCloseTime ();                       // запоминаем значение времени закрытия выбранного ордера для следующего сравнения
            r= OrderType ();                             // запоминаем тип ордера
            }                                         // Конец блока определения времени закрытия.
         }                                             // Конец блока обработки выбранного ордера
      }                                               // Идём проверять следующий ордер (если i всё ещё больше k)
// -- после прохода в цикле по всей истории в r будет лежать тип ордера или -1 (если не нашли ничего) --               
   return (r);                                         // возвращаем результат поиска (либо тип ордера, либо -1)
}                                                     // Аминь. 

Burada daha az gereksiz şey var

 
Link_x :

Kullanıcı tanımlı bir fonksiyonun pratik kullanımına bir örnek:

.
Teşekkür ederim.
Bu nedenle, bu işlevi kullanmak için adını uygulamanız gerekir ve "r" değişkeninin kendisi bu işlevin değerini belirleyecek şekilde ayarlanmıştır!
İşte benim için küçük bir keşif! ^^
Tekrar teşekkürler, Yuri. :)


Son açıklama için bu mümkündür:

?


Verdiğiniz örnekler doğru değil. Parametreleri olan bir fonksiyonu çağırdığınızda , bu parametrelerin değerlerini virgülle ayırarak parantez içinde vermelisiniz. Ayrıca tüm fonksiyonlara bir değer atanmadığını da bilmelisiniz. Eğer fonksiyon tipi void ise, o zaman herhangi bir değer taşımaz ve bazı işlemleri gerçekleştirmeye veya bazı değişkenleri hesaplamaya yöneliktir. İkinci durumda, bu fonksiyonun sonuçlarını kullanabilmek için bu değişkenlerin isimlerini bilmeniz gerekir.

 
Link_x :

if(GetTypeLastClosePos == OP_BUY)

Derleyici bu satırda değişkenin bildirilmediği hatası verecektir.

en azından buna ihtiyacın var:

if(GetTypeLastClosePos() == OP_BUY)
 
artmedia70 :

2. nokta için bir örnek:

Burada daha az gereksiz şey var



Aptal soru için özür dilerim ama son kapatılan siparişi bulmak için neden tüm geçmişi kürekle atıyorsun? İlkini sondan bulduk ve anladığım kadarıyla hemen ayrıldık.
 
Roger :


Aptal soru için özür dilerim ama son kapatılan siparişi bulmak için neden tüm geçmişi kürekle atıyorsun? İlkini sondan bulduk ve anladığım kadarıyla hemen ayrıldık.
Bir şekilde, geçmiş, kullanıcının sıraladığı biçimde depolandığında, burada sorunla ilgili bir tartışma vardı. Dolayısıyla (güvenilirlik için) ve arama tam da budur.
 
artmedia70 :
Bir şekilde, geçmiş, kullanıcının sıraladığı biçimde depolandığında, burada sorunla ilgili bir tartışma vardı. Dolayısıyla (güvenilirlik için) ve arama tam da budur.

Kullanıcı geçmişi sadece görsel algılama için sıralayabilir, geçmişteki konum numarası değiştirilemez.
 
Roger :
Kullanıcı geçmişi sadece görsel algılama için sıralayabilir, geçmişteki konum numarası değiştirilemez.

Bu iyi. Ama burada bir zamanlar farklıydı. Şimdi forumda bilgi aramak için tırmanmayacağım - uzun zaman önceydi. Bu yüzden kendime sordum, ya bu tekrar olursa? Yanlış sonuç almaktansa siparişleri gözden geçirmek daha iyidir.
 
Roger :
Kullanıcı geçmişi sadece görsel algılama için sıralayabilir, geçmişteki konum numarası değiştirilemez.

Aslında, yalnızca test cihazında gerçekten bir büyüklük sırasını umabilirsiniz.
 
TheXpert :
Aslında, yalnızca test cihazında gerçekten bir büyüklük sırasını umabilirsiniz.


Fark etmedim ama tamam, tartışmayacağım. 10-20 derinlik yapın, yeterli olacaktır. Ama bütün hikaye ... Bu, bence, çok fazla.