2030년에 Metatrader X를 어떻게 보십니까? - 페이지 6

 
fxsaber :

글로벌에 쓰는 모든 데이터는 여기 에 해당하는 포함에서 볼 수 있습니다.

알겠습니다. 이 솔루션을 보지 못했습니다.

바로 알 수 없으니 확인이 필요하다

 
fxsaber :

글로벌에 쓰는 모든 데이터는 여기 에 해당하는 포함에서 볼 수 있습니다.

진드기 외에 다른 데이터의 거대한 세계가 있다는 것을 알고 계십니까? 이상하게도 - 클래스 인스턴스의 데이터를 쓰거나 읽는 것이 바람직할 것입니다.

 
Igor Makanu :

알겠습니다. 이 솔루션을 보지 못했습니다.

바로 알 수 없으니 확인이 필요하다

예, 리소스에서 원시 데이터 쓰기 및 읽기. 좋은 예, 감사합니다!

근데 나한테 별로 존경을 받지 못하는 fxsaber는 어쩌고, 수업도 마찬가지야? 정의를 사용하더라도 사람들은 미쳐 가지 않겠다고 약속합니다))

 
Alexey Volchanskiy :

정말 콜라, 오, 할머니들


아니다 . 진저브레드 선물.

 
Alexey Volchanskiy :

진드기 외에 다른 데이터의 거대한 세계가 있다는 것을 알고 계십니까?

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

문자열 유형의 터미널 전역 변수가 필요합니까?

fxsaber , 2017.04.10 18:25

 void OnStart ()
{
   string Name = "Name" ;

// Записываем/считываем строки
  _GlobalVariableSet(Name, "Hello World!" );
   Print (_GlobalVariableGet< string >(Name));

// Записываем/считываем простые структуры
   MqlTick Tick;
   SymbolInfoTick ( _Symbol , Tick);

  _GlobalVariableSet(Name, Tick);
   Print (_GlobalVariableGet< MqlTick >(Name).time);

// Записываем/считываем массивы
   MqlTick Ticks[ 2 ];

  Ticks[ 0 ] = Tick;
  Ticks[ 1 ] = Tick;

  _GlobalVariableSet(Name, Ticks);

   MqlTick NewTicks[];

//  if (_GlobalVariableGet(Name, NewTicks)) // https://www.mql5.com/ru/forum/1111/page1868#comment_4853867
//    Print(NewTicks[1].time);

  _GlobalVariableDel(Name);
}


이상하게도 - 클래스 인스턴스의 데이터를 쓰거나 읽는 것이 바람직할 것입니다.

나는 개발자와 같은 구조에 데이터를 저장합니다. 편리하고 논리적입니다. 따라서 구조체에 대한 포인터가 없음에도 불구하고 이 문제에서 클래스를 찾지 않았습니다.

 
fxsaber :


나는 개발자와 같은 구조에 데이터를 저장합니다. 편리하고 논리적입니다. 따라서 구조체에 대한 포인터가 없음에도 불구하고 이 문제에서 클래스를 찾지 않았습니다.

확인을 위해 스크립트를 수집했지만 MqlTick 배열을 읽는 방법을 몰랐습니다.

 #property strict
#include <fxsaber\TypeToBytes.mqh>         //https://www.mql5.com/ru/code/16282
#define POSTFIX "___"

string GetName( const string Name, const int Num, const string PostFix = POSTFIX )
{
   return (Name + PostFix + ( string )Num);
}

bool _GlobalVariableDel( const string Name )
{
   return ( GlobalVariableDel (Name) && ( GlobalVariablesDeleteAll (Name + POSTFIX) >= 0 ));
}

#define GLOBAL_VARIABLE_SET(A)                                                        \
template < typename T>                                                                 \
   datetime _GlobalVariableSet( const string Name, const T A )                         \
  {                                                                                   \
    _GlobalVariableDel(Name);                                                         \
                                                                                      \
     double Array[];                                                                   \
                                                                                      \
     const datetime Res = GlobalVariableSet (Name, _ArrayCopy(Array, _R(Value).Bytes)); \
     const int Size = ArraySize (Array);                                                \
                                                                                      \
     for ( int i = 0 ; i < Size; i++)                                                    \
       GlobalVariableSet (GetName(Name, i), Array[i]);                                  \
                                                                                      \
     return (Res);                                                                      \
  }

GLOBAL_VARIABLE_SET(Value)
GLOBAL_VARIABLE_SET(&Value)
GLOBAL_VARIABLE_SET(&Value[])

#define GLOBAL_VARIABLE_GET(A)                                              \
  {                                                                         \
     double Array[];                                                         \
                                                                            \
     const int Amount = ( int )Tmp;                                            \
     const int Size = ArrayResize (Array, Amount / sizeof ( double ) +           \
                                 ((Amount % sizeof ( double ) == 0 ) ? 0 : 1 )); \
                                                                            \
     for ( int i = 0 ; i < Size; i++)                                          \
      Array[i] = GlobalVariableGet (GetName(Name, i));                       \
                                                                            \
     uchar Bytes[];                                                          \
                                                                            \
    _ArrayCopy(Bytes, Array, 0 , 0 , Amount);                                 \
                                                                            \
    _W(A) = Bytes;                                                          \
  }

template < typename T>
const T _GlobalVariableGet( const string Name )
{
  T Res; // https://www.mql5.com/ru/forum/1111/page1869#comment_4854112

   double Tmp;

   if ( GlobalVariableGet (Name, Tmp))
    GLOBAL_VARIABLE_GET(Res)

   return (Res);
}

template < typename T>
bool _GlobalVariableGet( const string Name, T &Value )
{
   double Tmp;
   const bool Res = GlobalVariableGet (Name, Tmp);

   if (Res)
    GLOBAL_VARIABLE_GET(Value)

   return (Res);
}


void OnStart ()
  {
   string Name= "Name" ;

// Записываем/считываем строки
   _GlobalVariableSet(Name, "Hello World!" );
   Print (_GlobalVariableGet< string >(Name));

// Записываем/считываем простые структуры
   MqlTick Tick;
   SymbolInfoTick ( _Symbol ,Tick);

   _GlobalVariableSet(Name,Tick);
   Print ( "time --> " ,_GlobalVariableGet< MqlTick >(Name).time);
   Print ( "bid --> " ,_GlobalVariableGet< MqlTick >(Name).bid);

// Записываем/считываем массивы
   MqlTick Ticks[ 2 ];

   Ticks[ 0 ] = Tick;
   Ticks[ 1 ] = Tick;

   _GlobalVariableSet(Name,Ticks);
   
//    Print("time --> ",_GlobalVariableGet<MqlTick>(Name).time);
//    Print("bid --> ",_GlobalVariableGet<MqlTick>(Name).bid);
   
   _GlobalVariableDel(Name);
  }
//+------------------------------------------------------------------+


추신: 컴파일러에서 초기화되지 않은 변수 'Res'의 사용 가능성을 경고하고 가능한 경우 제거합니다.


 
Alexey Volchanskiy :

개인적으로 멀티태스킹이 그리워요. 2000년에 RSDN 프로그래머 포럼에서 방목하던 중 펜티엄 4가 막 출시된 걸로 기억합니다(10줄의 향수, 젊음 건너뛰기). 그리고 인텔은 로드맵에서 곧 15GHz 주파수를 극복할 것이라는 로드맵을 내세우고 있었습니다. P4! 예, 농담이 아닙니다. 매번 그랬습니다. 글쎄, 그들이 정말로 그렇게 생각했는지, 아니면 그것이 스터핑인지 모르지만 나는 그것을 믿지 않았고 나는 여전히 철인이다.

그런 다음 멀티 코어 시스템이 곧 시작될 것이라는 사실에 대해 큰 스레드를 만들었습니다. 알다시피, 준비해야 합니다. 사람들은 동화처럼 웃었습니다. 병렬 코드를 어떻게 프로그래밍할 수 있습니까? 환상적이야.

그리고 누가 옳았습니까? 인텔은 15GHz로 실패했고, 듀얼 코어 펜티엄 D는 데스크탑 버전에, 그 다음에는 획기적인 듀오로 등장했습니다.

그리고 MQL5의 우리는 여전히 199*s에 살고 있습니다. 멀티 스레딩도 예외도 없습니다 ... 수박에 대한 슬픔과 함께 갔다 ...

MT5의 설명에서 그것은 다중 스레드임을 따릅니다. 사용자 작업의 최신 프로세서가 실행 코드의 가비지 덤프라는 사실 때문에 수박을 먹어야하며 모든 스레드에 실용적인 의미가 없습니다. 기업은 효율적인 코드나 컴퓨팅 성능의 합리적인 사용에 관심이 없습니다. 충분하지 않습니다. 더 많이 구입하십시오.

추신 아마 1.5GHz? 나는 실수할 수 있다. 그 당시 그들은 5nm에서 기술의 물리적 한계를 결정했고 그로부터 추정된 GHz를 결정했다. 저는 200nm에서 5nm로 몇 년 안에 이와 같이 전환하고 싶습니다. 물론 그렇게 하고 싶었습니다.

 

2030년에는 메타트레이더가 금지되고,

모든 것을 금지할 사람이 집권할 것입니다.

그러면 세상에 하나의 지불 시스템이 있게 될 것입니다.

그리고 전 세계에 하나의 통치자.

그는 모든 사람을 위한 칩 설치를 시작하고 모든 사람을 GLONASS, 5G의 통제 하에 둘 것입니다.

현금이 없을 것입니다. 계산은 신체에 이식된 칩을 통해 이루어집니다.

인터넷을 통한 거래는 사회의 특권층-이 통치자를 생각하는 사람들에게만 주어질 것입니다-진정한 신 ...


아멘.

 
Igor Makanu :

확인을 위해 스크립트를 수집했지만 MqlTick 배열을 읽는 방법을 몰랐습니다.

이 오버로드 추가

 template < typename T>
bool _GlobalVariableGet( const string Name, T &Value[] )
{
   double Tmp;
   const bool Res = GlobalVariableGet (Name, Tmp);

   if (Res)
  {
     double Array[];                                                         
                                                                            
     const int Amount = ( int )Tmp;                                            
     const int Size = ArrayResize (Array, Amount / sizeof ( double ) +           
                                 ((Amount % sizeof ( double ) == 0 ) ? 0 : 1 )); 
                                                                            
     for ( int i = 0 ; i < Size; i++)                                          
      Array[i] = GlobalVariableGet (GetName(Name, i));                       
                                                                                                                                                        
    _ArrayCopy(Value, Array, 0 , 0 , Amount);
  }  

   return (Res);
}
이고르 마카누 :

추신: 컴파일러에서 초기화되지 않은 변수 'Res'의 사용 가능성을 경고하고 가능한 경우 제거합니다.

이 줄 추가

  T Res;
   ZeroMemory (Res);
 
Unicornis :

MT5의 설명에서 그것은 다중 스레드임을 따릅니다. 사용자 작업의 최신 프로세서가 실행 코드의 가비지 덤프라는 사실 때문에 수박을 먹어야하며 모든 스레드에 실용적인 의미가 없습니다. 기업은 효율적인 코드나 컴퓨팅 성능의 합리적인 사용에 관심이 없습니다. 충분하지 않습니다. 더 많이 구입하십시오.

추신 아마 1.5GHz? 나는 실수할 수 있다. 그 당시 그들은 5nm에서 기술의 물리적 한계를 결정했고 그로부터 추정된 GHz를 결정했다. 저는 200nm에서 5nm로 몇 년 안에 이와 같이 전환하고 싶습니다. 물론 그렇게 하고 싶었습니다.

나는 글을 읽지 못하고 지침을 읽지 않습니다. 하지만 MT5는 옵티마이저에서만 멀티쓰레드인걸로 알고있음) 테스터에서도 하나의 쓰레드에서만 동작한다.

OpenCL을 병렬화에 사용할 수 있지만 이 기술 자체는 단순히 MT5에서 지원됩니다.

로드맵의 15GHz에 관해서는 프로그래머의 기억이 있다고 확신합니다. 내가 본 것을 결코 잊지 못할 것입니다.