KimIV'ten faydalı özellikler - sayfa 107

 
143alex :

(satın almaya hazır)))) aynı ancak Excel ile çalışmak için var mı?

hayır, hayır...)))

 

GetPotentialLossInCurrency() işlevi, mevduat para biriminde açık pozisyonların toplam potansiyel kaybını döndürür. Hesaplama, pozisyon açılış fiyatına ve StopLoss fiyat seviyesine dayalıdır. StopLoss herhangi bir pozisyon için ayarlanmamışsa, fonksiyon, işlem hesabı bakiyesinin mevcut boyutunu döndürür.

GetPotentialLossInCurrency() işlevi aşağıdaki parametreleri alır:

  • sy - Enstrümanın adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın pozisyonlarını kontrol edecektir. NULL , geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • operasyon - Ticaret işlemi , pozisyon türü. Geçerli değerler: OP_BUY , OP_SELL veya -1 . Varsayılan değer -1 , herhangi bir konum anlamına gelir.
  • milyon - Konum Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.02.2012                                                     |
//|  Описание : Возвращает суммарный потенциальный убыток                      |
//|             открытых позиций в валюте депозита.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetPotentialLossInCurrency( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double pl= 0 ;
   double po, tv;                   // Пункт, спрэд и стоимость пункта
   int     i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (mn< 0 || OrderMagicNumber ()==mn)) {
         if (( OrderType ()==OP_BUY || OrderType ()==OP_SELL) && (op< 0 || OrderType ()==op)) {
           if ( OrderStopLoss ()> 0 ) {
            po= MarketInfo ( OrderSymbol (), MODE_POINT);
             if (po== 0 ) Message( "В обзоре рынка отсутствует символ " + OrderSymbol ()+ ". Точность расчётов не гарантируется!" );
             else {
              tv= MarketInfo ( OrderSymbol (), MODE_TICKVALUE);
               if ( OrderType ()==OP_BUY) {
                pl+=( OrderOpenPrice ()- OrderStopLoss ())/po* OrderLots ()*tv;
              }
               if ( OrderType ()==OP_SELL) {
                pl+=( OrderStopLoss ()- OrderOpenPrice ())/po* OrderLots ()*tv;
              }
              pl+= OrderCommission ()+ OrderSwap ();
            }
          } else {
            pl= AccountBalance ();
             break ;
          }
        }
      }
    }
  }
   return (pl);
}

GetPotentialLossInCurrency() işlevinin çalışmasını test etmek için bir komut dosyası ektedir.

 

Merhaba Igor. Bir dizi çok kullanışlı özellik için sizi kutluyorum.

Senden yardım isteyebilir miyim... Kısmi dolap gibi bir şey yapmak istiyorum. Ama hala nasıl organize edeceğimi bilmiyorum. Fikir şöyle bir şey:

4 - diyelim ki -200$ -175$ -150$ ve -25$ sipariş var ve toplamda +400$ olmak üzere 5+ sipariş var

400 > -200+-175 ancak -200+-175+-150'den az ise, 5 artı ve eksi siparişleri kapatın -200 -175, yani büyükten küçüğe kayıplı 2 sipariş.

örnek kaba tabiki ama ben bu fikri aktardığımı düşünüyorum...

İlk sorun, başlangıç için onları bir şekilde bir yere yazacak olmam. (Array'de henüz gerçekten anlamıyorum) veya başka bir seçenek bulun.

İkinci sorun ilkinden sonra gelir. Diyelim ki 4 siparişten moose ile los [ x ] aldık ... drive moose( los [ x ]) diyelim ki fiyata göre kene arayacak veya geyiği sıralarken 1y yazacak şekilde bir şey yapacak bir modüle diyelim ( los [ fiyat ]) 2. ( los 2 [ bilet ])?

Belki de bilmediğim şeyleri seçip öğretebileceğin yere burnunu sokacaksın =)

 

Muhtemelen, her tüccar er ya da geç depozito boşaltılmadan önce kalan puan sayısını hesaplamaya başlar. Hesaplar basit: parayı alıyoruz, piyasadaki lot sayısına, bir puanın maliyetine bölüyoruz ve ilgilendiğimiz cevabı alıyoruz. Aşağıdaki parametreleri alan yeni ReserveDepositInPoint() işlevimin yaptığı tam olarak budur:

  • sy - Aracın adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın pozisyonlarını kontrol edecektir. NULL , geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • operasyon - Ticaret işlemi, pozisyon türü. Geçerli değerler: OP_BUY , OP_SELL veya -1 . Varsayılan değer -1 , herhangi bir konum anlamına gelir.
  • milyon - Konum Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.

ReserveDepositInPoint() işlevi karşıt pozisyonları doğru bir şekilde işler, yani Al ve Sat lotları arasındaki farkı hesaplar ve bu farkı hesaplamalarda kullanır. Hesaplama özkaynağa dayalıdır, yani stopout'un %100 olduğu varsayılır. Swap, vergi ve komisyonlar dikkate alınmaz.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.02.2012                                                     |
//|  Описание : Возвращает запас депозита в пунктах.                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int ReserveDepositInPoint( string sy= "" , int op=- 1 , int mn=- 1 ) {
   int     i, k= OrdersTotal ();       // Номера позиций
   int     n, r;                     // Номер символа в массиве, запас депозита в пунктах
   double ol[], tv;                 // Массив лотов, стоимость пункта
   string os[];                     // Массив символов

   if (sy== "0" ) sy= Symbol ();
   ArrayResize (os, 0 );
   ArrayResize (ol, 0 );

   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (mn< 0 || OrderMagicNumber ()==mn)) {
        n=ArraySearchString(os, OrderSymbol ());
         if (n< 0 ) {
          n= ArraySize (os);
           ArrayResize (os, n+ 1 );
           ArrayResize (ol, n+ 1 );
        }
        os[n]= OrderSymbol ();
         if ((op< 0 || OrderType ()==op) && ( OrderType ()==OP_BUY || OrderType ()==OP_SELL)) {
           if ( OrderType ()==OP_BUY ) ol[n]+= OrderLots ();
           if ( OrderType ()==OP_SELL) ol[n]-= OrderLots ();
        }
      }
    }
  }

  n= ArraySize (os);
   for (i= 0 ; i<n; i++) {
    tv= MarketInfo (os[i], MODE_TICKVALUE);
     if (tv== 0 ) Message( "В обзоре рынка отсутствует символ " +os[i]+ ". Точность расчётов не гарантируется!" );
     else {
       if (ol[i]!= 0 ) {
        ol[i]= MathAbs (ol[i]);
        r+= AccountEquity ()/tv/ol[i];
      }
    }
  }
   if (n> 1 ) r/=n*n;

   return (r);
}

Ekli, ReserveDepositInPoint() işlevinin çalışmasını kontrol etmek için bir Uzman Danışmandır .

Dosyalar:
 

SetFibo() işlevi.

Bu fonksiyon, geçerli çizelgede nesne OBJ_FIBO Fibonacci seviyelerini ayarlar.

  • cl - Fibonacci Düzeyleri nesnesi için bir renk dizisi. Gerekli parametre. İki element. Birincisi nesnenin rengini, ikincisi ise seviye çizgilerinin rengini ayarlar.
  • st - Bir dizi nesne stili Fibonacci seviyeleri . Gerekli parametre. İki element. Birincisi nesnenin stilini, ikincisi ise seviye çizgilerinin stilini belirler.
  • wd - Nesne genişlikleri dizisi Fibonacci seviyeleri . Gerekli parametre. İki element. Birincisi nesnenin genişliğini, ikincisi ise seviye çizgilerinin genişliklerini ayarlar.
  • fl - Bir dizi Fibonacci seviyesi. Gerekli parametre.
  • nm - Nesnenin adı. Varsayılan değeri - "" geçerken ad olarak mevcut çubuğun açılış zamanı kullanılır.
  • t1 - Nesnenin kurulum süresinin ilk koordinatı. Varsayılan değer 0 - onuncu çubuğun açılma zamanı.
  • p1 - Nesnenin kurulum fiyatının ilk koordinatı. Varsayılan değer 0 - onuncu çubuk düşük.
  • t2 - Nesnenin kurulum süresinin ikinci koordinatı. Varsayılan değer 0'dır - mevcut çubuğun açılma zamanı.
  • p2 - Nesnenin kurulum fiyatının ikinci koordinatı. Varsayılan değer 0 - mevcut çubuğun en düşük değeridir.
  • ry - RAY özelliğini işaretler. Varsayılan değer False'dır .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.03.2012                                                     |
//|  Описание : Установка объекта OBJ_FIBO Уровни Фибоначчи.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - массив цветов линий                                                |
//|    st - массив стилей линий                                                |
//|    wd - массив ширин линий                                                 |
//|    fl - массив уровней Фибоначчи                                           |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - не луч)                        |
//+----------------------------------------------------------------------------+
void SetFibo( color & cl[], int & st[], int & wd[], double & fl[], string nm= "" ,
             datetime t1= 0 , double p1= 0 , datetime t2= 0 , double p2= 0 ,
             bool ry=False) {
   if (nm== "" ) nm= DoubleToStr (Time[ 0 ], 0 );
   if (t1<= 0 ) t1=Time[ 10 ];
   if (p1<= 0 ) p1=Low[ 10 ];
   if (t2<= 0 ) t2=Time[ 0 ];
   if (p2<= 0 ) p2=Bid;

   int i, k= ArraySize (fl);

   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_FIBO , 0 , 0 , 0 , 0 , 0 );
   ObjectSet (nm, OBJPROP_TIME1     , t1);
   ObjectSet (nm, OBJPROP_PRICE1    , p1);
   ObjectSet (nm, OBJPROP_TIME2     , t2);
   ObjectSet (nm, OBJPROP_PRICE2    , p2);
   ObjectSet (nm, OBJPROP_COLOR      , cl[ 0 ]);
   ObjectSet (nm, OBJPROP_RAY       , ry);
   ObjectSet (nm, OBJPROP_STYLE      , st[ 0 ]);
   ObjectSet (nm, OBJPROP_WIDTH      , wd[ 0 ]);
   ObjectSet (nm, OBJPROP_LEVELCOLOR , cl[ 1 ]);
   ObjectSet (nm, OBJPROP_LEVELSTYLE , st[ 1 ]);
   ObjectSet (nm, OBJPROP_LEVELWIDTH , wd[ 1 ]);
   if (k> 0 ) {
     ObjectSet (nm, OBJPROP_FIBOLEVELS, k);
     for (i= 0 ; i<k; i++) {
       ObjectSet (nm, OBJPROP_FIRSTLEVEL+i, fl[i]);
       ObjectSetFiboDescription (nm, i, DoubleToStr ( 100 *fl[i], 1 ));
    }
  }
}
Ekli, SetFibo() işlevini test etmek için bir komut dosyasıdır.
Dosyalar:
 

GetLastThreeExtremumZZ() işlevi.

Son üç ZigZag ekstremumunu arar ve değerlerini döndürür: çubuk sayısı ve her ekstremum için fiyat seviyesi. Tüm bu veriler, işlev parametresi olarak iletilen iki boyutlu bir diziye sığar. İşte fonksiyon parametrelerinin listesi:

  • zz - İki boyutlu ZigZag değerleri dizisi. İlk sütuna çubuk sayıları, ikinci sütuna fiyat değerleri eklenir. Dizinin boyutu zz[3,2] olmalıdır.
  • sy - Araç adı. "" veya NULL geçerli karakterdir. Varsayılan değer NULL'dur .
  • tf - Zaman çerçevesi. Varsayılan değer 0 , geçerli karakterdir.
  • dp , video _ bs - ZigZaga parametreleri: ExtDepth, ExtDeviation, ExtBackstep.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.03.2012                                                     |
//|  Описание : Возвращает последние три экстремума ЗигЗага.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    zz - двумерный массив значений ЗигЗага                                  |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
bool GetLastThreeExtremumZZ( double & zz[][], string sy= "" , int tf= 0 , int dp= 12 , int dv= 5 , int bs= 3 ) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double z;
   int i, k= iBars (sy, tf), ke= 0 ;
   ArrayInitialize (zz, 0 );

   for (i= 0 ; i<k; i++) {
    z= iCustom (sy, tf, "ZigZag" , dp, dv, bs, 0 , i);
     if (z!= 0 ) {
      zz[ke][ 0 ]=i;
      zz[ke][ 1 ]=NormalizePrice(z, sy);
      ke++;
       if (ke> 3 ) return (True);
    }
  }
   Print ( "GetLastThreeExtremumZZ(): Недостаточно баров!" );
   return (False);
}

GetLastThreeExtremumZZ() işlevini test etmek için bir komut dosyası ektedir.

 

NumberOfOrdersByPrice() işlevi.

Verilen fiyat düzeyinde verilen siparişlerin sayısını verir. Kontrol edilen siparişlerin listesini fonksiyon parametreleriyle sınırlayabilirsiniz:

  • sy - Piyasa aracının adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın siparişlerini kontrol edecektir. NULL , geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - İşlem tipi, bekleyen emir tipi. Geçerli değerler OP_BUYLIMIT , OP_BUYSTOP , OP_SELLLIMIT , OP_SELLSTOP veya -1'dir . Varsayılan değer -1 , herhangi bir sipariş türü anlamına gelir.
  • mn - Sipariş Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
  • pp - Sipariş vermek için fiyat seviyesi. Varsayılan değer -1 - herhangi bir fiyattır.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.03.2012                                                     |
//|  Описание : Возвращает количество ордеров, установленных по заданной цене. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pp - цена                       (-1   - любая цена)                     |
//+----------------------------------------------------------------------------+
int NumberOfOrdersByPrice( string sy= "" , int op=- 1 , int mn=- 1 , double pp=- 1 ) {
   int d, i, k= OrdersTotal (), ko= 0 ;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
         if ( OrderType ()> 1 && OrderType ()< 6 ) {
          d= MarketInfo ( OrderSymbol (), MODE_DIGITS);
          pp= NormalizeDouble (pp, d);
           if (pp< 0 || pp== NormalizeDouble ( OrderOpenPrice (), d)) {
             if (mn< 0 || OrderMagicNumber ()==mn) ko++;
          }
        }
      }
    }
  }
   return (ko);
}

 

NumberOfLastLossPosFromDate() işlevi.

Bu işlev, belirli bir tarihten sonra kapatılan son kârsız pozisyon serisini (sıradaki sayı) döndürür. Dikkate alınacak pozisyonların daha doğru seçimi harici parametreler tarafından belirlenir:

  • sy - Piyasa aracının adı. Bu parametreyi ayarlarsanız, işlev yalnızca belirtilen takımın konumlarını dikkate alacaktır. Varsayılan değer "" herhangi bir piyasa aracı anlamına gelir. NULL , geçerli enstrüman anlamına gelir.
  • op - Ticaret işlemi, pozisyon türü. Geçerli değerler: OP_BUY , OP_SELL veya -1 . Varsayılan değer -1 , herhangi bir konum anlamına gelir.
  • mn - Konum Kimliği, MagicNumber. Varsayılan değer -1 , herhangi bir tanımlayıcı anlamına gelir.
  • dt - 1970'den bu yana saniye cinsinden tarih ve saat. Varsayılan değer - 0 , geçmişte mevcut olan tüm pozisyonların dikkate alınması anlamına gelir.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 14.03.2012                                                     |
//|  Описание : Возвращает последнюю серию убыточных позиций                   |
//|             (количество подряд), закрытых с определённой даты.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
int NumberOfLastLossPosFromDate( string sy= "" , int op=- 1 , int mn=- 1 , datetime dt= 0 ) {
   int i, k= OrdersHistoryTotal (), kp= 0 ;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
         if ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber ()==mn) {
             if (dt< OrderCloseTime ()) {
               if ( OrderProfit ()< 0 ) kp++; else kp= 0 ;
            }
          }
        }
      }
    }
  }
   return (kp);
}

 

ClosePosExceptTicket() işlevi.

Bu fonksiyon, bilet gönderilmiş olan hariç tüm pozisyonları piyasa fiyatından kapatır. Daha doğru bir kapalı pozisyon seçimi, harici parametreler tarafından belirlenir:

  • sy - Araç adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın pozisyonlarını kontrol edecektir. NULL , geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - Ticaret işlemi, pozisyon türü. Geçerli değerler: OP_BUY , OP_SELL veya -1 . Varsayılan değer -1 , herhangi bir konum anlamına gelir.
  • mn - Konum Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
  • ti - Konum bileti. Varsayılan değer 0 - herhangi bir bilet.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 20.03.2009                                                     |
//|  Описание : Закрытие позиций по рыночной цене за исключением одной,        |
//|           :  с переданным тикетом.                                         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ti - тикет позиции              ( 0   - любой тикет)                    |
//+----------------------------------------------------------------------------+
void ClosePosExceptTicket( string sy= "" , int op=- 1 , int mn=- 1 , int ti= 0 ) {
   int i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i=k- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
         if ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber ()==mn) {
             if (ti== 0 || ti!= OrderTicket ()) ClosePosBySelect();
          }
        }
      }
    }
  }
}

 

GetChangeBalance() işlevi.

Parametre olarak geçirilen belirli bir tarihten itibaren işlem dışı (para yatırma, çekme, iç transferler, faiz tahakkukları, ikramiyeler) bakiye değişimini döndürür.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2010                                                     |
//|  Описание : Возвращает неторговое изменение баланса с определённой даты    |
//|             (пополнения, снятия, внутренние переводы).                     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    dt - Дата и время в секундах с 1970 года  (0 - с начала истории)        |
//+----------------------------------------------------------------------------+
double GetChangeBalance( datetime dt= 0 )
{
   double p= 0 ;
   int     i, k= OrdersHistoryTotal ();

   for (i= 0 ; i<k; i++) {
     if ( OrderType ()== 6 ) {
       if (dt< OrderCloseTime ()) p+= OrderProfit ();
    }
  }
   return (p);
}