[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 275

 

Soru mümkün.

eksi olmadan bir sayı nasıl elde edilir, eğer Open[1] < Close[1] olduğu ortaya çıkarsa ve Open[1]-Close[1] çıkarılırken eksi ile bir değer alacağım, bunu her zaman nasıl yapacağım pozitif değer, Open ve Close arasındaki mesafeyi hesaplamam gerekiyor, başka bir şekilde yiyebilir miyim?

Teşekkür ederim.

 
Martingeil >> :

Soru mümkün.

eksi olmadan bir sayı nasıl elde edilir, eğer Open[1] < Close[1] olduğu ortaya çıkarsa ve Open[1]-Close[1] çıkarılırken eksi ile bir değer alacağım, bunu her zaman nasıl yapacağım pozitif değer, Open ve Close arasındaki mesafeyi hesaplamam gerekiyor, başka bir şekilde yiyebilir miyim?

Teşekkür ederim.

https://docs.mql4.com/en/math/MathAbs

 

;) Teşekkürler!

 

Tünaydın!

MT4 için bir danışman yazarken , bu danışmanın en az bir siparişinin açılıp açılmadığını programlı olarak (yani danışmanın kendi kodunda) belirlemek gerekli hale geldi. Söyle bana, böyle bir işlev var mı? Belki varsa, şöyle görünür:

Bool (bu sihirli sayı ile bir EA siparişinin açılıp açılmadığı)

{ yanıt = Doğru/Yanlış }

?

Uzmanlar - lütfen yardım edin - kendileri zaten kafalarını kırdılar

P. S. – sipariş numaralarını dikkate alarak seçeneği denedi – işe yaramadı

 
waitra >> :

Tünaydın!

MT4 için bir danışman yazarken, bu danışmanın en az bir siparişinin açılıp açılmadığını programlı olarak (yani danışmanın kendi kodunda) belirlemek gerekli hale geldi. Söyle bana, böyle bir işlev var mı?

Bu f-I uygun mu?

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

  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 ) kp + + ;
          } } } } }
  return ( kp ) ;
}

Kullanım örneği: Fonksiyonun kendisini kodun en sonuna koyarız (BAŞLAT fonksiyonunun dışında) ve bir pozisyon açarken şunları kontrol ederiz:



 if ( NumberOfPositions ( NULL , OP_BUY , Magic ) < 1 ) {
// если нет окрытых OP_BUY позиций с заданным магиком, покупаем
ticket = OrderSend ( Symbol ( ) , 0 , Lots , Ask , Slippage , Bid - SL * Point ,
                      Ask + TP * Point , NULL , Magic , 0 , Blue ) ;
                                              }

Pozisyonlara değil, bekleyen emirlere ihtiyacınız varsa, f-th kullanabilirsiniz.

NumberOfOrders() işlevi.
Bu fonksiyon sipariş sayısını 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 - bekleyen emir türü. Geçerli değerler: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP veya -1. 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ü.

https://www.mql5.com/ru/forum/107476/page12

 

Lütfen dosyaların ne verdiğini açıklayın:

 #include < stdlib . mqh >
#include < stderror . mqh >

Mümkünse, o zaman basit bir şey.

Teşekkür ederim.

 
Serbov писал(а) >>

Lütfen dosyaların ne verdiğini açıklayın:

Mümkünse, o zaman basit bir şey.

Teşekkür ederim.

bunlar sözde "kütüphane dosyaları". sık kullanılan işlevler bu dosyalarda saklanır. kaynağı indirmekten kaçınmak için kullanılır. kitaplık dosyası "bildirildi" ise, bildirilen dosyadaki işlevler kaynağa dahil edilmiş gibi kullanılabilir.

 
Serbov >> :

Lütfen dosyaların ne verdiğini açıklayın:

Mümkünse, o zaman basit bir şey.

Teşekkür ederim.

Bu dosyalardan (önceden MT4'te gömülü olan) bir işlevi kullanırken (çağırırken), danışmanın yanlış çalışması durumunda, kodda yaptığımız hatanın numarasını günlükte görebiliriz.

Örneğin, GetLastError() işlevini çağırırız:

ticket = OrderSend ( Symbol ( ) , OP_BUY , lots , Ask , 3 , SL , TP , "Name_Expert" , Magic , 0 , clOpenBuy ) ;
   if ( ticket < 0 )
 { Print ( "Ошибка открытия ордера BUY #" , GetLastError ( ) ) ;  } 

Bu durumda, kodda bir hata yaptıysak veya harici parametreleri yanlış ayarladıysak, bu hatanın numarası logda gösterilecektir.

Örneğin, - 130.

Ve sayfadaki sayının kodunun çözülmesine bakabilirsiniz - https://book.mql4.com/ru/appendix/errors

Ve artık kodun tamamını kürek çekmemize gerek kalmayacak, çünkü hatanın tam olarak nerede yapıldığını bu numaradan zaten biliyoruz!

 
rid писал(а) >>

Bu f-I uygun mu?


Kullanım örneği: Fonksiyonun kendisini kodun en sonuna koyarız (BAŞLAT fonksiyonunun dışında) ve bir pozisyon açarken şunları kontrol ederiz:



Pozisyonlara değil, bekleyen emirlere ihtiyacınız varsa, f-th kullanabilirsiniz.

NumberOfOrders() işlevi.
Bu fonksiyon sipariş sayısını 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 - bekleyen emir türü. Geçerli değerler: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP veya -1. 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ü.

https://www.mql5.com/en/forum/107476/page12

İpucu için çok teşekkür ederiz, bunu yapmaya çalıştık, ancak nedense çalışmıyor, lütfen kodda bir yerde bir hata olup olmadığına bakın:

 bool Open_Buy ( )

{

   bool res = false ;     


if ( условие_1 )          { 

       if ( NumberOfPositions ( NULL , Magic ) < 1 ) // если нет открытых позиций с заданным магиком

           { res = true ; } }

else   

   {

     if ( условие_1 ) 

       { 

       if ( NumberOfPositions ( NULL , Magic ) > 1 ) // если советник уже открывал позиции

       {

           if ( условие_2 )                { 

             res = true ; }

           } 

} }

return ( res ) ;

}

Buradaki fikir, EA henüz herhangi bir emir açmadıysa (açık veya kapalı emir yoktur), o zaman sadece satın alma koşulundaki ilk koşul tetiklenir. Ve eğer danışman geçmişte sipariş açmışsa, o zaman bir sipariş açarken birinci + ikinci koşullar çalışmalıdır.

Belirttiğiniz linke baktım ExistOrders() işlevi daha uygun olabilir; ?

(ama dürüst olmak gerekirse, bunu söylemek mümkün değildi, görünüşe göre, beceri hala yeterli değil)

 

Fonksiyonu yanlış çağırdınız.

Bunu şöyle adlandırdınız: if (NumberOfPositions(NULL,Magic)> 1)

Ve şöyle olması gerekiyor:

 if ( условие_1 )        { 

       if ( NumberOfPositions ( NULL , - 1 , Magic ) < 1 ) 
// если нет открытых позиций с заданным магиком

          { res = true ; } }

Farkı hissedin ("-1"i kaçırdınız!) ve KODUNUZU DÜZELTİN.

Ve kontrol için grafikte yorumları görüntüleyebilirsiniz. Örneğin, bunun gibi (BAŞLAT işlevinin en başında)

Comment ("Количество текущих открытых советником позций = ",
                                  NumberOfPositions(NULL,-1,Magic)  );
Magic_2=Magic*3;
İkinci koşulunuza gelince, ben ("daha fazla uzatmadan"), ikinci koşula göre pozisyonları açmak için başka bir sihir ve ayrı bir Open_Buy_2() işlevi ayarlardım!

Ardından ikinci koşulun kodu şöyle görünür:

 if ( условие_2 )                          { 
  if ( NumberOfPositions ( NULL , - 1 , Magic ) = = 1 )   {
    if ( NumberOfPositions ( NULL , - 1 , Magic_2 ) < 1 ) { 
. . . . . . . . . .