Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 900

 
lufer :
Bu sorunu çözmüyor, şimdi bir şekilde garip, OnTick'te () bir şeylerin yanlış olduğunu görmek - danışmanı terminal penceresine yüklediğimde hiçbir şey olmuyor ve onu silmeye çalıştığımda terminal çok uzun bir süre ölüyor zaman ve ancak o zaman bir süre sonra silinir. Birkaç öğeye manuel olarak değer atamaya çalıştım, her şey yolunda. Görünüşe göre dizi başlatma döngüsüyle ilgili bir şey.

"çözmüyor" ne anlama geliyor? 1'den iki kat daha küçük verileri int dizisine sokarsanız, doğal olarak çıktıda sıfırlar olacaktır. Eh, döngü beceriksizdi.

Bu, çalışması gereken koddur:

 #property strict

extern int N= 100 ;                       // Количество баров

double Mas[];                             // Объявление массива
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit ()
  { 
     ArrayResize (Mas,N);
     return ( INIT_SUCCEEDED );
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit ( const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick ()
  {                                       
       for ( int i= 0 ; i<N; i++)                     // Цикл записи данных
         {                      
    
              Mas[i]= iATR ( NULL , 0 , 5 ,i+1);           // Вычисление значений          
         }
           Print (DoubleToStr(Mas[ 0 ], _Digits ), "," ,DoubleToStr(Mas[ 50 ], _Digits ), "," ,DoubleToStr(Mas[ 99 ], _Digits ));       // Вывод значений
  }
 
evillive :

"çözmüyor" ne anlama geliyor? 1'den iki kat daha küçük verileri int dizisine sokarsanız, doğal olarak çıktıda sıfırlar olacaktır. Eh, döngü beceriksizdi.

Bu, çalışması gereken koddur:

Hayır, bana double Mas[] konusunda kesinlikle doğru söyledin (nedense APR'de tamsayı değerlerindeki noktaların sayısının hesaplandığını düşündüm), mesele şu ki, değerleri değiştirdikten sonra bile değerlerin görüntülenmemesiydi. dizi türü, ancak hatanın nerede olduğunu zaten anladım. Yardımın için çok teşekkürler!
 
Henüz ayrı bir konu oluşturmak istemiyorum, buradan soracağım. OrderSelect işlevinin belgeleri, tüm sipariş verilerinin "yazılım ortamına" kopyalandığını belirtir. Yazılım ortamı yalnızca mevcut tabloya mı yoksa bir bütün olarak terminalin tamamına mı atıfta bulunuyor ? Aynı Expert Advisor'ın kurulu olduğu, aynı anda farklı çizelgelerden birkaç siparişle çalışırken bir sorun olduğu için soruyorum.
 
.roman. :
Henüz ayrı bir konu oluşturmak istemiyorum, buradan soracağım. OrderSelect işlevinin belgeleri, tüm sipariş verilerinin "yazılım ortamına" kopyalandığını belirtir. Yazılım ortamı yalnızca mevcut tabloya mı yoksa bir bütün olarak terminalin tamamına mı atıfta bulunuyor ? Aynı Expert Advisor'ın kurulu olduğu, aynı anda farklı çizelgelerden birkaç siparişle çalışırken bir sorun olduğu için soruyorum.
Bu siparişin açıldığı terminalde çalışan tüm kullanıcı programlarında sipariş verileri mevcuttur.
 
evillive :
Bu siparişin açıldığı terminalde çalışan tüm kullanıcı programlarında sipariş verileri mevcuttur.
O halde, başka bir siparişin verilerinin, aynı zamanda başka bir tablodan seçilen yazılım ortamına yanlış kopyalanmasından kendinizi nasıl koruyabilirsiniz?
 
.roman. :
O halde, başka bir siparişin verilerinin, aynı zamanda başka bir tablodan seçilen yazılım ortamına yanlış kopyalanmasından kendinizi nasıl koruyabilirsiniz?
Farklı siparişlerin verileri hiçbir şekilde kesişmiyor, korunacak bir durum yok.
 
evillive :
Farklı siparişlerin verileri hiçbir şekilde kesişmiyor, korunacak bir durum yok.

O zaman farklı şeylerden bahsediyoruz. Başlangıçta, belgelerde yazılı olan bir "yazılım ortamını" neyin oluşturduğu sorusu vardı. Tüm terminal anlamına mı geliyor?

Spesifik olarak benim sorunum, OrderSelect işlevinde OrderSymbol ve Symbol'ün özel karşılaştırmasına rağmen, bir çiftin grafiğindeki verilerin (emir açılış zamanı, açılış fiyatı vb.) tamamen farklı görünebileceği bir sorun olmasıydı. Yani, bir danışmanın OrderSelect fonksiyonunun bir paritede, örneğin EURUSD'de başka bir paritede çalışması sırasında, danışmanın OrderSelect fonksiyonu ve order ile çalışmaya başlamasının mümkün olup olmadığı sorusuyla ilgileniyorum. bu işlevlere yapılan son çağrıdaki veriler?

 
.roman. :

O zaman farklı şeylerden bahsediyoruz. Başlangıçta, belgelerde yazılı olan bir "yazılım ortamını" neyin oluşturduğu sorusu vardı. Tüm terminal anlamına mı geliyor?

Spesifik olarak benim sorunum, OrderSelect işlevinde OrderSymbol ve Symbol'ün özel karşılaştırmasına rağmen, bir çiftin grafiğindeki verilerin (emir açılış zamanı, açılış fiyatı vb.) tamamen farklı görünebileceği bir sorun olmasıydı. Yani, bir danışmanın OrderSelect fonksiyonunun bir paritede, örneğin EURUSD'de başka bir paritede çalışması sırasında, danışmanın OrderSelect fonksiyonu ve order ile çalışmaya başlamasının mümkün olup olmadığı sorusuyla ilgileniyorum. bu işlevlere yapılan son çağrıdaki veriler?

Bir koda ihtiyacınız var. içinde hata
 
.roman. :

O zaman farklı şeylerden bahsediyoruz. Başlangıçta, belgelerde yazılı olan bir "yazılım ortamını" neyin oluşturduğu sorusu vardı. Tüm terminal anlamına mı geliyor?

Spesifik olarak benim sorunum, OrderSelect işlevinde OrderSymbol ve Symbol'ün özel karşılaştırmasına rağmen, bir çiftin grafiğindeki verilerin (emir açılış zamanı, açılış fiyatı vb.) tamamen farklı görünebileceği bir sorun olmasıydı. Yani, bir danışmanın OrderSelect fonksiyonunun bir paritede, örneğin EURUSD'de başka bir paritede çalışması sırasında, danışmanın OrderSelect fonksiyonu ve order ile çalışmaya başlamasının mümkün olup olmadığı sorusuyla ilgileniyorum. bu işlevlere yapılan son çağrıdaki veriler?

Her siparişin, onu diğerlerinden açıkça ayırt etmenizi sağlayan benzersiz parametreleri vardır. Bu bilet ve açılış zamanıdır (geçmişe bakıyorsak kapanış). Bir retina modeli gibi, tek bir ticaret hesabı içinde benzersizdirler.

OrderSelect fonksiyonunu kullanarak bir sipariş seçmek yeterli değildir, ayrıca seçtiğimiz siparişin bu olup olmadığını veya bir sonrakini seçmemiz gerekip gerekmediğini kontrol etmemiz gerekir.

 
Vinin :
Bir koda ihtiyacınız var. içinde hata
 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
        {
             if ( OrderSelect (i,SELECT_BY_POS) && OrderSymbol()== Symbol () && OrderMagicNumber()==magic)
               {
                   if (OrderType()==OP_BUY)
                     {
                         double openPrice = 0 ;
                        openPrice = OrderOpenPrice();
                         if (Ask>openPrice)
                           {
                               Print ( "OrderSymbol " ,OrderSymbol(), " OrderTicket " ,OrderTicket(), " OrderOpenPrice " ,OrderOpenPrice());
                           }
                     }
                   if (OrderType()==OP_SELL)
                     {
                         double openPrice = 0 ;
                        openPrice = OrderOpenPrice();
                         if (Bid<openPrice)
                           {
                               Print ( "OrderSymbol " ,OrderSymbol(), " OrderTicket " ,OrderTicket(), " OrderOpenPrice " ,OrderOpenPrice());
                           }
                     }
               }
        }

Gereksiz hesaplamalar kaldırıldı (sorunla ilgili değil). Özellikle söveyi görüntülemek için koda baskılar eklendi. Siparişin sembolünü Expert Advisor'ın açıldığı sembolle karşılaştırmasına rağmen, bunu görüntüleyebilir (osi grafiğinden, örneğin bu durumda olduğu gibi euro için sipariş verilerini alın):