MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1154

 

MT4

이 항목은 무엇이며 어떤 기능을 합니까? 어디에도 설명이 없습니까?

기본적으로 비활성화하려면 어떻게 해야 합니까?


 
void OnStart ()
  {
string text= "Hello man" ;
   string keystr= "ABCDEFG" ;
   uchar src[],dst[],key[];
//--- подготовка ключа шифрования
   StringToCharArray (keystr,key);
//--- подготовка исходного массива src[]
   StringToCharArray (text,src);
//--- вывод исходных данных
   PrintFormat ( "Initial data: size=%d, string='%s'" , ArraySize (src), CharArrayToString (src));
//--- шифрование массива src[] методом DES с 56-битным ключом key[]
   int res= CryptEncode ( CRYPT_AES256 ,src,key,dst);
//--- проверка результата шифрования
   if (res> 0 )
     {
       //--- вывод шифрованных данных
       PrintFormat ( "Encoded data: size=%d %s" ,res,ArrayToHex(dst));
       //--- расшифровка данных массива dst[] методом DES с 56-битным ключом key[]
      res= CryptDecode ( CRYPT_AES256 ,dst,key,src);
       //--- проверка результата
       if (res> 0 )
        {
         //--- вывод дешифрованных данных
         PrintFormat ( "Decoded data: size=%d, string='%s'" , ArraySize (src), CharArrayToString (src));
        }
       else
         Print ( "Ошибка в CryptDecode. Код ошибки=" , GetLastError ());
     }
   else
       Print ( "Ошибка в CryptEncode. Код ошибки=" , GetLastError ());
  }
//+------------------------------------------------------------------+
string ArrayToHex( uchar &arr[], int count=- 1 )
  {
   string res= "" ;
//--- проверка размера
   if (count< 0 || count> ArraySize (arr))
      count= ArraySize (arr);
//--- преобразование в шестнадцатиричную строку
   for ( int i= 0 ; i<count; i++)
      res+= StringFormat ( "%.2X" ,arr[i]);
//---
   return (res);
  }

암호화 매뉴얼의 예제를 실행하려고 하는데 CRYPT_DES 메서드 대신 CRYPT_AES256을 사용합니다. 결과적으로 CryptEncode 메서드 후 오류 4029

 
Dmitri Custurov :

암호화 매뉴얼의 예제를 실행하려고 하는데 CRYPT_DES 메서드 대신 CRYPT_AES256을 사용합니다. 결과적으로 CryptEncode 메서드 후 오류 4029

이해했다. 그는 열쇠가 더 필요합니다.))

 

안녕하세요!

나는 어리석고 스스로 알아낼 수 없습니다. 무엇이 문제인지 알려주거나 최소한 방향을 알려주십시오.

다른 지표는 동시에 다른 기록을 보여주기 시작합니다. 매일이 아니라 가끔 발생합니다.

그 이유는 표시기가 동적으로 로드된 히스토리를 잘못 처리하기 때문이라고 생각했습니다. 업데이트된 기록에 대한 표시기의 올바른 업데이트와 관련하여 모든 것을 시도한 것 같습니다. 이러한 일이 발생하지 않도록 하려면 더 이상 무엇을 해야 하는지 모르겠습니다.

브로커 알파리. 2020년 3월 13일부터 MT 5 빌드 2363.

스크린샷에서 처음에는 "비행" 버전입니다.

그런 다음 수동 업데이트 후 수정합니다.

 //+------------------------------------------------------------------+
bool IsReadyForCalculate( const int rates_total, const int prev_calculated, const datetime &time[])
  {
   //--- подключение терминала и синхронизация данных
   if ( TerminalInfoInteger ( TERMINAL_CONNECTED ))  
       if (! SymbolIsSynchronized ( _Symbol ) || 
         ! SeriesInfoInteger ( _Symbol , _Period , SERIES_SYNCHRONIZED ))   return ( false );
   //--- некорректное значение prev_calculated
   if (prev_calculated< 0 )                   return ( false );
   //---
   if (prev_calculated== 0 )     prev_time = time[rates_total- 1 ];
   //--- произошли изменения в данных, но prev_calculated не сброшен в 0
   //--- или изменение времени не соответствует одному бару
   if (  (rates_total!=prev_calculated+ 1 &&
         rates_total!=prev_calculated &&
         prev_calculated!= 0 ) ||
        (time[rates_total- 1 ]>prev_time &&
         time[rates_total- 2 ]!=prev_time))
     {
      loc_prev_calculated = 0 ;     // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что есть
       return ( true );
     }
   //--- корректный сценарий
   if (  (rates_total==prev_calculated   || rates_total==prev_calculated+ 1 || prev_calculated== 0 ) &&
        (time[rates_total- 1 ]==prev_time || time[rates_total- 2 ]==prev_time))
     {
      loc_prev_calculated = prev_calculated;
       return ( true );
     }
   //--- 
   return ( false );       // верну false, пока не знаю, какие варианты ещё могут быть
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[])
  {
   if (!IsReadyForCalculate(rates_total,prev_calculated,time))     return ( 0 );
//---
         // вызов функции зигзага
   
//--- return value of prev_calculated for next call
   prev_time = time[rates_total- 1 ];
   return (rates_total);
  }
//+------------------------------------------------------------------+
파일:
 

안녕하세요.

MQL5에 대해 질문이 있습니다. OnChartEvent() 함수 를 강제로 실행하는 방법은 무엇입니까? 규칙적인 방법이 있습니까?

이를 위해 ChartNavigate() 함수를 사용하여 OnChartEvent()에서 시작합니다. 그러나 이것은 불안정하게 작동합니다. 틱이 많을 때 ChartNavigate()를 호출한 후 어떤 이유로 OnChartEvent()가 다시 시작되지 않는 경우가 많습니다. ChartNavigate()의 작업과 틱 수신 빈도가 어떻게 상호 연결되어 있는지 이해할 수 없지만 그럼에도 불구하고 발생합니다.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
inwinterborn :

안녕하세요!

나는 어리석고 스스로 알아낼 수 없습니다. 무엇이 문제인지 알려주거나 최소한 방향을 알려주십시오.


      loc_prev_calculated = 0 ;     // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что есть
       return ( true );

혹시나 해서 추가한건지...

제거됨
loc_prev_calculated 

로 대체됨

       return (false);

내가 지켜볼게.


MT5와 함께 제공되는 표준 표시기에 대해 어떻게 작동하는지 알려주십시오. 위의 스크린샷에 나와 있는 것처럼 비행합니까?

 

모두에게 좋은 하루!
이중 OnTester() 함수와 TesterStatistics() 함수를 배우고 있습니다. 매일 10:00, 16:00, 20:00, 01:00에 하나의 주문을 여는 MT4에서 Tester를 위한 간단한 코드를 작성했습니다. 그리고 테스트 가 끝나면 TesterStatistics ( ) 함수는 가장 작은 균형 값(즉, 상대적인 감소)을 반환합니다.

문제

TesterStatistics()는 모든 미결 주문에 대해 가장 낮은 잔액 값을 반환합니다.

문제

TesterStatistics() 가 1시간(예: 16:00)에 열린 주문에 대해서만 가장 낮은 잔액 값을 반환하도록 하는 데 사용할 수 있는 언어 구성은 무엇입니까? 이 경우 코드에 지정된 모든 주문은 코드에서 동시에 테스트되어야 합니다. 즉, TesterStatistics()는 16:00에 개설된 한 주문의 모든 주문에 대한 잔액의 역학을 추적해야 하며 테스트 종료 시 16:00에 열린 주문에 대해서만 가장 작은 잔액 값을 표시해야 합니다.

원하는 언어 구성을 내 코드에 삽입해 주시면 대단히 감사하겠습니다. 이를 통해 내 문제를 매우 빠르게 해결하기 위한 알고리즘을 이해할 수 있습니다.
여기 내 코드가 있습니다.

 int H;
double    TesterStatistics ( );
void OnTick ()
{
if (H!=Hour( ))
if (Hour( )== 10 ||Hour( )== 16 ||Hour( )== 20 ||Hour( )== 1 )
{
OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 ,Ask+ 400 * Point ,Ask- 200 * Point ,"C2", 123 );
H=Hour( );
}
}
double OnTester ()
{
TesterStatistics ( STAT_BALANCEMIN   );
Print ("----------- TesterStatistics ( STAT_BALANCEMIN   )--------------", TesterStatistics ( STAT_BALANCEMIN   )); 
}
 
ANDREY :

모두에게 좋은 하루!
이중 OnTester() 함수와 TesterStatistics() 함수를 배우고 있습니다. 매일 10:00, 16:00, 20:00, 01:00에 하나의 주문을 여는 MT4에서 Tester를 위한 간단한 코드를 작성했습니다. 그리고 테스트가 끝나면 TesterStatistics() 함수는 가장 작은 균형 값(즉, 상대적인 감소)을 반환합니다.

문제

TesterStatistics()는 모든 미결 주문에 대해 가장 낮은 잔액 값을 반환합니다.

문제

TesterStatistics() 가 특정 시간(예: 16:00)에 열린 주문에 대해서만 가장 낮은 잔액 값을 반환하도록 하는 데 사용할 수 있는 언어 구성은 무엇입니까? 이 경우 코드에 지정된 모든 주문은 코드에서 동시에 테스트되어야 합니다. 즉, TesterStatistics()는 16:00에 개설된 한 주문의 모든 주문의 잔액의 역학을 추적해야 하며 테스트 종료 시 16:00에 열린 주문에 대해서만 가장 작은 잔액 값을 표시해야 합니다.

원하는 언어 구성을 내 코드에 삽입해 주시면 대단히 감사하겠습니다. 이를 통해 내 문제를 매우 빠르게 해결하기 위한 알고리즘을 이해할 수 있습니다.
여기 내 코드가 있습니다.

 int H;
double    TesterStatistics ( );
void OnTick ()

이게 뭔가요?

 
세르게이 타볼린:

이게 뭔가요?

당신의 응답을 주셔서 감사합니다. 덕분에 TesterStatistics ( ) 표시가 있음을 깨달았습니다. 전역 변수 H ...의 선언과 함께 내 실수였습니다. 오류를 수정했습니다.

 int H;
//double  TesterStatistics( );
void OnTick ()
{
if (H!=Hour( ))
if (Hour( )== 10 ||Hour( )== 16 ||Hour( )== 20 ||Hour( )== 1 )
{
OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 ,Ask+ 400 * Point ,Ask- 200 * Point , "C2" , 123 );
H=Hour( );
}
}
double OnTester ()
{
TesterStatistics ( STAT_BALANCEMIN   );
Print ( "-----------TesterStatistics( STAT_BALANCEMIN  )--------------" , TesterStatistics ( STAT_BALANCEMIN   )); 
}
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
좋은 시간! 차트에 높은 막대 데이터와 낮은 막대 데이터를 표시하는 방법은 무엇입니까? 그리고 같은 색 강조.???