Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не можешь разобраться в коде? Возможно, на эту тему уже написана статья!
Egory
25
Egory 2014.08.27 07:31 

 Добрый день! Подскажите, такой вопрос- по мотивам EqualVolumeBars  и PeriodConverter накидал простой советник, создающий на ходу тиковый график. Все вроде работает, но при удалении советника с графика, или просто отключения dll в его свойствах- МТ молча закрывается. Наступает такое состояние неуравновешенное после выполнения PostMessageA(hwnd, WM_COMMAND, 33324, 0 );

Можно ли побороть эту неприятность, во избежание других сюрпризов?

И еще- есть ли возможность открывать автономные графики? ChartOpen() не помогает

#property strict

/*
Советник создает автономный тиковый график, где размер свечи соответствует
разнице Bid-Ask.
*/

#include <WinUser32.mqh>   //в общем-то ненужен
#import "user32.dll"
 //  int RegisterWindowMessageA(string lpstring);
   int PostMessageA( int hWnd, int Msg, int wParam, string lParam );
#import

#define  WM_COMMAND    0x0111

int        ExtHandle = -1; // file arrow
string     c_comment;
string     c_symbol;
string     FileName;
string     ObjName;
double     d_open=0, d_low=0, d_high=0, d_close=0, d_volume=0;

int        hwnd = 0, cnt = 0, LastError = 0, i_time=60;
int        HistoryHandle = -1;
int        Tmp=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  // открываем тиковый файл
  c_symbol=Symbol();
  FileName = StringConcatenate( "Tick", c_symbol, 1, ".hst" );
  HistoryHandle = FileOpenHistory( FileName,FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ);
  if ( HistoryHandle < 0 )
   {
    LastError = GetLastError();
    Alert( "FileOpenHistory( \"", FileName, "\", FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ)", " - Error #", LastError );
    return(-1);
    }
   // записываем заголовок файла
   int    i_period = 1;
   int    i_digits = Digits;
   int    i_unused[13];
  
   FileWriteInteger(HistoryHandle, 400, LONG_VALUE);
   FileWriteString(HistoryHandle, "(C)opyright 2014, ***", 64);
   FileWriteString(HistoryHandle, StringConcatenate("Tick",c_symbol), 12);
   FileWriteInteger(HistoryHandle, i_period, LONG_VALUE);
   FileWriteInteger(HistoryHandle, i_digits, LONG_VALUE);
   FileWriteInteger(HistoryHandle, 0, LONG_VALUE);        // timesign
   FileWriteInteger(HistoryHandle, 0, LONG_VALUE);        // last_sync
   FileWriteArray(HistoryHandle, i_unused, 0, 13);
   FileFlush(HistoryHandle);
  
  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  if ( HistoryHandle > 0 )
    {
   // закрываем файл
   FileClose( HistoryHandle );
   HistoryHandle = -1;
    }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  i_time +=60;
  d_open=Bid;
  d_low=Bid;
  d_close=Ask;
  d_high=Ask;
  d_volume=1;
 
  FileWriteInteger(HistoryHandle, i_time, LONG_VALUE);
  FileWriteDouble(HistoryHandle, d_open, DOUBLE_VALUE);
  FileWriteDouble(HistoryHandle, d_low, DOUBLE_VALUE);
  FileWriteDouble(HistoryHandle, d_high, DOUBLE_VALUE);
  FileWriteDouble(HistoryHandle, d_close, DOUBLE_VALUE);
  FileWriteDouble(HistoryHandle, d_volume, DOUBLE_VALUE);
  FileFlush(HistoryHandle);
 
  RefreshWindow();
  }

void RefreshWindow()
{
    //---- Поиск автономного графика
  if ( hwnd == 0 )
   {
   hwnd = WindowHandle( StringConcatenate( "Tick", c_symbol ),0 );
   if ( hwnd != 0 )Comment( "< - - - График ", "Tick", c_symbol,0, " найден! - - - >" );
   else
    {
    Comment ("График не найден");
   
    ChartOpen(StringConcatenate( "Tick", c_symbol ),1 );
    Tmp=GetLastError();
    Print(Tmp);
    }
   }     
    //---- Если найдено- обновить
    if ( hwnd != 0 )
     {
     PostMessageA( hwnd, WM_COMMAND, 33324, 0 );

    ObjName=StringConcatenate( "Tick", c_symbol );
    Tmp=iBars(ObjName,1);
    c_comment=DoubleToStr(Tmp,0);
    Comment(c_comment);
     }

Vitalie Postolache
11097
Vitalie Postolache 2014.08.27 07:37  
PostMessageW
Egory
25
Egory 2014.08.27 07:56  
Попробовал с PostMessageW- без изменений..
Egory
25
Egory 2014.08.27 10:52  
О, сорри- переустановил МТ- глюки пропали
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий