Hatalar, hatalar, sorular - sayfa 2451

 
Adında # sembolü bulunan bir dosyayı depoya eklemek mümkün değildir. Bu normal davranış mı yoksa bir hata mı?
 

FX'ten bahsediyorsak, o zaman keneler fiyatı fazla değiştirmez (genellikle). Ancak diğer pazarlarda, bir sipariş, tık tık bir yaklaşımla ciddi şekilde kayabilir. Hala keneler arasında denemekten yanayım - herhangi bir zarar görmüyorum, potansiyel bir fayda var.

denemek lazım...

 
Histerezis iş başında... yapılardaki örtük kopya atama operatörünün çalışması örneğinde.

 #define PRINT(x) Print ( #x, ":" , string (x))

struct MyArray{
   uchar data[];
};


void OnStart (){
   MyArray tmp_arr;
   
   MyArray huge_arr;
   ArrayResize (huge_arr.data, 1000 );
   ArrayInitialize (huge_arr.data, 0x8 );
   
   MyArray small_arr;
   ArrayResize (small_arr.data, 10 );
   ArrayInitialize (small_arr.data, 0x1 );
   
   
   tmp_arr = small_arr;
   Print ( "\r\nTest with small_arr" );
   PRINT( ArraySize (tmp_arr.data));
   PRINT(tmp_arr.data[ 0 ]);
   PRINT(tmp_arr.data[ ArraySize (tmp_arr.data)- 1 ]);
   
   tmp_arr = huge_arr;
   Print ( "\r\nTest with huge_arr" );
   PRINT( ArraySize (tmp_arr.data));
   PRINT(tmp_arr.data[ 0 ]);
   PRINT(tmp_arr.data[ ArraySize (tmp_arr.data)- 1 ]);
   
   tmp_arr = small_arr;
   Print ( "\r\nTest with small_arr" );
   PRINT( ArraySize (tmp_arr.data));
   PRINT(tmp_arr.data[ 0 ]);
   PRINT(tmp_arr.data[ ArraySize (tmp_arr.data)- 1 ]);
}

Sonuç:
 2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   Test with small_arr
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   ArraySize (tmp_arr.data): 10
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   tmp_arr.data[ 0 ]: 1
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   tmp_arr.data[ ArraySize (tmp_arr.data)- 1 ]: 1
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   Test with huge_arr
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   ArraySize (tmp_arr.data): 1000
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   tmp_arr.data[ 0 ]: 8
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   tmp_arr.data[ ArraySize (tmp_arr.data)- 1 ]: 8
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   Test with small_arr
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   ArraySize (tmp_arr.data): 1000
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   tmp_arr.data[ 0 ]: 1
2019.05 . 03 14 : 29 : 14.005 Test_push (EURUSD,H1)   tmp_arr.data[ ArraySize (tmp_arr.data)- 1 ]: 8
 
Sergey Dzyublik :
Histerezis iş başında... yapılardaki örtük kopya operatörünün çalışması örneğinde.

Muhtemelen, bunu tespit etmek için, kodunuzdaki bir hatayı ararken, "burada hiçbir şey çalışamaz, ama yine de kontrol edeceğim" içsel duruma/sebat'a ulaşmak gerekiyordu.

 
fxsaber :

Muhtemelen, bunu tespit etmek için, kodunuzdaki bir hatayı ararken, "burada hiçbir şey çalışamaz, ama yine de kontrol edeceğim" içsel duruma/sebat'a ulaşmak gerekiyordu.

Kod, belirli bir protokol için bir bayt akışını ayrıştırdı.
Paketlenmemiş ve paketlenmemiş verilerin boyutları (bir sonraki kapsülleme düzeyi için veriler) birbirine yakınlaşmadı.

 
Sergey Dzyublik :

Kod, belirli bir protokol için bir bayt akışını ayrıştırdı.
Paketlenmemiş ve paketlenmemiş verilerin boyutları (bir sonraki kapsülleme düzeyi için veriler) birbirine yaklaşmadı.

Böyle bir görevle, tespit etmek zor değildir. Şanslı.
 
Sergey Dzyublik :
Histerezis iş başında... yapılardaki örtük kopya operatörünün çalışması örneğinde.

Soru nedir?

 void OnStart ()
{
         int a[]; ArrayResize ( a, 3 ); ArrayInitialize ( a, 3 );
         int b[]; ArrayResize ( b, 2 ); ArrayInitialize ( b, 2 );

MQL'de koşullu gösterim

 //                 a = b;

eşdeğerdir

         ArrayCopy ( a,  b );

Sonuç:

         ArrayPrint ( a );
}

2 2 3

 
A100 :

Soru nedir?


Atama kopyalama operatörü, bence, yalnızca dizi öğelerini değil, aynı zamanda gerçek miktarda ayrılmış bellek bırakarak numaralarını da kopyalamalıdır.

Ve şimdi şunlar oluyor:

int size;
size = 4; // size == 4
size = 8; // size == 8
size = 4; // size == 8



Kaynak:

 struct MyArray{
   uchar data[];
}

MyArray GetArray( int i){
   MyArray arr;
   
   if (i% 2 == 0 ){
       ArrayResize (arr.data, 8 );
       ArrayInitialize (arr.data, 0x8 );
   } else {
       ArrayResize (arr.data, 4 );
       ArrayInitialize (arr.data, 0x4 );
   }
   return arr;
}

void OnStart (){
   MyArray arr_1 = GetArray( 1 );
   ArrayPrint (arr_1.data);		// 4 4 4 4
   
   MyArray arr_2 = GetArray( 2 );         
   ArrayPrint (arr_2.data);              // 8 8 8 8 8 8 8 8
   
   arr_2 = arr_1;
   ArrayPrint (arr_2.data);              // 4 4 4 4 8 8 8 8
}
 
Sergey Dzyublik :


Kopyalama operatörü, yalnızca dizi öğelerini değil, aynı zamanda numaralarını da kopyalamalı ve ayrılmış bellek miktarını geçerli bırakmalıdır.

Neden o zaman

 struct MyArray {
         uchar data[];
};
void OnStart ()
{
        { uchar    a[], b[]; a = b; } //(1) Error
        { MyArray a,   b;   a = b; } //(2) нормально
}

(1) durumda bir hata var, ancak (2)'de her şey yolunda!? Kimin umrunda?

Ve öyle ki diziler a = b kurallarına göre değil, ArrayCopy ( a, b ) kurallarına göre kopyalanır.

a = b kuralına göre değil, çünkü yok, var olsaydı hata olmazdı (1)


 
Igor Zakharov :

Her onay işaretine güveniyorsanız, kaynak yoğundur, özellikle strateji test cihazında fark edilir. Yeniden hesaplamayı sadece Ticaret etkinliğinde yapmak daha doğru değil mi, yani. Açık pozisyonlar listesinde gerçekten bir şey ne zaman değişir? OnTradeTransaction(), Expert Advisor'ın çalışmasında kullanıcı müdahalesi üzerindeki kontrolü basitleştirir. (örnekler var :)

Bu robotta, şemaya göre ızgaraları kapatma olasılığını test ettim: kârsız + kârlı> X, ardından her ikisini de kapatın (genellikle farklı sembollerde). Ancak başarısızlık elde edilir, çünkü. kapalı olmalarına rağmen, test cihazı bunu bilmiyor ve bir sonraki yinelemeye geçiyor, mevcut olanları zaten kapalı olanlarla hatalı bir şekilde "eşleştiriyor". Onlar. Her kapanıştan sonra bir yeniden hesaplama eklemek zorunda kaldım.

Sayaç sıfırlamalı bir yeniden hesaplamam var ve ilk önce +1 / -1 değil, tüm açık olanlar için

Katılıyorum, en başından OnTradeTransaction() kullanmak riskliydi.Genel olarak , isteklerin eşzamansız olmadığı durumlarda - sadece ondan kaynaklanan sorunlar olduğunda muhtemelen reddedeceğim.

Hiç riskli değil. Soru yalnızca eylem ve olaylar dizisinin organizasyonundadır. Barabashka doğru bir şekilde daha fazlasını söyledi, çifti kapattı ve bir sonraki tike kadar döngüden çıktı. Bir sonraki tıklamada fiyatların olduğundan daha kötü olacağı bir gerçek değil. Belki biraz sonra kapatmak daha iyi olur ama neyin neyin kapandığı konusunda kafa karışıklığı olmayacak.

İkinci seçenek: Döngüyü PositionsTotal'a göre değil, önceden oluşturulmuş bir diziye göre düzenleyin. Ve bir çifti kapatırken bu biletler diziden çıkarılır. Bu, kapatılan pozisyonların tekrar kapatılmasını önleyecektir. Genel olarak, bir fantezi uçuşu ve eylem mantığı.