ATcl Beta 2 - with Tk GUI

ATcl Beta 2 - with Tk GUI

14 мая 2018, 15:30
Maxim Kuznetsov
1
1 558

Рад представить новую версию ATcl. Была продолжена работа по унификации и упрощению API, удалось добиться стабильной работы Tk в экспертах. Демки пополнились двумя полезными демонстрациями.

В новой версии

API

Изменён синтаксис методов Set - они всегда принимают непосредственное MQL значение в качестве параметров. Для того чтобы присвоить переменной объект Tcl_Obj введён метод SetObj(varName,obj). По мере развития аналогичные изменения коснуться и других методов.

Структура каталогов

Скрипты tcl перенесены в каталог Libraries/ATcl/demo В дистрибутив включена библиотека Cawt (http://www.cawt.tcl3d.org/)

Полноценный GUI

Наконец-то заработал Tk. Теперь в экспертах можно делать сложные GUI без особых проблем.

Демо - WebSocket

Сделана демка показывающая работу с вебсокетами.

Демо - CawtExcel

Демка показывающая взаимный обмен данными между MQL и Excel. Получился «универсальный» индикатор.

Развитие проекта

Были проблемы со старым доменом и ATcl переехал на мой персональный домен; для избежания проблем с доступностью дистрибутива файлы будут дублироваться на SourceForge https://sourceforge.net/projects/mt-atcl/ . Там же можно оставлять отзывы, пожелания и запросы

Проект распространняется бесплатно, без лицензионных ограничений и вы можете помочь его развитию монеткой donate

Загрузить дистрибутив

Дистрибутив доступен на странице загрузки install и на SourceForge https://sourceforge.net/projects/mt-atcl/files

Промежуточные версии также выкладываются по мере выхода на форуме mql5.com : https://www.mql5.com/ru/forum/224745

Известный баг:

 - в самый последний момент обнаружен : есть конфликт при одновременной загрузке на один чарт индикаторов ATcl и советника использующего Tk. Природа ошибки понятна, но в коде она ещё не лоцирована и поэтому пока не исправлена.
По отдельности они все замечательно работают, поэтому хоть и с задержкой но решился выпустить релиз с этим багом.

Шаблон MQL приложения использующего ATcl :

//--- input parameters
input int      MAGIC=0;

#include <ATcl/ATcl.mqh>

ATcl *tcl=NULL;
bool hasTimer=false;

#define TIMER_MSC 100
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
// reset global vars. to defaults
   tcl=NULL;
   hasTimer=false;
// initialize ATcl library and create interp.
   if(ATcl_OnInit()!=INIT_SUCCEEDED || (tcl=new ATcl)==NULL || !tcl.Ready()) 
     {
      return INIT_FAILED;
     }
// start timer
   hasTimer=EventSetMillisecondTimer(TIMER_MSC);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
// stop timer
   if(hasTimer) EventKillTimer();
   if(tcl!=NULL) 
     {
      // unref refferred objects
      // delete interp.
      delete tcl;
     }
// finalize library
   ATcl_OnDeinit(reason);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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(!hasTimer) 
     {
      tcl.Update();
      hasTimer=EventSetMillisecondTimer(TIMER_MSC);
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   tcl.Update();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   tcl.Update();
  }
//+------------------------------------------------------------------+

UPDATE - обновлён архив


Файлы:
atcl.zip  6662 kb
Поделитесь с друзьями: