KimIV'ten faydalı özellikler - sayfa 63

 
KimIV >> :

değildi ... yazdı ...

ClosePosBySortLots() işlevi.

Bu fonksiyon, pozisyonları lot büyüklüğüne göre sıralama düzeninde kapatır. Yani bu fonksiyonu kullanarak parti büyüklüğünün artan veya azalan sırasına göre pozisyonları kapatabilirsiniz. ClosePosBySortLots() işlevi, aşağıdaki isteğe bağlı parametreleri kabul eder:

  • sy - İşlem aracının adı. "" - herhangi bir enstrüman, NULL - geçerli enstrüman. Varsayılan değer "" dir.
  • op - Ticaret işlemi türü. Geçerli değerler -1 - herhangi bir pozisyon, OP_BUY - satın alır, OP_SELL - satar. Varsayılan değer -1'dir.
  • mn - MagicNumber, bir ticaret işleminin benzersiz tanımlayıcısı. Varsayılan değer -1 - herhangi bir büyü.
  • sd - Parti büyüklüğü sıralama yönü. MODE_ASCEND için geçerli değerler artıyor, MODE_DESCEND azalıyor. Varsayılan değer MODE_DESCEND'dir.

not. Ekli, ClosePosBySortLots() işlevini test etmek için bir komut dosyasıdır.

Çok teşekkürler İgor. Senin için dua edeceğim :-)

 

özel

rsi

Örnekler için teşekkürler!

Zor değilse şunu deşifre edin:

var = Close [ 0 ]
Neyle yenir?
 

uh... burada dur... üzgünüm... sil... yaratma her zaman açığız!

ve ekteki dosyadan işlevin referansını alın ...

Dosyalar:
f_kimiv.rar  12 kb
 
WroC писал(а) >>

Zor değilse şunu deşifre edin:

var = Kapat [ 0 ]

Neyle yenir?

var adlı değişkene, mevcut çubuğun (sıfır sayı) kapanış fiyat seviyesinin değeri atanır. Ancak mevcut çubuğun oluşumu henüz bitmediği için Kapat[0] , Bid ile aynıdır, yani mevcut fiyat.

 

KimIV


Ve her şeyi bir şekilde marketinfo aracılığıyla denedim, daha da kolay olduğu ortaya çıktı ....

 
if ( ExistPositions ( NULL , OP_BUY , Magic ) ) {
 po = PriceOpenLastPos ( NULL , OP_BUY , Magic ) ;
 if ( ! ExistOrders ( NULL , OP_SELLSTOP , Magic + 1 )
 & & ! ExistPositions ( NULL , OP_SELL , Magic + 1 ) ) {
 pp = po - offSet * Point ;
 if ( StopLoss > 0 ) sl = pp + StopLoss * Point ; else sl = 0 ;
 if ( TakeProfit > 0 ) tp = pp - TakeProfit * Point ; else tp = 0 ;
 SetOrder ( NULL , OP_SELLSTOP , ll , pp , sl , tp , Magic + 3 ) ;

Güzel gün.
Igor, kilitleme taktiklerini uygulamak için bir işlevin var mı?
45. sayfada bunun için kullanılabilecek bir örnek vermişsiniz.

Ancak bu yaklaşım, açık siparişlerin sayısını 1 ile sınırlar.
Durumu bir örnek üzerinde ele alırsak, o zaman şöyle görünecektir.
LockStep=20 açık konumdan
KilitDur Kaybı=10
1500 - Buy\1480'i aç - sellstop'u aç

1470 - satın al\1450'yi aç - satış durdurucuyu aç

1460 - sellstop 1450'yi kapat\ sellstop 1450'yi aç
1490 - sellstop'u kapat 1480\ sellstop'u aç 1450
verilen fonksiyona göre iki sellstop 1450 siparişi açılacak

PS Çalışmanız için çok teşekkür ederim. Aslında çok fazla bilgi var ve çok yardımcı oluyor, çoğunu hizmete aldım.



 
demsan писал(а) >>
Igor, kilitleme taktiklerini uygulamak için bir işlevin var mı?

Hayır öyle bir özellik yok. Bu yüzden mevcut olanlardan birleştirmeniz ve belki kendinize ait bir şeyler eklemeniz gerekecek. Böyle bir paket düzenlemenizi tavsiye ederim: bir Buy/SellStop çifti - bir sihir. Bir sonraki çift, bir sonraki sihirbaz vb.

 

StringLower() işlevi.

Bu işlev, bir dizeyi küçük harfe dönüştürür. Tüm BÜYÜK (büyük) karakterler küçük harf (küçük) olur. StringLower() işlevi, giriş dizesi olan yalnızca bir gerekli parametreyi alır.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в нижнем регистре                            |
//+----------------------------------------------------------------------------+
string StringLower ( string s ) {
   int c , i , k = StringLen ( s ) , n ;
   for ( i = 0 ; i < k ; i + + ) {
    n = 0 ;
    c = StringGetChar ( s , i ) ;
     if ( c > 64 & & c < 91 ) n = c + 32 ;      // A-Z -> a-z
     if ( c > 191 & & c < 224 ) n = c + 32 ;    // А-Я -> а-я
     if ( c = = 168 ) n = 184 ;              //  Ё  ->  ё
     if ( n > 0 ) s = StringSetChar ( s , i , n ) ;
   }
   return ( s ) ;
}

not. Ekli, StringLower() işlevini test etmek için bir komut dosyasıdır.

Dosyalar:
 

StringUpper() işlevi.

Bu işlev, bir dizeyi BÜYÜK harfe dönüştürür. Tüm küçük (küçük) karakterler BÜYÜK (büyük) olur. StringUpper() işlevi, giriş dizesi olan yalnızca bir gerekli parametreyi alır.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в ВЕРХНЕМ регистре                           |
//+----------------------------------------------------------------------------+
string StringUpper ( string s ) {
   int c , i , k = StringLen ( s ) , n ;
   for ( i = 0 ; i < k ; i + + ) {
    n = 0 ;
    c = StringGetChar ( s , i ) ;
     if ( c > 96 & & c < 123 ) n = c - 32 ;      // a-z -> A-Z
     if ( c > 223 & & c < 256 ) n = c - 32 ;    // а-я -> А-Я
     if ( c = = 184 ) n = 168 ;              //  ё  ->  Ё
     if ( n > 0 ) s = StringSetChar ( s , i , n ) ;
   }
   return ( s ) ;
}

not. Ekli, StringUpper() işlevini test etmek için bir komut dosyasıdır.

Dosyalar:
 

StringToArrayDouble() işlevi.

Bu işlev, dizeyi oluşturan gerçek sayılara böler ve her sayı diziye ayrı bir öğe olarak eklenir. Dizede kaç gerçek sayı olacak, diziye aynı sayıda eleman eklenecektir. Noktalı virgül, ayırıcı olarak tanınır. StringToArrayDouble() işlevi, dizi öğelerinin sayısını döndürür ve aşağıdaki zorunlu parametreleri alır:

  • st - Noktalı virgülle ayrılmış gerçek sayılar dizisi.
  • ad - Bir dizi gerçek sayı.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.10.2008                                                     |
//|  Описание : Перенос вещественных чисел из строки в массив                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    st - строка вещественных чисел через точку с запятой                    |
//|    ad - массив вещественных чисел                                          |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//+----------------------------------------------------------------------------+
int StringToArrayDouble ( string st , double & ad [ ] ) {
   int     i = 0 , np ;
   string stp ;

   ArrayResize ( ad , 0 ) ;
   while ( StringLen ( st ) > 0 ) {
    np = StringFind ( st , ";" ) ;
     if ( np < 0 ) {
      stp = st ;
      st = "" ;
     } else {
      stp = StringSubstr ( st , 0 , np ) ;
      st = StringSubstr ( st , np + 1 ) ;
     }
    i + + ;
     ArrayResize ( ad , i ) ;
    ad [ i - 1 ] = StrToDouble ( stp ) ;
   }
   return ( ArraySize ( ad ) ) ;
}

not. Ekli, StringToArrayDouble() işlevini test etmek için bir komut dosyasıdır.

Dosyalar: