Başka bir zaman dilimine geçerken göstergedeki global bir değişken, yapı nasıl aktarılır? - sayfa 5

 
fxsaber :

Bir performans ölçümü yazarsanız, karşılaştırmak ilginç olacaktır.

TAMAM. Haydi. Sadece rolünüzü kendiniz uygulayın.
İşte benim bölümüm.
Buldozerden aşağıdaki test göstergesini öneriyorum (sarı, TF'ler arasındaki yapı dizisini kaydetmekten ve geri yüklemekten neyin sorumlu olduğunu vurgular):
İlk çağrı, pencere içinde bir Bezier eğrisi ile bağlanan bir rasgele düğüm dizisi (varsayılan 100) oluşturur.
TF değiştiğinde, zamana ve fiyata bağlı düğümler kaydedilir ve değişmez.
Daha iyi ölçüm için düğüm sayısını 1000 yapmak daha iyidir.

 #property indicator_chart_window
#include <Canvas\iCanvas.mqh> // https://www.mql5.com/ru/code/22164
#include <CVar\StructArr.mqh>
#define SIZE 100

struct Node {
   datetime time;
   double price;
};
Node line[];

ulong t0 = GetMicrosecondCount ();
CStructArr<Node> Var( "Bezier" ,line);
ulong t1= GetMicrosecondCount ()-t0;

int OnInit () {
   if ( ArraySize (line) == 0 ) GenerateLine();
   else {
       Print ( "Востановление данных - " + string (t1)+ " микросекунд" );
       Print ( "Время uint[] -> T[] - " + string (Var.uint_to_t)+ " микросекунд" );
   }
   DrawBezier(line);
   return ( INIT_SUCCEEDED );
}

int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]) {
   return (rates_total);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void GenerateLine() {
   ArrayResize (line,SIZE);
   for ( int i = 0 ; i<SIZE; i++) {
      line[i].time = Canvas.TimePos( double ( rand () % W.Width));
      line[i].price = Canvas.Price( rand () % W.Height);
   }
   t0 = GetMicrosecondCount ();
   Var.Set(line);
   t0 = GetMicrosecondCount ()-t0;
   Print ( "Сохранение данных - " + string (t0)+ " микросекунд" );
   Print ( "Время T[] -> uint[] - " + string (Var.t_to_uint)+ " микросекунд" );
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DrawBezier(Node &arr[]) {
   int size = ArraySize (arr);
   if (size> 1 ) {
      Canvas.Erase( 0x00FFFFFF );
       int X[],Y[];
       ArrayResize (Y,size);
       ArrayResize (X,size);
       for ( int i= 0 ; i<size; i++) {
         X[i] = ( int )Canvas.X(line[i].time);
         Y[i] = ( int )Canvas.Y(line[i].price);
      }
      Canvas.PolylineSmooth(X,Y, 0xFFFF00FF , 3 );
      Canvas.Update();
   }
}
//+------------------------------------------------------------------+

 2021.07 . 11 04 : 41 : 02.705 TestVar (EURUSD,M6)     Сохранение данных - 15 микросекунд
2021.07 . 11 04 : 41 : 02.705 TestVar (EURUSD,M6)     Время T[] -> uint [] - 4 микросекунд
2021.07 . 11 04 : 42 : 03.085 TestVar (EURUSD,M10)    Востановление данных - 317 микросекунд
2021.07 . 11 04 : 42 : 03.085 TestVar (EURUSD,M10)    Время uint [] -> T[] - 4 микросекунд
2021.07 . 11 04 : 42 : 10.012 TestVar (EURUSD,M12)    Востановление данных - 878 микросекунд
2021.07 . 11 04 : 42 : 10.012 TestVar (EURUSD,M12)    Время uint [] -> T[] - 4 микросекунд
2021.07 . 11 04 : 42 : 44.235 TestVar (EURUSD,M30)    Востановление данных - 1061 микросекунд
2021.07 . 11 04 : 42 : 44.235 TestVar (EURUSD,M30)    Время uint [] -> T[] - 8 микросекунд
2021.07 . 11 04 : 43 : 20.556 TestVar (EURUSD,M20)    Востановление данных - 303 микросекунд
2021.07 . 11 04 : 43 : 20.556 TestVar (EURUSD,M20)    Время uint [] -> T[] - 4 микросекунд
2021.07 . 11 04 : 43 : 25.339 TestVar (EURUSD,M15)    Востановление данных - 443 микросекунд
2021.07 . 11 04 : 43 : 25.339 TestVar (EURUSD,M15)    Время uint [] -> T[] - 5 микросекунд


BOYUT = 1000 ile:

 2021.07 . 11 05 : 01 : 32.602 TestVar (EURUSD,M5)     Сохранение данных - 41 микросекунд
2021.07 . 11 05 : 01 : 32.602 TestVar (EURUSD,M5)     Время T[] -> uint [] - 26 микросекунд
2021.07 . 11 05 : 01 : 36.541 TestVar (EURUSD,M6)     Востановление данных - 586 микросекунд
2021.07 . 11 05 : 01 : 36.541 TestVar (EURUSD,M6)     Время uint [] -> T[] - 64 микросекунд
2021.07 . 11 05 : 01 : 38.317 TestVar (EURUSD,M10)    Востановление данных - 648 микросекунд
2021.07 . 11 05 : 01 : 38.317 TestVar (EURUSD,M10)    Время uint [] -> T[] - 35 микросекунд
2021.07 . 11 05 : 01 : 40.534 TestVar (EURUSD,M12)    Востановление данных - 567 микросекунд
2021.07 . 11 05 : 01 : 40.534 TestVar (EURUSD,M12)    Время uint [] -> T[] - 36 микросекунд
2021.07 . 11 05 : 01 : 42.814 TestVar (EURUSD,M15)    Востановление данных - 449 микросекунд
2021.07 . 11 05 : 01 : 42.814 TestVar (EURUSD,M15)    Время uint [] -> T[] - 44 микросекунд
2021.07 . 11 05 : 01 : 45.015 TestVar (EURUSD,M20)    Востановление данных - 728 микросекунд
2021.07 . 11 05 : 01 : 45.015 TestVar (EURUSD,M20)    Время uint [] -> T[] - 59 микросекунд
2021.07 . 11 05 : 01 : 47.536 TestVar (EURUSD,M30)    Востановление данных - 2349 микросекунд
2021.07 . 11 05 : 01 : 47.536 TestVar (EURUSD,M30)    Время uint [] -> T[] - 45 микросекунд
Dosyalar:
TestVar.mq5  6 kb
StructArr.mqh  3 kb
 

Genel gösterge değişkenleri için bir çeşit işaretçiye sahip olmak MQL için harika olurdu. Bu, bir kez ve yalnızca gösterge ayarlandığında başlatılacaktır.

Tip:
int globalVar ;

O zaman kaynakları olan tüm bahçeye ihtiyaç kalmayacaktı. Hayal ettik ve bu kadarı yeter, daha fazlasını gördük.

 
Nikolai Semko :

İşte benim bölümüm.

        array out of range in 'iCanvas.mqh' (114,55)
 
Mikhail Nazarenko :

Genel gösterge değişkenleri için bir çeşit işaretçiye sahip olmak MQL için harika olurdu. Bu, bir kez ve yalnızca gösterge ayarlandığında başlatılacaktır.

Tip:
int globalVar ;

O zaman kaynakları olan tüm bahçeye ihtiyaç kalmayacaktı. Hayal ettik ve bu kadarı yeter, daha fazlasını gördük.

PersistentStorage'a ek olarak, ServerSideStorage (en azından sunucu tarafında biraz tasarruf etmek için) ve AuthorOwnedCloud (yazarın bazı verileri yönetmesi için) de harika olurdu .. ama bu 21. yüzyıldan bir şey :-)

Biz hayal ettik bu kadar yeter..

 
Nikolai Semko :

TF değiştiğinde, zamana ve fiyata bağlı düğümler kaydedilir ve değişmez.

Bu, dizi dökümünün istatistiksel olarak anlamlı bir ölçüsü mü?

 
Taras Slobodyanik :

:)

Şimdi kimsenin "koltuk değneği", "bisikletin icadı", "verileri başka bir terminale aktarmadaki zorluklar", " görev MQL araçları kullanılarak çözülmesi gerektiği " hakkında yazmaması garip.
Metakotalardan alınan kararların koltuk değneği ve mauvais tonu olduğu ortaya çıktı)


Ve MQ'nun bu çözümü nerede?
 

fxsaber :

  array out of range in 'iCanvas.mqh' (114,55)


Eski bir sürüm görüyorsunuz.
son sürüm 1.43
https://www.mql5.com/ru/code/22164

Dosyalar:
iCanvas.mqh  52 kb
 
fxsaber :

Bu, dizi dökümünün istatistiksel olarak anlamlı bir ölçüsü mü?

kimse kendi ayarlamalarını yapmaya zahmet etmez.

not
Ve lütfen tanga hakkında konuşmaya başlama.
Bu tür görevlerde ilgisizdirler, bu nedenle sınıfımda uygulanmazlar ve yapım string türünü içeremez.
Bunları uyguladığınızı biliyorum. Ama bu başka bir şeyle ilgili.

 
PapaYozh :

Ve MQ'nun bu çözümü nerede?

evet, elbette, bu çözümler hiç yok.

Bu nedenle, kullanıcılar "koltuk değneği-bisiklet" - FileWriteStruct ve GlobalVariableSet icat eder.
Eh, en hacklenmemiş çözümler, elbette, kaynaklara değişkenler yazmak ve ayrıca global değişkenlere yapılar yazmaktır)

 
Nikolai Semko :

Eski bir sürüm görüyorsunuz.
son sürüm 1.43
https://www.mql5.com/ru/code/22164

Hatayı veren bu sürümdü.