[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 582

 
Desead :


Bu yüzden robotu çizelgeden sildiğimde deinit çağrılır - aksi takdirde bu koşulu izleyemem ..... muhtemelen o zaman kalan tüm bekleyenleri kaldıran ayrı bir komut dosyası yazmak daha kolaydır, başka yolu yoktur.

Bu arada, işte başka bir düşünce:

Yaşasın, siparişleri silme sorununu çözmüş gibiyim. "Gerekli" (silinecek) siparişlerin sayısını -- Toplam -- ayrı bir işlev olarak kabul ediyorum, bu işlevi çağırıyorum, sonra ( Toplam> 0) koşuluyla birlikteyken, silme döngüsü for(int i= Total-1 ;i<=0l;i --), yine "gerekli" sayma işlevi , belirtilen seviyeye ulaşıldığında silme sayacı çıkış ile çalışır . Böylece her şey kaldırılır.

Herhangi bir nedenle emirlerden birinin sayma anından sonra aniden kaybolması durumunda burada sonsuz bir döngü meydana gelebilir.


Neden? Örneğin, terminal düzeyinde bir global değişken oluşturun, ona bir değer atayın ve başlangıçtaki başlangıcı kontrol edin ve kapatmadan önce bu değişkenin değerini servis --> global değişkenler aracılığıyla değiştirin.
 
BeerGod :

Ve bu yüzden?


ve aynı zamanda bununla ne elde etmeye çalıştıklarını sorabilirsiniz?

for(int i=0; i<SiparişToplam(); i++)

numaralandırma yöntemi açık pozisyonları sayma girişimi gibi görünüyor ...

 

Güzel gün!! Duruma güzel bir çözüm bulamıyorum. İşte tipik bir sipariş yerleşimi . Ama robotun parametrelerine sıfır geçersem, yani durup kar alma yok, o zaman hiçbir şey işe yaramaz.

 if (!srabotka){
           OrderSend ( Symbol ( ), OP_BUY, lot , NormalizeDouble (Ask, Digits ), 5 , NormalizeDouble ( Ask- (stop* Point ), Digits ),   NormalizeDouble ( Ask+( 45 * Point ), Digits ), NULL , 450 , 0 , CLR_NONE );
           int Error= GetLastError (); if (Error== 0 ){  
           Sleep ( 2000 ); RefreshRates(); 
           OrderSend ( Symbol ( ), OP_SELL,  lot , NormalizeDouble (Bid, Digits ), 5 , NormalizeDouble ( Bid+ (stop* Point ), Digits ), NormalizeDouble ( Bid-( 45 * Point ), Digits ), NULL , 450 , 0 , CLR_NONE ); 
           Error= GetLastError ();
           if (Error== 0 ){  profit = NormalizeDouble ( Ask+( 45 * Point ), Digits ); //tsena=Ask; perenos = false;  
           srabotka= true ; }}}
           
           if (Error!= 0 ){ string errorcomment = "Ошибка открытия  ордера OP_BUY"   + " " + Symbol () +   " " + ErrorDescript(Error); 
             Print (errorcomment);}
 

Başka bir if koyabilir ve sırayı ikinci kez sıfırlarla yazabilirsiniz, ancak bu biraz zahmetlidir.

 
lottamer :


ve aynı zamanda bununla ne elde etmeye çalıştıklarını sorabilirsiniz?

for(int i=0; i<SiparişToplam(); i++)

kaba kuvvet yöntemi açık pozisyonları sayma girişimi gibi görünüyor ...


Peki, bu şekilde belirtilen parametrelere göre sipariş seçimini yapar.

örneğin https://www.mql5.com/ru/forum/131859/page3#434221

NumberOfPositions() işlevi.

Bu işlev, o anda açık olan pozisyonların sayısını döndürür. Sayılan konumları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 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);
    }

 
lottamer :


ve aynı zamanda bununla ne elde etmeye çalıştıklarını sorabilirsiniz?

for(int i=0; i<SiparişToplam(); i++)

kaba kuvvet yöntemi açık pozisyonları sayma girişimi gibi görünüyor ...

... ve kendinizi duygulara teslim etmiyorsunuz, kurallardan başlıyorsunuz. Bu durumda döngü, i tamsayı değişkeni ile ilişkili parametreleri (siparişlerin "listesinde") numaralandırır ve her yinelemede değeri 1 artar. Numaralandırma, siparişin sıra numarasına göre gerçekleştirilir. :)))
 
BeerGod :

Peki, bu şekilde belirtilen parametrelere göre sipariş seçimini yapar.

örneğin https://www.mql5.com/ru/forum/131859/page3#434221

NumberOfPositions() işlevi.

Bu işlev, o anda açık olan pozisyonların sayısını döndürür. Sayılan konumları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.


teşekkürler... bu forum başlığını YER MARKLARIma ekleyeceğim. sırf fayda! :))
 
Desead :


Bu yüzden robotu çizelgeden sildiğimde deinit çağrılır - aksi takdirde bu koşulu izleyemem ..... muhtemelen o zaman kalan tüm bekleyenleri kaldıran ayrı bir komut dosyası yazmak daha kolaydır, başka yolu yoktur.

Bu arada, işte başka bir düşünce:

Yaşasın, siparişleri silme sorununu çözmüş gibiyim. "Gerekli" (silinecek) siparişlerin sayısını -- Toplam -- ayrı bir işlev olarak kabul ediyorum, bu işlevi çağırıyorum, sonra ( Toplam> 0) koşuluyla birlikteyken, silme döngüsü for(int i= Total-1 ;i<=0l;i --), yine "gerekli" sayma işlevi , belirtilen seviyeye ulaşıldığında silme sayacı çıkış ile çalışır . Böylece her şey kaldırılır.

Herhangi bir nedenle emirlerden birinin sayma anından sonra aniden kaybolması durumunda burada sonsuz bir döngü meydana gelebilir.


Emirleri kaldırmak için for döngüsü tamamlandıktan sonra her seferinde emirler sayılır, döngüden break çıkışlı while döngüsü yineleme sayacı vardır, sayıcı değerine, sizin dış değişkende belirttiğiniz değere ulaşıldığında, yapabilirsiniz sonucun çıktısı ile çıkmadan önce hata işlemeyi ekleyin
uyarı ( ...)
veya
yazdır ( ...)
peki, ticaret izni için bir çek eklemem nasıl tavsiye edildi. Yani burada döngü yok.


 
Dimka-novitsek :

Güzel gün!! Duruma güzel bir çözüm bulamıyorum. İşte tipik bir sipariş ayarı . Ama robotun parametrelerine sıfır geçersem, yani durup kar alma yok, o zaman hiçbir şey işe yaramaz.

Başka bir if koyabilir ve sırayı ikinci kez sıfırlarla yazabilirsiniz, ancak bu biraz zahmetlidir.

Her şeye yetişkin bir şekilde sahipsiniz - sanat düzeyinde !!! ;)

Ama cidden, az önce yazdıkların hakkında düşünmeyi öğren. Sıfır STOP değerleri ile formülünüze göre zararı durdur ve kar al, KABUL EDİLEMEYEN emir açılış fiyatına eşittir. Başka çözümler önerebilir misiniz (ve çocukça: "beynini zorlayabilir misin" ??? :)))

 
Dimka-novitsek :

Güzel gün!! Duruma güzel bir çözüm bulamıyorum. İşte tipik bir sipariş ayarı. Ama robotun parametrelerine sıfır geçersem, yani durup kar alma yok, o zaman hiçbir şey işe yaramaz.

Başka bir if koyabilir ve sırayı ikinci kez sıfırlarla yazabilirsiniz, ancak bu biraz zahmetlidir.



if (takeprofit!= 0 ) TP = NormalizeDouble (Ask + takeprofit* Point , Digits ); else TP= 0 ;
if (stoploss!= 0 ) SL = NormalizeDouble (Ask - stoploss* Point , Digits ); else SL= 0 ; 
 
rigonich :


... boşuna öylesin (bir insana şans bırakmadın): eğer bir kişi gri maddenin çalışmasını teşvik etmezse, tüm hayatını "verandada" geçirecek - "Söyle bana, İsa aşkına !" :)))