다른 기간으로 전환할 때 표시기의 전역 변수, 구조를 전송하는 방법은 무엇입니까? - 페이지 5

 
fxsaber :

성능 측정을 작성하면 비교하는 것이 흥미로울 것입니다.

확인. 하자. 당신의 역할을 직접 구현하십시오.
여기 내 몫입니다.
불도저에서 다음 테스트 표시기를 제안합니다(노란색은 TF 간의 구조 배열을 저장하고 복원하는 역할을 강조 표시함).
첫 번째 호출은 창 내에서 베지어 곡선으로 연결된 임의의 노드(기본값 100) 배열을 생성합니다.
TF가 변경되면 시간과 가격에 묶인 노드가 저장되고 변경되지 않습니다.
더 나은 측정을 위해 노드 수를 1000으로 만드는 것이 좋습니다.

 #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 микросекунд


크기 = 1000:

 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 микросекунд
파일:
TestVar.mq5  6 kb
StructArr.mqh  3 kb
 

MQL이 전역 표시기 변수 에 대한 일종의 포인터를 갖는 것이 좋습니다. 표시기가 설정된 경우에만 한 번만 초기화됩니다.

유형:
int 전역 변수 ;

그러면 자원이 있는 정원 전체가 필요하지 않습니다. 우리는 꿈을 꾸었고 그것으로 충분합니다. 우리는 더 멀리 보았습니다.

 
Nikolai Semko :

여기 내 몫입니다.

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

MQL이 전역 표시기 변수 에 대한 일종의 포인터를 갖는 것이 좋습니다. 표시기가 설정된 경우에만 한 번만 초기화됩니다.

유형:
int 전역 변수 ;

그러면 자원이 있는 정원 전체가 필요하지 않습니다. 우리는 꿈을 꾸었고 그것으로 충분합니다. 우리는 더 멀리 보았습니다.

PersistentStorage 외에도 ServerSideStorage(서버 측에 최소한의 것을 저장하기 위해) 및 AuthorOwnedCloud(저자가 일부 데이터를 관리하기 위해)도 훌륭할 것입니다. 그러나 이것은 21세기의 것입니다 :-)

우리는 꿈을 꾸었고 그것으로 충분합니다..

 
Nikolai Semko :

TF가 변경되면 시간과 가격에 묶인 노드가 저장되고 변경되지 않습니다.

이것이 통계적으로 유의미한 배열 캐스팅 측정값입니까?

 
Taras Slobodyanik :

:)

이제 아무도 "목발", "자전거의 발명", "다른 터미널로 데이터 전송의 어려움", " MQL 도구를 사용하여 작업을 해결해야 한다 "에 대해 쓰지 않는 것이 이상합니다.
메타쿼타의 결정은 목발과 자주색 톤임이 밝혀졌습니다.


그리고 MQ의 이 솔루션은 어디에 있습니까?
 

fxsaber :

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


오래된 버전이 보입니다.
최신 버전 1.43
https://www.mql5.com/ru/code/22164

파일:
iCanvas.mqh  52 kb
 
fxsaber :

이것이 통계적으로 유의미한 배열 캐스팅 측정값입니까?

아무도 자신의 조정을 도입하는 것을 귀찮게하지 않습니다.

추신
그리고 끈 팬티에 대해 이야기하지 마십시오.
이러한 유형의 작업에서는 관련이 없으므로 내 클래스에서 구현되지 않으며 내 구조에는 string type 이 포함될 수 없습니다.
나는 당신이 그것들을 구현했다는 것을 알고 있습니다. 그러나 그것은 다른 것에 관한 것입니다.

 
PapaYozh :

그리고 MQ의 이 솔루션은 어디에 있습니까?

예, 물론 이러한 솔루션은 전혀 존재하지 않습니다.

따라서 사용자는 "목발-자전거"( FileWriteStructGlobalVariableSet )를 발명합니다.
음, 물론 가장 해킹되지 않은 솔루션은 리소스에 변수를 작성하고 전역 변수에 구조를 작성하는 것입니다)

 
Nikolai Semko :

오래된 버전이 보입니다.
최신 버전 1.43
https://www.mql5.com/ru/code/22164

이 버전에서 오류가 발생했습니다.