KimIV'ten faydalı özellikler - sayfa 19

 

GetProfitOpenPosInCurrency() işlevi.

Bu fonksiyon, halihazırda açık olan pozisyonların toplam kârını döndürür. Kar, mevduat para birimi cinsinden iade edilir. 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.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в валюте депозита |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetProfitOpenPosInCurrency ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   double p = 0 ;
   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 == "" ) && ( op < 0 || OrderType () == op )) {
         if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
           if ( mn < 0 || OrderMagicNumber () == mn ) {
             p += OrderProfit () + OrderCommission () + OrderSwap () ;
           }
         }
       }
     }
   }
   return ( p ) ;
}
not. GetProfitOpenPosInCurrency() işlevini test etmek için bir komut dosyası ektedir.
 
KimIV :
akrep :

kodda hata yaptı, 131 değil 130

Apaçık...

Bu şekilde normalleştirmeyi deneyin:

 int dg = MarketInfo ( Symbol () , MODE_DIGITS ) ;
return ( NormalizeDouble ( Value , dg )) ;
Bunu yapıyorum ve 130 hatasıyla karşılaşmıyorum.

Bu nedenle fiyatı teklif ediyorum, sadece Digits kullanıyorum . Ancak bu yardımcı olmuyor, sadece hata her zaman ortaya çıkmıyor, yalnızca bağlı olduğu ve izlenmediği bazı durumlarda. Muhtemelen robotun ayarlamaya çalıştığı değerlere manuel olarak bakmanız gerekecektir.

 

Gelecekteki olası ilerlemenin ışığında, bu ekleme kullanışlı olacaktır:

 p += OrderProfit () + OrderTaxes () + OrderCommission () + OrderSwap () ;
// !!! OrdertTaxes() мифический парамер налогов !!!
Bakalım ilk beşe girecek mi...? ;)))

Verilerin bir döngüde nasıl toplanacağına dair ipucu için tekrar teşekkürler !

 

Yo-MoYo , şaka mı yapıyorsun? Derleyicim OrderTaxes() işlevini anlamıyor.

 

Kesinlikle!!! :)))

Bu, arka ışıkta görülebilir ve yorumda açıkça belirtildi ...

Her ne kadar bu bir düzenin özelliklerinden biri veya daha doğrusu bir konum ve prensipte böyle bir işlev olmalıdır.

-

Peki, derleyicinin anlamadığı şey ...

yani GNI öğretecek;)

 

GetProfitOpenPosInPoint() işlevi.

Bu fonksiyon, halihazırda açık olan pozisyonların toplam kârını döndürür. Kar puan olarak iade edilir. 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.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в пунктах         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetProfitOpenPosInPoint ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   double p ;
   int      i , k = OrdersTotal () , pr = 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 ( mn < 0 || OrderMagicNumber () == mn ) {
           p = MarketInfo ( OrderSymbol () , MODE_POINT ) ;
           if ( p == 0 ) if ( StringFind ( OrderSymbol () , " JPY " ) < 0 ) p = 0.0001 ; else p = 0.01 ;
           if ( OrderType () == OP_BUY ) {
             pr += ( MarketInfo ( OrderSymbol () , MODE_BID ) - OrderOpenPrice ()) / p ;
           }
           if ( OrderType () == OP_SELL ) {
             pr += ( OrderOpenPrice () - MarketInfo ( OrderSymbol () , MODE_ASK )) / p ;
           }
         }
       }
     }
   }
   return ( pr ) ;
}
not. GetProfitOpenPosInPoint() işlevini test etmek için bir komut dosyası ektedir.
 
KimIV :

Bu başlıkta fonksiyonlarımın kodlarını MQL4 programlama dilinde yayınlayacağım, kullanımlarına örnekler vereceğim ve kullanımları ile ilgili soruları cevaplayacağım. Her işlevi iki gönderide yayınlayacağım. İlk gönderide fonksiyon kodu, ikinci gönderide kullanım örnekleri ve küçük açıklamalar. Görüntülenen sonuçlarla işlevin gerçek testi için bazen komut dosyasını ikinci gönderiye ekleyeceğim.

Sondaki " Aynı anda iki Uzman Danışman nasıl çalıştırılır " konusunda Lukyanov'un isteği üzerine siparişlerle çalışmak üzere tasarlanmış işlevlerle başlayacağım.

Sıra ayar fonksiyonunun ilki olmasına izin verin (MT4 test cihazı versiyonu):

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Установка ордера. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder ( string sy , int op , double ll , double pp ,
              double sl = 0 , double tp = 0 , int mn = 0 , datetime ex = 0 ) {
  color clOpen ;
  int   err , ticket ;
 
  if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
  if ( op == OP_BUYLIMIT || op == OP_BUYSTOP ) clOpen = clOpenBuy ; else clOpen = clOpenSell ;
  ticket = OrderSend ( sy , op , ll , pp , Slippage , sl , tp , "" , mn , ex , clOpen ) ;
  if ( ticket < 0 ) {
    err = GetLastError () ;
    Print ( " Error( " , err , " ) set " , GetNameOP ( op ) , " : " , ErrorDescription ( err )) ;
    Print ( " Ask= " , Ask , " Bid= " , Bid , " sy= " , sy , " ll= " , ll ,
          " pp= " , pp , " sl= " , sl , " tp= " , tp , " mn= " , mn ) ;
  }
}
//+----------------------------------------------------------------------------+

Merhaba, lütfen bir danışman yazmama yardım edin. Bu konuda patlama yapmıyorum, ama bence bu iyi bir fikir. Fikrin anlamı, elbette mümkünse şu şekildedir.
Aynı anda iki kur açılmalıdır, biri Parametreli Bir Sat Bir Al (lot=0.1____TafeKar=30______DurKayb=10) ve kârsız olan kapatıldığında, parametreli ikinci pozitif (lot=1____TafeKar=30______DurKayb=10) olmalıdır. açıldı
Ve sen, arkadaşım, beni hemen becer ... beni gönderme, o zaman ideal olarak, ilk iki bahis minimumda veya maksimumda veya yeni bir mum göründüğünde açılır, ancak ikincisini yazarsanız uzun bir süre ayrıl, en azından saçmalığımın ilk kısmını yap

Şimdiden çok teşekkür ederim !!!! Yazarsanız buraya bırakın vms.80@mail.ru



 

GetTicketLastPos() işlevi.

Bu işlev, son açık pozisyonun biletini veya -1'i 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.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тикет последней открытой позиции или -1             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTicketLastPos ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   datetime o ;
   int        i , k = OrdersTotal () , r =- 1 ;

   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 ) {
               if ( o < OrderOpenTime ()) {
                 o = OrderOpenTime () ;
                 r = OrderTicket () ;
               }
             }
           }
         }
       }
     }
   }
   return ( r ) ;
}
not. GetTicketLastPos() işlevini test etmek için bir komut dosyası ektedir.
Dosyalar:
 
WoodyVMS :

Merhaba, lütfen bir danışman yazmama yardım edin. Bu konuda patlama yapmıyorum, ama bence bu iyi bir fikir. Fikrin anlamı, elbette mümkünse şu şekildedir.
Aynı anda iki kur açılmalıdır, biri Parametreli Bir Sat Bir Al (lot=0.1____TafeKar=30______DurKayb=10) ve kârsız olan kapatıldığında, parametreli ikinci pozitif (lot=1____TafeKar=30______DurKayb=10) olmalıdır. açıldı
Ve sen, arkadaşım, beni hemen becer ... beni gönderme, o zaman ideal olarak, ilk iki bahis minimumda veya maksimumda veya yeni bir mum göründüğünde açılır, ancak ikincisini yazarsanız uzun bir süre ayrıl, en azından saçmalığımın ilk kısmını yap

Şimdiden çok teşekkür ederim !!!! Yazarsanız buraya bırakın vms.80@mail.ru

Veya CodeBase'den tüm Expert Advisor'ları bu adrese bir arkadaşına gönderebilir.

Üzgünüm Igor, bu konu dışı. Eğer öyleyse silerim.

 
Vinin писал (а):
Veya CodeBase'den tüm Expert Advisor'ları bu adrese bir arkadaşına gönderebilir.
O bulacak...
Neden: