KimIV'ten faydalı özellikler - sayfa 109

 
İşlev biraz düzeltildi. Artık kavşaklar hatasız olarak hesaplanıyor.
Giriş Parametreleri: |
nm1 - ilk satır adı |

nm2 - ikinci satır adı

M çıkışındaki fiyat seviyesidir.

 void Middle( string nm1, string nm2)
  {
   double x1, x2, x3, x4;
   double y1, y2, y3, y4;
   double k1, k3;
  
   if ( ObjectFind (nm1)== 0 && ObjectFind (nm2)== 0 )
    {
    y1= ObjectGet (nm1, OBJPROP_PRICE1);
    y2= ObjectGet (nm1, OBJPROP_PRICE2);
    x1= ObjectGetShiftByValue (nm1, y1);
    x2= ObjectGetShiftByValue (nm1, y2);
    
    y3= ObjectGet (nm2, OBJPROP_PRICE1);
    y4= ObjectGet (nm2, OBJPROP_PRICE2);
    x3= ObjectGetShiftByValue (nm2, y3);
    x4= ObjectGetShiftByValue (nm2, y4);
    
    k1=(y2-y1)/(x2-x1); 
    k3=(y4-y3)/(x4-x3);
    
     if (k1 != k3)
      {
      T = (y1 - y3 + k3*x3 - k1*x1)/(k3 - k1);
      M = y1 + k1*(T - x1);
      }
    }
   return ( 0 );
  }

not. Kodumu buraya gönderdiğim için şubenin yazarından özür dilerim. Belki birisinin de kavşaklardan muzdarip olduğunu düşündüm ...

 
Shuba : Belki başka birinin de kavşaklarla uğraştığını düşündüm...

Hatırladım (zaten Annals'ta ):

Novozar 23.07.2011 12:18
Durumdan bir çıkış yolu önerin. Ortalama Yönlü Hareket İndeksi göstergesi vardır, noktalı çizgiler çizer. Çizgilerin kesişimini yakalamak istiyorum. Ancak noktalı olmaları nedeniyle kavşağı normal şekilde yakalamak mümkün değildir.
 
Shuba :

not. Kodumu buraya gönderdiğim için şubenin yazarından özür dilerim. Belki birisinin de kavşaklardan muzdarip olduğunu düşündüm ...

Öyle olsun. Onu bağışlayalım...
 
Shuba :
İşlev biraz düzeltildi. Artık kavşaklar hatasız olarak hesaplanıyor.
Giriş Parametreleri: |
nm1 - ilk satır adı |

nm2 - ikinci satır adı

M çıkışındaki fiyat seviyesidir.

not. Kodumu buraya gönderdiğim için şubenin yazarından özür dilerim. Belki birisinin de kavşaklardan muzdarip olduğunu düşündüm ...

Peki, belki bu fonksiyonun aynı fiyat seviyesini döndürmesine izin verin (önceki sürümde olduğu gibi)?! Ek olarak, kodunuzda bildirilmemiş bir "T" değişkeni var.
 
TarasBY :
Peki, belki bu fonksiyonun aynı fiyat seviyesini döndürmesine izin verin (önceki sürümde olduğu gibi)?! Ek olarak, kodunuzda bildirilmemiş bir "T" değişkeni var.

Peki, o yüzden geri verir)

bildirilmemiş değişkenler hakkında - üzgünüm. kendimi düzeltiyorum.

çift M - fiyat geçiş seviyesi. Bu değişkeni en baştan ilan ediyoruz.

 void Middle( string nm1, string nm2)
  {
   double x1, x2, x3, x4;
   double y1, y2, y3, y4;
   double k1, k3;
  
   if ( ObjectFind (nm1)== 0 && ObjectFind (nm2)== 0 )
    {
    y1= ObjectGet (nm1, OBJPROP_PRICE1);
    y2= ObjectGet (nm1, OBJPROP_PRICE2);
    x1= ObjectGetShiftByValue (nm1, y1);
    x2= ObjectGetShiftByValue (nm1, y2);
    
    y3= ObjectGet (nm2, OBJPROP_PRICE1);
    y4= ObjectGet (nm2, OBJPROP_PRICE2);
    x3= ObjectGetShiftByValue (nm2, y3);
    x4= ObjectGetShiftByValue (nm2, y4);
    
    k1=(y2-y1)/(x2-x1); 
    k3=(y4-y3)/(x4-x3);
    
     if (k1 != k3)
      {
       double T = (y1 - y3 + k3*x3 - k1*x1)/(k3 - k1);
      M = y1 + k1*(T - x1);
      }
    }
   return ( 0 );
  }

Fragmanda - işlevin nasıl çalıştığını görmek için bir danışman.

 

bir şey yüklenmedi...

Dosyalar:
proba_per_1.mq4  11 kb
 
Shuba :

bir şey yüklenmedi...


Suyu bulandırmayacaksın, IMHO - burada bir açıklama ile işlev kitaplıklarına bombalarsın ve hepsi bu ...

Kimin ihtiyacı var - arayarak bulacaklar.

 

ClosePosByTakeProfitZone() işlevi.

Bu fonksiyon, fiyatın TakeProfit'e yakın bir bölgede çiğnenmesi veya belirli sayıda bar için bu bölgeden ayrılmaya çalışılması durumunda piyasa fiyatından bir pozisyonu kapatır. Kapalı pozisyonların 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ü.
  • tf - TakeProfit bölgesinde fiyatın çiğnendiği çubukların sayılacağı zaman çizelgesi. Varsayılan değer 0 - mevcut zaman dilimi.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.04.2012                                                     |
//|  Описание : Закрытие позиций при нахождении цены в зоне TakeProfit         |
//|             в течение заданного количества баров,                          |
//|             а также при попыте выйти из этой зоны.                         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    tf - таймфрейм                  ( 0   - текущий таймфрейм)              |
//+----------------------------------------------------------------------------+
void ClosePosByTakeProfitZone( string sy= "" , int op=- 1 , int mn=- 1 , int tf= 0 ) {
   double pa, pb, po, pp, tp;
   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 ((mn< 0 || OrderMagicNumber ()==mn) && OrderTakeProfit ()> 0 ) {
          po= MarketInfo ( OrderSymbol (), MODE_POINT);
           if (po== 0 ) Message( "В обзоре рынка отсутствует символ " + OrderSymbol ());
           else {
             if ( OrderType ()==OP_BUY) {
               RefreshRates ();
              pb= MarketInfo ( OrderSymbol (), MODE_BID);
              pp= iLow ( OrderSymbol (), tf, iLowest ( OrderSymbol (), tf, MODE_LOW, TP.ZoneBars, 0 ));
              tp= OrderTakeProfit ()-TP.ZonePoint*po;
               if (pp>tp || (pb<tp && ( iHigh ( OrderSymbol (), tf, 0 )>tp) || ( iHigh ( OrderSymbol (), tf, 1 )>tp))) ClosePosBySelect();
            }
             if ( OrderType ()==OP_SELL) {
               RefreshRates ();
              pa= MarketInfo ( OrderSymbol (), MODE_ASK);
              pp= iHigh ( OrderSymbol (), tf, iHighest ( OrderSymbol (), tf, MODE_HIGH, TP.ZoneBars, 0 ));
              tp= OrderTakeProfit ()+TP.ZonePoint*po;
               if (pp<tp || (pb>tp && ( iLow ( OrderSymbol (), tf, 0 )<tp) || ( iLow ( OrderSymbol (), tf, 1 )<tp))) ClosePosBySelect();
            }
          }
        }
      }
    }
  }
}
Ekli, ClosePosByTakeProfitZone() işlevini test etmek için bir Uzman Danışmandır. Test cihazında olduğu gibi test edebilirsiniz. hem de çevrimiçi.
 

İyi akşamlar, İgor!

Çok uzun zaman önce fonksiyonlarınızı incelemeye başladım, 36. sayfada fonksiyonları tam olarak anlamadım, lütfen çözmeme yardım edin:


GetArrowInterval() işlevi.

//+------------------------------------------- --------------------+
//| Sinyal işaretçilerini ayarlamak için aralığı döndürür |
//+------------------------------------------- --------------------+
int GetArrowInterval() {
int p = Dönem();

geçiş (p) {
durum 1: dönüş(4);
durum 5: dönüş(5);
durum 15: dönüş(6);
durum 30: dönüş(8);
durum 60: dönüş(10);
durum 240: dönüş(20);
durum 1440: dönüş(40);
durum 10080: dönüş(80);
durum 43200: dönüş(150);
}
}

onlar. bu fonksiyon SetArrow() fonksiyonunu kullanarak okları ayarlamak için kullanıldı, yani ObjectCreate(nm, OBJ_ARROW , 0, 0,0) satırındaki fiyat seviyesi yerine, bana bunun nasıl olduğunu anlat, ne olduğunu anlamıyorum döndürülen değerler ortalama ( 4,5,6,8,10....)


İşlevin yeni sürümü de belirsiz kaldı:


//+------------------------------------------- ------------------------------+
//| Yazar : Kim Igor V. namı diğer KimIV, http://www.kimiv.ru |
//+------------------------------------------- ------------------------------+
//| Sürüm : 10/12/2007 |
//+------------------------------------------- ------------------------------+
//| Açıklama : Sinyal işaretçilerini ayarlama aralığını döndürür |
//| Seçenekler: |
//| pr - fiyat penceresi boyutuna göre yüzde |
//+------------------------------------------- ------------------------------+
int GetArrowInterval(int pr=7) {
if (pr<=0) pr=7;

return((WindowPriceMax()-WindowPriceMin())/100*pr/Nokta);


WindowPriceMax() işlevi, dikey ölçeğin maksimum değerini döndürür, yani. bu, fiyatın maksimum değeridir, ancak hangi dönem için?

Ve emekleriniz için teşekkürler....

 
Lisi4ka330 :

Çok uzun zaman önce fonksiyonlarınızı incelemeye başladım, 36. sayfada fonksiyonları tam olarak anlamadım, lütfen çözmeme yardım edin:

onlar. bu işlev SetArrow() işlevini kullanarak okları ayarlamak için kullanıldı, yani ObjectCreate(nm, OBJ_ARROW, 0, 0,0) satırındaki fiyat düzeyi yerine, bunun nasıl olduğunu anlatın ...

Bu işlevlerin amacını yanlış anladınız. Fiyatlarla çalışmazlar ve simgeler koymazlar, sadece mevcut zaman dilimine bağlı olarak mesafeyi puan olarak döndürürler. Aşağıdaki resme bakın

Benzer bir simgeyi fiyata yakın değil, belirli bir mesafeye ve örneğin H1 zaman çizelgesi grafiğine koyarsanız ve ardından M1'e geçerseniz, büyük olasılıkla simgeyi görmezsiniz. Ölçek değişecek ve simge ya çok aşağı ya da yukarı gidecektir. Bahsettiğiniz işlevler, simgelerin herhangi bir zaman diliminde grafikte her zaman görünür olmasını sağlamaya yöneliktir.

Lisi4ka330 :

...dönüş değerleri (4,5,6,8,10....) ne anlama geliyor?

Geçerli zaman çerçevesine bağlı olarak puan cinsinden mesafe.


Lisi4ka330
:

WindowPriceMax() işlevi, dikey ölçeğin maksimum değerini döndürür, yani. bu, fiyatın maksimum değeridir, ancak hangi dönem için?

Hiç de değil... sadece geçerli pencerede. Örneğin, aşağıdaki resimde maksimum fiyat 97.35'tir.