Yalnızca "KimIV'ten Faydalı özellikler".

 

Tüm işlevler bu konudan alınmıştır - h ttp://forum.mql4.com/ru/11287 , dizi her işlevin ayrıntılı bir açıklamasını ve kullanım örneklerini içerir

İçerik

 Sayfa #1 SetOrder - Sipariş ayarı. Geri testler için işlev sürümü. ExistOrders - Emirlerin varlığının bayrağını döndürür ExistPositions - Pozisyonların varlığının bayrağını döndürür OpenPosition - Bir pozisyon açma. Geri testler için işlev sürümü. OpenPosition - Bir pozisyon açar ve biletini döndürür. Çevrimiçi için. Mesaj - Yorumlarda ve günlükte bir mesaj görüntüleme GetNameTF - Zaman çerçevesinin adını döndürür GetNameOP - Alım satım işleminin adını döndürür ModifyOrder - Önceden seçilmiş bir emrin değiştirilmesi. DeleteOrders - Siparişleri sil. Geri testler için işlev sürümü. Siparişleri Sil - Siparişleri silin . Çevrimiçi için. FindNearFractal - En yakın fraktal için arama ExistOrdersByLot - Parti boyutuna göre bir siparişin varlığının bayrağını döndürür. GetLotLastOrder - Son verilen siparişin lot boyutunu veya -1 GetOrderOpenPrice - Son siparişin fiyatını veya 0'ı döndürür. IndexByTicket - Biletteki siparişin veya pozisyonun indeksini döndürür
Sayfa 2
NumberOfOrders - Siparişlerin sayısını döndürür.

ClosePosBySelect - Önceden seçilmiş bir pozisyonu kapatır.

ClosePosBySizeProfitInCurrency - Mevduat para biriminde belirli bir değerde kârı olan pozisyonları kapatın

ClosePosBySizeLossInCurrency - Mevduat para birimindeki kaybı belirli bir değeri aşan pozisyonları kapatmak

ClosePositions - Pozisyonları piyasa fiyatından kapatın

ClosePosFirstProfit - İlk kârlı piyasa fiyatından pozisyonları kapatmak

ClosePosWithMaxProfitInCurrency - Mevduat para biriminde maksimum pozitif kârla bir pozisyonu kapatın

DistMarketAndPos- Pazar ve en yakın konum arasındaki nokta cinsinden mesafeyi verir

ExistOPNearMarket - Piyasaya yakın bir pozisyonun veya siparişin varlığının bayrağını döndürür

ExistPosByPrice - Açık fiyattaki pozisyonların varlığının bayrağını döndürür

GetAmountLotFromOpenPos - Çok sayıda açık pozisyonun miktarını döndürür

Sayfa #3
GetIndexByTicket - Bilete göre siparişin veya pozisyonun indeksini döndürür.

Korelasyon - İki serinin korelasyonunu verir.

GetIndexLastPos - Son açık pozisyonun dizinini döndürür veya -1

GetLotLastPos - Son açık pozisyonun parti boyutunu veya -1'i döndürür

GetMaxLotFromOpenPos - Açık pozisyonlardan maksimum lot boyutunu döndürür

GetMinLotFromOpenPos - Açık pozisyonlardan minimum lot boyutunu döndürür

NumberOfPositions - Konum sayısını döndürür.

GetProfitFromDateInCurrency - Belirli bir tarihten sonra kapatılan pozisyonların mevduat para birimi cinsinden toplam kârını döndürür

GetProfitOpenPosInCurrency - Mevduat para biriminde açık pozisyonların toplam kârını döndürür

GetProfitOpenPosInPoint - Açık pozisyonların toplam kârını puan olarak döndürür

GetTicketLastPos - Son açık pozisyonun biletini döndürür veya -1

Sayfa#4
GetTypeLastClosePos - Son kapatılan pozisyonun türünü döndürür veya -1

GetTypeLastOpenPos - Son açık pozisyonun türünü döndürür veya -1

isCloseLastPosByStop - Durdurarak son pozisyonu kapatmak için bayrağı döndürür

isCloseLastPosByTake - Al ile son pozisyonu kapatmak için bayrağı döndürür.

isLossLastPos - Son pozisyonun kayıp bayrağını döndürür.

isTradeToDay - Bugünün ticaret bayrağını döndürür

NumberOfBarCloseLastPos - Son konumun veya -1'in kapanış çubuğunun numarasını döndürür.

NumberOfBarOpenLastPos - Son pozisyon açık çubuğunun veya -1'in numarasını döndürür.

NumberOfLossPosToday - Bugün kapatılan kaybeden pozisyonların sayısını verir.

PriceCloseLastPos - Son kapatılan pozisyonun kapanış fiyatını verir.


Sayfa #5
PriceOpenLastPos - Son açık pozisyonun açılış fiyatını döndürür.

PriceOpenLastClosePos - Son kapatılan pozisyonun açık fiyatını döndürür.

PriceOpenNearPos - En yakın pozisyonun açık fiyatını döndürür.

TicketNearPos - Piyasaya en yakın pozisyonun biletini açılış fiyatından döndürür.

TypeNearPos - Piyasaya en yakın pozisyon türünü veya -1'i döndürür.

TimeOpenLastPos - Son açık pozisyonun açılış saatini döndürür.

BubbleSort - Bir dizinin öğeleri üzerinde bir baloncuk sıralaması gerçekleştirir.

BarsBetweenLastFractals - Son iki fraktal arasındaki çubuk sayısını döndürür.

SecondsAfterCloseLastPos - Son konum kapatıldıktan sonraki saniye sayısını döndürür.

SecondsAfterOpenLastPos - Son pozisyon açıldıktan sonraki saniye sayısını döndürür.

DeleteOppositeOrders - Ters sıra pozisyonunu sil

ArraySearchDouble - Değere göre dizideki bir öğeyi arar ve bulunan öğenin dizinini döndürür veya -1

ArraySearchInt - Değere göre dizideki bir öğeyi arar ve bulunan öğenin dizinini veya -1'i döndürür.

ArraySearchString - Bir dizi öğesini değere göre arar ve bulunan öğenin dizinini döndürür veya -1

GetLotLastClosePos - Son kapatılan pozisyonun parti boyutunu veya -1'i döndürür

ArrayMax - Bir dizideki maksimum öğenin değerini döndürür.


Sayfa #6
ArrayMin - Bir dizideki minimum öğenin değerini döndürür

GetExtremumZZBar - ZigZag ekstremum çubuğu numarasını kendi numarasına göre döndürür.

ArrayAvg - Dizi öğelerinin aritmetik ortalamasını döndürür.

ArrayAvGeom - Dizi öğelerinin geometrik ortalamasını döndürür.

SetHLine - OBJ_HLINE nesnesini yatay bir çizgiye ayarla
SetVLine - OBJ_VLINE nesnesini dikey bir çizgiye ayarla
SetTLine - OBJ_TREND nesnesini trend çizgisine ayarla

SetTLineByAngle - Eğilim çizgisinin OBJ_TRENDBYANGLE nesnesini açıya göre ayarla

SetArrow - OBJ_ARROW nesnesi olan grafikteki simgeyi ayarlama.

SetLabel - Bir metin etiketi, bir OBJ_LABEL nesnesi ayarlayın.

CrossPointOfLines - İki çizginin kesişme noktasının koordinatlarını hesaplar.Her çizgi, noktalarının bir çift koordinatıyla verilir.

SetRegression - OBJ_REGRESSION nesnesini doğrusal regresyon kanalına ayarlar.

EquationDirect - Düz bir çizginin denklemi. Çizgiyle kesişme noktasında X için Y değerini hesaplar.
GetArrowInterval - Sinyal işaretçilerini ayarlama aralığını döndürür
GetArrowInterval - Sinyal işaretçilerini ayarlama aralığını döndürür
FindNearFractal - En yakın fraktal bulma. Fiyat düzeyini döndürür.
GetExtremumZZBar - ZigZag ekstremum çubuğu numarasını kendi numarasına göre döndürür.
GetExtremumZZPrice - ZigZag ekstremumunu numarasına göre döndürür.

GetFractalBar - Fraktal çubuk numarasını kendi numarasına göre döndürür.

GetNearestDownFractal - En yakın aşağı fraktalın fiyat düzeyini döndürür

GetNearestUpFractal - En yakın yukarı fraktalı döndürür


Sayfa #7
CorrectTF - Zaman çerçevesini desteklenen en yakın MT4'e göre düzeltir.
DateBeginQuarter - Çeyreğin başlangıç tarihini döndürür
DateOfMonday - Pazartesi tarihini hafta numarasına göre döndürür

Fibonacci - Fibonacci serisinin elemanını sıra numarasına göre döndürür.
GetNameMA - MA yönteminin adını döndürür.
GetPriceDiffInPoint - İki çubuk arasındaki puan cinsinden fiyat farkını döndürür.

GetTypePrice - Fiyat türü adını döndürür.
ArrayLR - Bir dizi doğrusal regresyon değeri oluşturur.
ArrayMo - Modu döndürür - dağıtım yoğunluğu eğrisinin maksimumu.

ExistOrdersByPrice - Belirlenen fiyatta siparişlerin varlığının işaretini döndürür

ClosePosBySelect - Önceden seçilmiş bir pozisyonu kapat
CountOrders - Türe göre sipariş sayısını hesaplar.
ModifyOrder - Sipariş değişikliği. Geri testler için işlev sürümü.

IIFc - Koşullara bağlı olarak iki değerden birini döndürür.

IIFd - Koşullara bağlı olarak iki değerden birini döndürür.
IIFi - Koşullara bağlı olarak iki değerden birini döndürür.
IIFs - Koşullara bağlı olarak iki değerden birini döndürür.
ExistInHistoryCloseBetween - Tarihler arasında kapatılan (silinen) bir pozisyon veya siparişin geçmişindeki varlık bayrağını döndürür.

ExistInHistoryOpenBetween - Tarihler arasında açılan (ayarlanan) bir pozisyonun veya emrin geçmişindeki varlığın bayrağını döndürür.

ExistInHistoryToDay - Tarihte bugün için bir emir veya pozisyonun varlığının bayrağını döndürür

TakeProfitLastPos - Son açık pozisyonun TakeProfit fiyatını veya -1'i döndürür.

Sayfa #8
TakeProfitLastClosePos - Son kapatılan pozisyonun TakeProfit fiyatını veya -1'i döndürür.

MovingInWL - Durdurma seviyesini başa baş seviyesine taşıma

SimpleTrailing - Basit bir trol ile pozisyonları takip edin

ArrayZ - Bir sayı serisinin Z puanını döndürür.
ArrayDeleteInt - Verilen dizindeki dizi öğesini siler. Yeni dizinin boyutunu veya hiçbir şey kaldırılamıyorsa -1'i döndürür.
ArrayDeleteDouble - Verilen dizindeki dizi öğesini siler. Yeni dizinin boyutunu veya
hiçbir şey kaldırılamıyorsa -1'i döndürür.
ArrayDeleteString - Verilen dizindeki dizi öğesini siler. Yeni dizinin boyutunu veya -1'i döndürür,
eğer hiçbir şey kaldırılamazsa.
ArrayInsertDouble - Verilen dizine bir dizi öğesi ekler. Yeni dizinin boyutunu döndürür.
BubbleSort2 - İki boyutlu bir dizinin öğeleri üzerinde bir baloncuk sıralaması gerçekleştirir.
GetTypeLastDeleted - Son silinen siparişin türünü döndürür veya -1
iBarLargest - En büyük çubuğun dizinini döndürür veya -1.
iBarOfDayCalc - Günün başlangıcından itibaren hesaplanan çubuk sayısını döndürür. Çubuk numaralandırma 1'den başlar (bir)
iBarOfDayReal - Günün başlangıcından itibaren çubuğun gerçek sayısını döndürür.
NameDayOfWeek - Haftanın gününün adını döndürür
NormalizeLot - İşlem gören lotun normalleştirilmiş değerini döndürür.
NormalizePrice - Onay boyutuna normalleştirilmiş fiyat değerini döndürür.
WeekOfMonth - Tarihte belirtilen ayın hafta numarasını döndürür
ClosePosBySortLots - Lot büyüklüğüne göre sıralama düzeninde pozisyonları kapatın.
AddLeadingZero - S dizesini K uzunluğuna eşit kılmak için S dizesine yeterli sayıda baştaki sıfır "0" ekler.

toTime - İki/üç tamsayıyı zaman biçiminde bir dizeye dönüştürür

Sayfa #9
StringLower - Küçük harfli bir dize döndürür

StringUpper - BÜYÜK harfle bir dize döndürür

StringToArrayDouble - Gerçek sayıları dizeden diziye aktar

StringToArrayInt - Tamsayı değerlerini dizeden diziye aktar

StrSplit - Bir dizeyi bir dizi öğeye bölme

StrTran - Alt Dizi Değiştirme

MovingInWL - Durdurma seviyesini başa baş seviyesine taşıma

isTradeTimeString - Zaman ticareti etkinleştirme bayrağını döndürür.

isTradeTimeInt - Zaman ticaret izni bayrağını döndürür.


Bunlara ek olarak:
Tüm fonksiyonlar tek bir arşivde.
Tüm işlevler bağlantılı kitaplıklar biçimindedir.


 //+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. 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);   } } //+----------------------------------------------------------------------------+

ExistOrders() işlevi.

Sipariş varlığı bayrağını döndürür. Sıralamanın yapılıp yapılmadığı sorusuna cevap verecektir. Bu işlevi kullanarak, herhangi bir siparişin yanı sıra daha spesifik bir sipariş talep edebilirsiniz. İstek filtresi, işlev parametreleri kullanılarak yapılandırılır:

  • sy - Aracın adına bir kısıtlama getirir. Varsayılan olarak, parametre "" - kısıtlama yok, yani herhangi bir araç. NULL'u geçerseniz, sipariş seçimi mevcut enstrümanla sınırlı olacaktır.
  • op - Emir türüne bir sınır koyar. Varsayılan olarak, herhangi bir kısıtlama yoktur, yani herhangi bir tür siparişin varlığı kontrol edilir. Geçerli parametre değerleri -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT ve OP_SELLSTOP'tur.
  • mn - Siparişin tanımlama ("sihir") numarasına bir sınır getirir. Varsayılan olarak bir sınır yoktur, yani herhangi bir sihirli sayıya sahip bir emrin varlığı kontrol edilir.
  • ot - Sipariş verme süresine bir sınır getirir. Kontrol. böylece sipariş bu parametrenin değerinden daha sonra verilir. Varsayılan olarak, herhangi bir sınır yoktur, yani herhangi bir ayar süresine sahip bir siparişin varlığı kontrol edilir.
 //+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   | //+----------------------------------------------------------------------------+ //|  Версия   : 12.03.2008                                                     | //|  Описание : Возвращает флаг существования ордеров.                         | //+----------------------------------------------------------------------------+ //|  Параметры:                                                                | //|    sy - наименование инструмента   (""   - любой символ,                   | //|                                     NULL - текущий символ)                 | //|    op - операция                   (-1   - любой ордер)                    | //|    mn - MagicNumber                (-1   - любой магик)                    | //|    ot - время открытия             ( 0   - любое время установки)          | //+----------------------------------------------------------------------------+ bool ExistOrders( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {    int i, k= OrdersTotal (), ty;      if (sy== "0" ) sy= Symbol ();    for (i= 0 ; i<k; i++) {      if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {       ty=OrderType();        if (ty> 1 && ty< 6 ) {          if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || ty==op)) {            if (mn< 0 || OrderMagicNumber()==mn) {              if (ot<=OrderOpenTime()) return (True);           }         }       }     }   }    return (False); }
Полезные функции от KimIV
Полезные функции от KimIV
  • www.mql5.com
В этой теме я буду выкладывать коды своих функций на языке программирования MQL4, приводить примеры их использования и отвечать на вопросы, связанн...
 

ExistPositions() işlevi.

Açık alımları veya satımları kontrol etmek için tasarlanmıştır. ExistOrders işlevine benzer. Varsayılan olarak, tüm pozisyonları inceler: mevcut ve diğer enstrümanlar. Seçimi, bir filtre kombinasyonu ile belirtebilirsiniz - fonksiyon parametreleri:

  • sy - Aracın adına bir kısıtlama getirir. Varsayılan olarak, parametre "" - kısıtlama yok, yani herhangi bir araç. NULL'u geçerseniz, konum seçimi mevcut enstrümanla sınırlı olacaktır.
  • op - Pozisyon türünü kısıtlar (Al/Sat). Varsayılan olarak, herhangi bir kısıtlama yoktur, yani herhangi bir türden bir pozisyonun varlığı kontrol edilir. Geçerli parametre değerleri -1, OP_BUY ve OP_SELL'dir.
  • mn - Konumun tanımlama ("sihir") numarasına bir sınır getirir. Varsayılan olarak herhangi bir kısıtlama yoktur, yani herhangi bir sihirli sayıya sahip bir pozisyonun varlığı kontrol edilir.
  • ot - Bir pozisyonun açılış süresine bir sınır getirir . Bu parametrenin değerinden sonra pozisyonun açıldığı kontrol edilir. Varsayılan olarak bir limit yoktur, yani herhangi bir açılış süresi olan bir pozisyonun varlığı kontrol edilir.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.03.2008                                                     |
//|  Описание : Возвращает флаг существования позиций                          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 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== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (ot<=OrderOpenTime()) return (True);
            }
          }
        }
      }
    }
  }
   return (False);
}

Test cihazı için OpenPosition() işlevi.


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

Çevrimiçi için OpenPosition() işlevi.


 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2008                                                     |
//|  Описание : Открывает позицию и возвращает её тикет.                       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
int OpenPosition( string sy, int op, double ll, double sl= 0 , double tp= 0 , int mn= 0 ) {
   color     clOpen;
   datetime ot;
   double    pp, pa, pb;
   int       dg, err, it, ticket= 0 ;
   string    lsComm=WindowExpertName()+ " " +GetNameTF( Period ());
 
   if (sy== "" || sy== "0" ) sy= Symbol ();
   if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
   for (it= 1 ; it<=NumberOfTry; it++) {
     if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) {
       Print ( "OpenPosition(): Остановка работы функции" );
       break ;
    }
     while (!IsTradeAllowed()) Sleep ( 5000 );
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
     if (op==OP_BUY) pp=pa; else pp=pb;
    pp= NormalizeDouble (pp, dg);
    ot= TimeCurrent ();
    ticket= OrderSend (sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0 , clOpen);
     if (ticket> 0 ) {
       if (UseSound) PlaySound (NameFileSound); break ;
    } else {
      err= GetLastError ();
       if (pa== 0 && pb== 0 ) Message( "Проверьте в Обзоре рынка наличие символа " +sy);
       // Вывод сообщения об ошибке
       Print ( "Error(" ,err, ") opening position: " ,ErrorDescription(err), ", try " ,it);
       Print ( "Ask=" ,pa, " Bid=" ,pb, " sy=" ,sy, " ll=" ,ll, " op=" ,GetNameOP(op),
             " pp=" ,pp, " sl=" ,sl, " tp=" ,tp, " mn=" ,mn);
       // Блокировка работы советника
       if (err== 2 || err== 64 || err== 65 || err== 133 ) {
        gbDisabled=True; break ;
      }
       // Длительная пауза
       if (err== 4 || err== 131 || err== 132 ) {
         Sleep ( 1000 * 300 ); break ;
      }
       if (err== 128 || err== 142 || err== 143 ) {
         Sleep ( 1000 * 66.666 );
         if (ExistPositions(sy, op, mn, ot)) {
           if (UseSound) PlaySound (NameFileSound); break ;
        }
      }
       if (err== 140 || err== 148 || err== 4110 || err== 4111 ) break ;
       if (err== 141 ) Sleep ( 1000 * 100 );
       if (err== 145 ) Sleep ( 1000 * 17 );
       if (err== 146 ) while (IsTradeContextBusy()) Sleep ( 1000 * 11 );
       if (err!= 135 ) Sleep ( 1000 * 7.7 );
    }
  }
   return (ticket);
}
 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Вывод сообщения в коммент и в журнал                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - текст сообщения                                                     |
//+----------------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
} 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование таймфрейма                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeFrame - таймфрейм (количество секунд)      (0 - текущий ТФ)         |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  switch (TimeFrame) {
    case PERIOD_M1:  return("M1");
    case PERIOD_M5:  return("M5");
    case PERIOD_M15: return("M15");
    case PERIOD_M30: return("M30");
    case PERIOD_H1:  return("H1");
    case PERIOD_H4:  return("H4");
    case PERIOD_D1:  return("Daily");
    case PERIOD_W1:  return("Weekly");
    case PERIOD_MN1: return("Monthly");
    default:         return("UnknownPeriod");
  }
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование торговой операции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    op - идентификатор торговой операции                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("Buy Limit");
    case OP_SELLLIMIT: return("Sell Limit");
    case OP_BUYSTOP  : return("Buy Stop");
    case OP_SELLSTOP : return("Sell Stop");
    default          : return("Unknown Operation");
  }
}
 

ModifyOrder() işlevi.

ModifyOrder işlevi, önceden seçilmiş bir siparişin bir veya daha fazla fiyat seviyesini değiştirmek için tasarlanmıştır. Burada bir emir, hem bekleyen bir Limit veya Stop emri hem de bir Al veya Sat piyasa emri, yani bir pozisyon anlamına gelir. Bir pozisyon için ModifyOrder fonksiyonunu kullanarak StopLoss ve TakeProfit olmak üzere iki fiyat seviyesini değiştirebilir, bekleyen bir emir için bunlara ek olarak OpenPrice ayar fiyatını da değiştirebilirsiniz. Değiştirilen fiyat seviyeleri, ModifyOrder işlevine parametre olarak aktarılır. Herhangi bir parametre negatifse, karşılık gelen fiyat seviyesi değişmeyecektir.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Модификация одного предварительно выбранного ордера.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена установки ордера                                              |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    cl - цвет значка модификации                                            |
//+----------------------------------------------------------------------------+
void ModifyOrder( double pp=- 1 , double sl= 0 , double tp= 0 , color cl= CLR_NONE ) {
   bool    fm;
   double op, pa, pb, os, ot;
   int     dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
 
   if (pp<= 0 ) pp=OrderOpenPrice();
   if (sl< 0 ) sl=OrderStopLoss();
   if (tp< 0 ) tp=OrderTakeProfit();
  
  pp= NormalizeDouble (pp, dg);
  sl= NormalizeDouble (sl, dg);
  tp= NormalizeDouble (tp, dg);
  op= NormalizeDouble (OrderOpenPrice() , dg);
  os= NormalizeDouble (OrderStopLoss()  , dg);
  ot= NormalizeDouble (OrderTakeProfit(), dg);
 
   if (pp!=op || sl!=os || tp!=ot) {
     for (it= 1 ; it<=NumberOfTry; it++) {
       if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) break ;
       while (!IsTradeAllowed()) Sleep ( 5000 );
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, 0 , cl);
       if (fm) {
         if (UseSound) PlaySound (NameFileSound); break ;
      } else {
        er= GetLastError ();
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
         Print ( "Error(" ,er, ") modifying order: " ,ErrorDescription(er), ", try " ,it);
         Print ( "Ask=" ,pa, "  Bid=" ,pb, "  sy=" ,OrderSymbol(),
               "  op=" +GetNameOP(OrderType()), "  pp=" ,pp, "  sl=" ,sl, "  tp=" ,tp);
         Sleep ( 1000 * 10 );
      }
    }
  }
}
 

DeleteOrders() işlevi. Test sürümü.

DeleteOrders() işlevi BuyLimit, BuyStop, SellLimit ve SellStop bekleyen siparişleri silmek için tasarlanmıştır. DeleteOrders() işlevi evrenseldir, yani hem mevcut tüm bekleyen siparişleri hem de işlev parametreleri tarafından belirtilen seçim koşullarını karşılayan belirli siparişleri silmek için kullanılabilir:

sy - Araç adı. Test cihazında alım satım işlemi yalnızca mevcut enstrüman üzerinde gerçekleştirilebildiğinden, bu parametre test cihazı versiyonuyla ilgili değildir ve sadece bu fonksiyonun çevrimiçi versiyonuyla uyumluluk için gereklidir. Test cihazında "" veya NULL değerlerini kullanmak en iyisidir. Varsayılan değer "" - herhangi bir karakter anlamına gelir.
op
- İşlem tipi, bekleyen emir tipi. Beş değerden biri mümkündür: -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT veya OP_SELLSTOP. Varsayılan değer -1, herhangi bir sipariş anlamına gelir.

mn - MagicNumber, bekleyen siparişin kimlik numarası. Varsayılan değer -1, herhangi bir sihir anlamına gelir.


 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
   int i, k= OrdersTotal (), ot;
 
   if (sy== "" || sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
       if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
         if (OrderSymbol()==sy && (op< 0 || ot==op)) {
           if (mn< 0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 

DeleteOrders() işlevi. Çevrimiçi sürüm.


 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 28.11.2006                                                      |
//| Описание : Удаление ордеров                                                |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента   ( ""  - любой символ,                    |
//|                                    NULL - текущий символ)                  |
//|   op - операция                   (  -1 - любой ордер)                     |
//|   mn - MagicNumber                (  -1 - любой магик)                     |
//+----------------------------------------------------------------------------+
void DeleteOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
   bool fd;
   int err, i, it, k= OrdersTotal (), ot;
  
   if (sy== "0" ) sy= Symbol ();
   for (i=k- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
       if (ot> 1 && ot< 6 ) {
         if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || ot==op)) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             for (it= 1 ; it<=NumberOfTry; it++) {
               if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) break ;
               while (!IsTradeAllowed()) Sleep ( 5000 );
              fd=OrderDelete(OrderTicket(), clDelete);
               if (fd) {
                 if (UseSound) PlaySound (NameFileSound); break ;
              } else {
                err= GetLastError ();
                 Print ( "Error(" ,err, ") delete order " ,GetNameOP(ot),
                       ": " ,ErrorDescription(err), ", try " ,it);
                 Sleep ( 1000 * 5 );
              }
            }
          }
        }
      }
    }
  }
}
 
//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 07.10.2006                                                      |
//| Описание : Поиск ближайшего фрактала.                                      |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента     (NULL - текущий символ)                |
//|   tf - таймфрейм                    (  0  - текущий ТФ)                    |
//|   mode - тип фрактала               (MODE_LOWER|MODE_UPPER)                |
//+----------------------------------------------------------------------------+
double FindNearFractal( string sy= "0" , int tf= 0 , int mode=MODE_LOWER) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ;
   int d=MarketInfo(sy, MODE_DIGITS), s;
   if (d== 0 ) if ( StringFind (sy, "JPY" )< 0 ) d= 4 ; else d= 2 ;
 
   for (s= 2 ; s< 100 ; s++) {
    f= iFractals (sy, tf, mode, s);
     if (f!= 0 ) return ( NormalizeDouble (f, d));
  }
   Print ( "FindNearFractal(): Фрактал не найден" );
   return ( 0 );
}

ExistOrdersByLot() işlevi.

Belirli bir parti büyüklüğüne sahip bir siparişin varlığının bayrağını döndürür. Doğru - sipariş var (ayarlandı), Yanlış - sipariş yok (ayarlanmadı). Kontrol edilen siparişlerin listesini fonksiyon parametreleriyle sınırlayabilirsiniz:

  • sy - Araç 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, bekleyen emir türü. Geçerli değerler OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP veya -1 şeklindedir. 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ü.
  • lo - İki ondalık basamak doğruluğu ile parti boyutu. Varsayılan değer 0 - herhangi bir parti büyüklüğü.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает флаг существования ордера по размеру лота.          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    lo - лот                        ( 0   - любой лот)                      |
//+----------------------------------------------------------------------------+
bool ExistOrdersByLot( string sy= "" , int op=- 1 , int mn=- 1 , double lo= 0 ) {
   int i, k= OrdersTotal (), ot;
  lo= NormalizeDouble (lo, 2 );

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
       if (ot> 1 && ot< 6 ) {
         if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || ot==op)) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             if (lo<= 0 || NormalizeDouble (OrderLots(), 2 )==lo) return (True);
          }
        }
      }
    }
  }
   return (False);
}
 

GetLotLastOrder() işlevi.

Son verilen siparişin parti boyutunu veya -1 döndürür. Kontrol edilen siparişlerin listesini fonksiyon parametreleriyle sınırlayabilirsiniz:

  • sy - Araç 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, bekleyen emir türü. Geçerli değerler OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP veya -1 şeklindedir. Varsayılan değer -1 , herhangi bir sipariş anlamına gelir.
  • mn - Sipariş Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает размер лота последнего выставленного ордера или -1  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastOrder( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime o;
   double    l=- 1 ;
   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== "" ) {
         if (OrderType()> 1 && OrderType()< 6 ) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
   return (l);
}
 

GetOrderOpenPrice() işlevi.

Son verilen siparişin fiyatını veya 0'ı döndürür. Kontrol edilen siparişlerin listesini fonksiyon parametreleriyle sınırlayabilirsiniz:

  • sy - Araç 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, bekleyen emir türü. Geçerli değerler OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP veya -1 şeklindedir. Varsayılan değer -1 , herhangi bir sipariş anlamına gelir.
  • mn - Sipariş Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает цену установки последнего ордера или 0.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetOrderOpenPrice( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   double    r= 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== "" ) {
         if (OrderType()> 1 && OrderType()< 6 ) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
   return (r);
}
 

IndexByTicket() işlevi.

Bilete göre emrin veya pozisyonun indeksini (verilen emirlerin veya açık pozisyonların genel listesindeki seri numarası) verir. IndexByTicket() işlevi gerekli biletle bir emir veya pozisyon bulamazsa, -1 değerini döndürür. Kontrol edilen emirlerin veya pozisyonların listesini fonksiyon parametreleriyle sınırlayabilirsiniz:

  • sy - Araç adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrüman için siparişleri ve pozisyonları kontrol edecektir. NULL , geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - Ticaret işlemi , bekleyen emir veya pozisyon türü. Geçerli değerler OP_BUY, OP_BUYLIMIT, OP_BUYSTOP, OP_SELL, OP_SELLLIMIT, OP_SELLSTOP veya -1'dir . Varsayılan değer -1 , herhangi bir sipariş veya pozisyon anlamına gelir.
  • mn - Sipariş veya konum kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 20.04.2007                                                     |
//|  Описание : Возвращает индекс ордера или позиции по тикету                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ti - тикет ордера, позиции                                              |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int IndexByTicket( int ti, string sy= "" , int op=- 1 , int mn=- 1 ) {
   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 ((mn< 0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return (i);
      }
    }
  }
   return (- 1 );
}
Neden: