mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 7

 
RAM 파일로 작업하려면 다음 구성을 사용할 수 있습니다.
const int handleRAM = FileOpen ( "\\\\.\\pipe\\RAM" , FILE_READ | FILE_WRITE | FILE_BIN );

이전에 해당 파일을 생성 했습니다.

이러한 구현을 사용하면 HDD / SDD를 강간하지 않고 모든 차원의 어레이(및 다른 어레이)를 서로 복사하는 것이 편리하고 빠릅니다.

// Копирование массивов любых размерностей (и разных) друг в друга
#define ARRAYCOPY(Dest, Source) \
   if ( ArraySize (Source) > 0 )                                                                  \
  {                                                                                           \
     const int handleRAM = FileOpen ( "\\\\REN\\pipe\\RAM" , FILE_READ | FILE_WRITE | FILE_BIN );  \
                                                                                              \
     if (handleRAM != INVALID_HANDLE )                                                          \
    {                                                                                         \
       if ( FileWriteArray (handleRAM, Source) > 0 )                                              \
         FileReadArray (handleRAM, Dest);                                                       \
                                                                                              \
       FileClose (handleRAM);                                                                   \
    }                                                                                         \
  }
이것은 보편적인 솔루션입니다. 이러한 복사의 고전은 다음과 같습니다.
// Копирует двумерный массив в одномерный
#define MATRIX_TO_VECTOR(Matrix, Vector)      \
   if ( ArraySize (Matrix) > 0 )                  \
  {                                           \
     const int Range1 = ArrayRange (Matrix, 0 ); \
     const int Range2 = ArrayRange (Matrix, 1 ); \
                                              \
     ArrayResize (Vector, Range1 * Range2);     \
                                              \
     int k = 0 ;                                \
                                              \
     for ( int i = 0 ; i < Range1; i++)          \
       for ( int j = 0 ; j < Range2; j++)        \
      {                                       \
        Vector[k] = Matrix[i][j];             \
                                              \
        k++;                                  \
      }                                       \
  }

// Копирует одномерный массив в  двумерный
#define VECTOR_TO_MATRIX(Vector, Matrix)                               \
   if ( ArraySize (Vector) > 0 )                                           \
  {                                                                    \
     const int Size = ArraySize (Vector);                                \
     const int Range = ArrayRange (Matrix, 1 );                           \
                                                                       \
     ArrayResize (Matrix, Size / Range + ((Size % Range == 0 ) ? 0 : 1 )); \
                                                                       \
     for ( int i = 0 ; i < Size; i++)                                     \
      Matrix[i / Range][i % Range] = Vector[i];                        \
  }
함수에 일반 배열을 전달할 수 없기 때문에 함수 대신 매크로가 사용됩니다.
 
드미트리 페도세예프 :

요점은 OnTradeTransaction()에서 OrderSend 직후에 작동하지 않는다는 것입니다.

요컨대, 논쟁의 주제에 대해 깊이 파고들지 않고 논쟁을 벌이는 연인들의 무리가 있을 뿐입니다.

OrderSend() 직후에 작업을 수행해야 하는 경우 알고리즘에는 두 가지 변형이 있습니다.

1. 주문 및 거래 목록 업데이트 대기 루프를 켭니다.

2. OnTick()을 종료하고 OnTradeTransaction()이 실행될 때까지 기다립니다.

3. 새로운 주문이나 거래가 목록에 나타났는지 체크하세요.

나는 2와 3을 선택))
 
mql5에서 4중 MODE_MARGINREQUIRED를 대체할 수 있는 것은 무엇입니까?
 
Artyom Trishkin :
mql5에서 4중 MODE_MARGINREQUIRED를 대체할 수 있는 것은 무엇입니까?

포럼 회원 중 누구도 이것을 알지 못하기 때문에 개발자에게 질문해야 하는 내용입니다. 다른 스레드에서 이 질문을 4번 했습니다. 일단 "검색 사용"이라는 대답을 얻었지만 검색에 100개 이상의 질문이 있고 단일 답변이 없습니다. 개발자는 질문에 대답하지 않습니다 . 아마도 상위 5위 안에는 예금 통화 이외의 쌍에 대한 마진을 얻을 수 있는 방법이 없기 때문일 것입니다.

여하튼 모든 것이 여전히 상위 5위 안에 들며, 앞으로도 그럴 것 같지만, 모두가 필요로 하는 OpenGL이 있습니다 =)

 
Artyom Trishkin :
mql5에서 4중 MODE_MARGINREQUIRED를 대체할 수 있는 것은 무엇입니까?
OrderCalcMargin() 시도 https://www.mql5.com/ru/docs/trading/ordercalcmargin
 
안드레이 바리노프 :
OrderCalcMargin() 시도

이것은 이해할 수 있지만 표시기에서 작동하지 않습니다.

   double One_Lot= 0.0 ;
   OrderCalcMargin ( ORDER_TYPE_BUY , Symbol (), 1.0 , SymbolInfoDouble ( Symbol (), SYMBOL_ASK ),One_Lot);
   Comment (One_Lot); // залог на 1 лот
 
비탈리 무지첸코 :

이것은 이해할 수 있지만 표시기에서 작동하지 않습니다.

   double One_Lot= 0.0 ;
   OrderCalcMargin ( ORDER_TYPE_BUY , Symbol (), 1.0 , SymbolInfoDouble ( Symbol (), SYMBOL_ASK ),One_Lot);
   Comment (One_Lot);
https://www.mql5.com/ru/docs/runtime/running 표시기에서 작동하지 않는다는 도움말에 이에 대해 직접 작성되어 있습니다.
 
안드레이 바리노프 :
https://www.mql5.com/ru/docs/runtime/running 표시기에서 작동하지 않는다는 도움말에 이에 대해 직접 작성되어 있습니다.
프로그램 유형과 독립적인 계산을 원합니다.
 
Artyom Trishkin :
프로그램 유형과 독립적인 계산을 원합니다.
오오 저도 원하던거네요 :)
 
안드레이 바리노프 :
오오 나도 많이 갖고싶다 :)
글쎄요... 그건 답이 아닙니다...
그리고이 질문은 지점의 주제에 관한 것입니다.