Hatalar, hatalar, sorular - sayfa 1886

 
Vladimir Karputov :


Ve soru nedir?

"İ" numarasının altında, falanca sembolüyle falan bileti olan bir pozisyon olduğunu nerede görebilirsiniz? Genel olarak, seri numarasının basit çıktısına ek olarak, biletin ve sembolün de çıktısını alın.


Bir fonksiyonun farklı durumlar için aynı değeri vermesi normal mi?

Not: Bu arada gönderide bir soru vardı.

Sonuç olarak, bir satın alma seçerseniz, (PositionGetInteger( POSITION_TYPE )) işlevi 0 döndürür

ve var olmayan bir konum seçerseniz, işlev de 0 döndürür

 
Alexandr Bryzgalov :
Bir fonksiyonun farklı durumlar için aynı değeri vermesi normal mi?


"Farklı durumlar" nelerdir? Ve yukarıda önerdiğim gibi yapın:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Vladimir Karputov , 2017.05.12 11:15

...

Genel olarak, seri numarasının basit çıktısına ek olarak, biletin ve sembolün de çıktısını alın.


 
Alexandr Bryzgalov :

Kontrol etmen gerektiğini anlıyorum, ama her şey olabilir ...

PozisyonGetTamsayı

İşlev, daha önce PositionGetSymbol veya PositionSelect işlevi kullanılarak seçilen bir açık pozisyonun istenen özelliğini döndürür. Konum özelliği, tarih saat, int türünde olmalıdır. İşlev için 2 seçenek vardır.

1. Doğrudan özelliğin değerini döndürür.

uzun PositionGetInteger (
    ENUM_POSITION_PROPERTY_INTEGER    özellik_kimliği        // özellik tanımlayıcısı
);

2. İşlevin başarısına bağlı olarak doğru veya yanlış döndürür. Başarılı olursa, özellik değeri, son parametre olarak referans tarafından geçirilen alıcı değişkene yerleştirilir.

bool PositionGetInteger (
    ENUM_POSITION_PROPERTY_INTEGER    property_id , // özellik tanımlayıcısı
    uzun&                             long_var           // özellik değerini buradan al
);

Seçenekler

özellik_kimliği

[içinde] Konum özelliği tanımlayıcısı. Değer, ENUM_POSITION_PROPERTY_INTEGER numaralandırma değerlerinden biri olabilir.

long_var

[out] İstenen özelliğin değerini alan long türünde bir değişken.

Geri dönüş değeri

long türünde bir değer. Başarısızlık durumunda 0 döndürür.

Büyü ile durum daha incedir. Bu nedenle, (PositionGetInteger(POSITION_TICKET) > 0) kontrol etmek mantıklıdır.
Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber :
Büyü ile durum daha incedir. Bu nedenle, (PositionGetInteger(POSITION_TICKET) > 0) kontrol etmek mantıklıdır.

Evet, bir kontrol yapman gerekiyor gibi görünüyor.

ancak bir fonksiyon yazarken, farklı durumlarda her zaman farklı bir değer döndürmeye çalışırsınız.

Farklı durumlarda fonksiyondan bir değer çıkmasının yanlış olduğunu düşünüyorum.
 
Alexandr Bryzgalov :

ancak bir fonksiyon yazarken, farklı durumlarda her zaman farklı bir değer döndürmeye çalışırsınız.

Yani sihirli ve bu nedenle anılır. PositionGetInteger( POSITION_MAGIC ) hatası durumunda ne döndürülür?
 
fxsaber :
Yani sihirli ve bu nedenle anılır. PositionGetInteger( POSITION_MAGIC ) hatası durumunda ne döndürülür?
0 - pozisyon manuel olarak açılır. Sağ?
 
Alexandr Bryzgalov :

Bir fonksiyonun farklı durumlar için aynı değeri vermesi normal mi?

Not: Bu arada gönderide bir soru vardı.

Sonuç olarak, bir satın alma seçerseniz, (PositionGetInteger( POSITION_TYPE )) işlevi 0 döndürür

ve var olmayan bir konum seçerseniz, işlev de 0 döndürür


Sonuç olarak, bir pozisyon seçmek için GARANTİ OLDUĞUNUZDA (örneğin, döngüde olduğu gibi) ilk arama kullanılır. Ve işte aramanın ikinci şekli

 bool    PositionGetInteger ( 
   ENUM_POSITION_PROPERTY_INTEGER   property_id,     // идентификатор свойства 
   long &                           long_var         // сюда примем значение свойства 
   );

konumun pisi balığı yuvasından seçildiği durumlar için.


Bunu yapın ve "sonuç" değişkenine ne elde ettiğinize güvenin - her şey yerine oturacaktır:

 //+------------------------------------------------------------------+
//|                                                         posi.mq5 |
//|                                                      sanyooooook |
//|                                                 http://sn-bot.ru |
//+------------------------------------------------------------------+
#property copyright "sanyooooook"
#property link        "http://sn-bot.ru"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   int tot= PositionsTotal ();
   for ( int i= 0 ;i<tot;i++)
     {
       ulong OrderTicket_= PositionGetTicket (i);
       long cmd= PositionGetInteger ( POSITION_TYPE );
       if (OrderTicket_> 0 && cmd<= POSITION_TYPE_SELL )
         Print ( "N" ,i, "cmd=" ,cmd);

     }
   ulong OrderTicket_= PositionGetTicket ( 100 );
   long cmd=- 3 ;
   bool result= PositionGetInteger ( POSITION_TYPE ,cmd);
   if (result)
       Print ( "N100 cmd=" ,cmd);
  }
//+------------------------------------------------------------------+
 
Alexandr Bryzgalov :
0 - pozisyon manuel olarak açılır. Sağ?
Evet. Ancak başka herhangi bir değer yanıltıcı olacaktır.
 
Vladimir Karputov :


Sonuç olarak, bir pozisyon seçmek için GARANTİ OLDUĞUNUZDA (örneğin, döngüde olduğu gibi) ilk arama kullanılır. Ve işte aramanın ikinci şekli

konumun pisi balığı yuvasından seçildiği durumlar için.


Bunu yapın ve "sonuç" değişkenine ne elde ettiğinize güvenin - her şey yerine oturacaktır:

Bununla ilgili bir soru değil ve bununla ilgili farklı durumlarda bu fonksiyon bir değer döndürür.

nasıl kontrol edileceğini biliyorum

Başlangıçta soru, bunun normal olup olmadığıydı.

Not: İstemeden bir hata yapılabilir ve sonra 100.000 kodda arama yapmaktan yorulursunuz.

Ne? Hata yapmaya gerek yok mu? )

 
Alexandr Bryzgalov :

Bununla ilgili bir soru değil ve bununla ilgili farklı durumlarda bu fonksiyon bir değer döndürür.

nasıl kontrol edileceğini biliyorum

Başlangıçta soru, bunun normal olup olmadığıydı.


Görüyorum ki gösterdiğim kodu kontrol etmemişsin. Şunu yapalım: Önce kontrol et, sonra soruyu tekrar sor.