초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 773

 

고맙습니다.
방금 등록했는데 아직 포럼이 어떻게 작동하는지 모르겠습니다.

 
0Aleksandr0 :

나는 WinAPI에서 아무것도 이해하지 못합니다. 여기서 무엇이 잘못되었습니까?

스크립트의 형태로 당신의 시도를 볼 수 있습니다

 
0Aleksandr0 :

나는 그것을 고문의 기능으로 가지고 있습니다. 여기에 코드의 시작이 있습니다.

기능 그 자체다

나머지 어드바이저는 잘 작동하며 함수에 있는 변수는 코드의 다른 곳에서는 사용되지 않습니다.
SetClipboardData( CF_UNICODETEXT, hMem ) 행에서 터미널이 충돌합니다. // 문자열이 있는 메모리를 버퍼로 전송

 
Artyom Trishkin :

알았어, 수정해)

 
o_o :

스크립트의 형태로 당신의 시도를 볼 수 있습니다


나는 그것을 고문의 기능으로 가지고 있습니다. 여기에 코드의 시작이 있습니다.

 #define CF_UNICODETEXT 13
#define GHND 0x0042

#import "User32.dll"
   int OpenClipboard( uint );
   int EmptyClipboard();
   int CloseClipboard();
   uint SetClipboardData( uint uFormat, uint hMem );
#import "Kernel32.dll"
   uint GlobalAlloc( uint uFlags, uint dwBytes );
   uint GlobalLock( uint hMem );
   int GlobalUnlock( uint hMem );
#import "msvcrt.dll"
   uint memcpy( uint &dest, string src, uint count );
#import

string text = "AAA" ;

기능 그 자체다

 void OutClipboard()
{
   uint hwnd = ( uint ) ChartGetInteger ( 0 , CHART_WINDOW_HANDLE );
   
   int strSize = StringLen ( text ) * 2 + 2 ;   // Получаем размер строки в байтах
   
   if ( OpenClipboard( hwnd ) )     // Открываем буфер
   {
      EmptyClipboard();           // Очищаем буфер
      
       uint hMem = GlobalAlloc( GHND, strSize ); // Выделяем память
       uint pMem = GlobalLock( hMem );     // Получаем адрес выделенной памяти
      memcpy( pMem, text, strSize );     // Копируем строку в память
      GlobalUnlock( hMem );
   
      SetClipboardData( CF_UNICODETEXT, hMem );   // Передаём память со строкой в буфер
      
      CloseClipboard();   // Закрываем буфер
   }
}

나머지 어드바이저는 잘 작동하며 함수에 있는 변수는 코드의 다른 곳에서는 사용되지 않습니다.
SetClipboardData( CF_UNICODETEXT, hMem ) 행에서 터미널이 충돌합니다. // 문자열이 있는 메모리를 버퍼로 전송

 
//+------------------------------------------------------------------+
//|                                                    Clipboard.mq4 |
//|                                               ПавелИванович(api) |
//|                                              p231970@hotmail.com |
//|  Перенос на MQL5 и доработка unicode - Сергеев Алексей (sergeev) |
//|                                              profy.mql@gmail.com |
//+------------------------------------------------------------------+
#property version "1.00"
#property description "Getting contents of the clipboard"

#import "user32.dll"
bool   OpenClipboard( int hwnd);
int    GetClipboardData( int uFormat);
bool   CloseClipboard();
int    GetAncestor( long hWnd, int gaFlags);
int    GetAncestor( int   hWnd, int gaFlags);
#import "kernel32.dll"
int    GlobalLock( int hMem);
bool   GlobalUnlock( int hMem);
string lstrcatW( int dst, string src);
#import
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int OnStart ()
  {
   int     hMain;
   string clip= "" ;
//---
   if ( _IsX64 )
      hMain=GetAncestor( ChartGetInteger ( ChartID (), CHART_WINDOW_HANDLE ), 2 );
   else
      hMain=GetAncestor(( int ) ChartGetInteger ( ChartID (), CHART_WINDOW_HANDLE ), 2 );
//---
   if (OpenClipboard(hMain))
     {
       int hglb=GetClipboardData( 1 /*CF_TEXT*/ );
       if (hglb!= 0 )
        {
         int lptstr=GlobalLock(hglb);

         if (lptstr!= 0 ) { clip=lstrcatW(lptstr, "" ); GlobalUnlock(hglb); }
        }
      CloseClipboard();
     }

// translate ANSI to UNICODE
   ushort chW; uchar chA; string rez;
   for ( int i= 0 ; i< StringLen (clip); i++)
     {
      chW= StringGetCharacter (clip, i);
      chA= uchar (chW& 255 ); rez=rez+ CharToString (chA);
      chA= uchar (chW>> 8 & 255 ); rez=rez+ CharToString (chA);
     }

   MessageBox ( "Clipboard: \n" +rez, "Clipboard" );
   return ( 0 );
  }
//+------------------------------------------------------------------+

그런 스크립트를 찾았습니다. 이론상 버퍼를 읽고 터미널 창에 값을 표시합니다. 이 스크립트도 작동하지 않습니다.

터미널을 죽이지는 않지만 창에 아무 것도 표시하지 않습니다.
버퍼에는 일종의 수수께끼가 있습니다. 지금은 경고에 데이터를 출력하는 것으로 제한하겠습니다. 거기에서 "수동" 작업을 피하고 싶었지만 ctrl + c를 복사할 수 있습니다.

 

그 예는 MT4에 대한 것이므로 비트 깊이는 고려되지 않았습니다.

다음은 모든 플랫폼용입니다.

 #ifdef __MQL5__
#define _WIN64   // Только для 64-разрядного терминала!
#endif

#include <WinDef.mqh>

#define CF_UNICODETEXT 13
#define GHND 0x0042

#import "User32.dll"
   BOOL OpenClipboard( HWND );
   BOOL EmptyClipboard();
   BOOL CloseClipboard();
   HANDLE SetClipboardData( uint uFormat, HANDLE hMem );
#import "Kernel32.dll"
   HANDLE GlobalAlloc( uint uFlags, size_t dwBytes );
   LPVOID GlobalLock( HANDLE hMem );
   BOOL GlobalUnlock( HANDLE hMem );
#import "msvcrt.dll"
   PVOID memcpy( PVOID dest, string src, size_t count );
#import

string str = "АБВГД" ;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   HWND hwnd = (HWND) ChartGetInteger ( 0 , CHART_WINDOW_HANDLE );
   
   size_t strSize = StringLen ( str ) * 2 + 2 ;   // Получаем размер строки в байтах
   
   if ( OpenClipboard( hwnd ) )     // Открываем буфер
   {
      EmptyClipboard();           // Очищаем буфер
      
      HANDLE hMem = GlobalAlloc( GHND, strSize ); // Выделяем память
      PVOID pMem = GlobalLock( hMem );     // Получаем адрес выделенной памяти
      memcpy( pMem, str, strSize );     // Копируем строку в память
      GlobalUnlock( hMem );
   
      SetClipboardData( CF_UNICODETEXT, hMem );   // Передаём память со строкой в буфер
      
      CloseClipboard();   // Закрываем буфер
   }
}
//+------------------------------------------------------------------+
파일:
WinDef.mqh  1 kb
 
Koldun Zloy :

그 예는 MT4에 대한 것이므로 비트 깊이는 고려되지 않았습니다.

다음은 모든 플랫폼용입니다.


특히 버퍼를 읽는 두 번째 스크립트를 볼 때 비트 깊이에 대한 의심이 있었습니다.
그게 바로 고칠 수 있는 방법이에요, 적어도 한 달 안에는 도퍼를 할게요))
많은 시간을 절약해 주셔서 대단히 감사합니다.)

즉시 어드바이저에 통합하겠습니다)

 

MT5에서 코드를 다시 작성할 수 있도록 도와주세요 - 주문을 전혀 이해하지 못합니다 :(

 //+------------------------------------------------------------------+
//| Расчёт статистик                                                 |
//+------------------------------------------------------------------+
bool CTradeStatistics::Calculate( const bool _to_log= false , const double _init_balance= 0.0 )
  {
//---
   if (_init_balance> 0 .)
      m_init_deposit=_init_balance;
   else
     {
      m_init_deposit= TesterStatistics ( STAT_INITIAL_DEPOSIT );
       double curr_balance=m_init_deposit;
       if (!m_balance_arr.Add(curr_balance))
        {
         if (_to_log)
             Print ( "Ошибка добавления значения депозита." );
         return false ;
        }
       //---
       int   orders_num= OrdersHistoryTotal ();
       if (orders_num< 1 )
        {
         if (_to_log)
             Print ( "Нет ордеров в истории." );
         return false ;
        }

       //--- собрать данные
       for ( int ord_idx= 0 ;ord_idx<orders_num;ord_idx++)
         if ( OrderSelect (ord_idx, SELECT_BY_POS , MODE_HISTORY ))
           {
             ENUM_ORDER_TYPE curr_ord_type=( ENUM_ORDER_TYPE ) OrderType ();
             if ((curr_ord_type== ORDER_TYPE_BUY ) || (curr_ord_type== ORDER_TYPE_SELL ))
               if ( OrderCloseTime ()> 0 )
                 {
                   //int ord_ticket=OrderTicket();// del
                   //--- добавить профит ордера
                   double curr_ord_profit= OrderProfit ()- OrderCommission ()+ OrderSwap ();
                   if (!m_orders_arr.Add(curr_ord_profit))
                    {
                     if (_to_log)
                         Print ( "Ошибка добавления значения профита." );
                     return false ;
                    }
                   //--- добавить текущее значение баланса
                  curr_balance+=curr_ord_profit;
                   if (!m_balance_arr.Add(curr_balance))
                    {
                     if (_to_log)
                         Print ( "Ошибка добавления значения депозита." );
                     return false ;
                    }
                 }
           }
     }

컴파일 오류:

'SELECT_BY_POS' - 선언되지 않은 식별자 KamikadzeStatistics.mqh 257 33

'MODE_HISTORY' - 선언되지 않은 식별자 KamikadzeStatistics.mqh 257 47

'OrderSelect' - 잘못된 매개변수 개수 KamikadzeStatistics.mqh 257 열셋

'OrderType' - 함수 가 정의되지 않았습니다. KamikadzeStatistics.mqh 259 60

'OrderCloseTime' - 함수가 정의되지 않았습니다. KamikadzeStatistics.mqh 261 십구

'OrderProfit' - 함수가 정의되지 않았습니다. KamikadzeStatistics.mqh 265 42


 
Aleksey Vyazmikin :

MT5에서 코드를 다시 작성할 수 있도록 도와주세요. 주문을 전혀 이해하지 못합니다 :(

컴파일 오류:

'SELECT_BY_POS' - 선언되지 않은 식별자 KamikadzeStatistics.mqh 257 33

'MODE_HISTORY' - 선언되지 않은 식별자 KamikadzeStatistics.mqh 257 47

'OrderSelect' - 잘못된 매개변수 개수 KamikadzeStatistics.mqh 257 열셋

'OrderType' - 함수 가 정의되지 않았습니다. KamikadzeStatistics.mqh 259 60

'OrderCloseTime' - 함수가 정의되지 않았습니다. KamikadzeStatistics.mqh 261 십구

'OrderProfit' - 함수가 정의되지 않았습니다. KamikadzeStatistics.mqh 265 42



이게 뭔가요? MQL4에서는 잘 생각하지 않습니다. 무엇을 얻을 것인지 알려주시면 MQL5에서 모든 것을 즉시 작성할 수 있습니다.
역사의 손익 계산과 관련된 것 같은?

사유: