Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Как заработать на MQL5.community? Зайди и узнай!
Антон
35
Антон 2011.04.26 16:42 

Здравствуйте! Вытаскиваю массив из MT 4, потом обрабатываю его в dll на C++, подключаю dll'ки от Statistica 6 ( #import "statist.exe", #import "sta_TRE.dll"), из массива строю исходную таблицу, затем провожу ее анализ(строю деревья классификаций). После запуска эксперта происходит обработка, потом открывается Statistica 6 и выводит результаты анализа в таблице результатов. Вопрос в том, как вытащить значения из этой таблицы результатов. Понимаю что есть два способа 1) Сделать таблицу активной и обратится к ней как к исходной или 2)создать объект

STATISTICA::_SpreadsheetPtr ИмяТаблицы и присвоить ему значения таблицы результатов. Но как это сделать незнаю все перепробовал! Прошу помоши! Заранее спасибо! Код от dll C++(для упрощения исходную таблицу не формировал из массива, а взял из файла Tree.sta )

#import "statist.exe"
#import "sta_TRE.dll"
using namespace STATISTICA;
using namespace STAQuickTrees;

extern "C" __declspec(dllexport) void  __stdcall StaticCandle(char *arr[][2], int size_arr)
{
  ::CoInitialize(NULL);
  STATISTICA::_ApplicationPtr pApp("STATISTICA.Application");
  STATISTICA::_SpreadsheetPtr pSpreadSheet=pApp->Spreadsheets->Open("C:\\Tree.sta", true);// Задает исходную таблицу для анализа
  STATISTICA::_AnalysisPtr pBasDiag = pApp->Analysis(scQuickTrees);
//Задает параметры дерева для анализа 
  STAQuickTrees::TreStartupPtr TreeDialog = pBasDiag->Dialog;
  TreeDialog->PutVariables("12 | 2-11 |    | 1");
  TreeDialog->PutCategoricalPredictorCodes("0-1 | 0-1");
  TreeDialog->PutDependentVariableCodes("True-False");
  pBasDiag->Run();
  STAQuickTrees::TreResultsPtr TreeResult=pBasDiag->Dialog;

pBasDiag->GetRouteOutput(TreeResult->MisclassificationMatrix.GetInterfacePtr())->PutVisible(true); // Выводит таблицу результатов из которой нужно извлечь значения

}

А вот код излечения данных из исходной таблицы(Здесь все прекрасно работает):

//считаем, что "pApp" - указатель на STATISTICA, открытие файла
STATISTICA::_SpreadsheetPtr pSpreadSheet=pApp->Spreadsheets->Open("C:\\Tree.sta", true);
//считаем, что "pSpreadsheet" указатель на Таблицу,  получение значения из таблице
pSpreadSheet->GetValue(1,1);
//считаем, что "pSpreadsheet" указатель на Таблицу, устанавливает значения в таблицу
pSpreadSheet->PutValue(1,1,"Tech");  

И еще если есть у кого нибудь код обращения к библиотекам Статистики 6 без ее запуска( statist.exe ) напишите если не трудно. К библиотеке stadev32.lib не получается подключиться (ничего не происходит), а к stadev32.dll компилятор ругается на ошибку загрузки библиотеки(fatal error C1083) :

/#include "stadev32.h"
//#pragma comment (lib, "stadev32.lib") 


//----------
typedef long  HSTAFILE;
typedef short HRES;
typedef HSTAFILE (*w_open) (LPCSTR);
typedef long  (*sgnc)(HSTAFILE);
typedef HRES (*scf)(HSTAFILE);
//----------

extern "C" __declspec(dllexport) void  __stdcall StaticCandle(char *arr[][2], int size_arr)
{


    HINSTANCE hSimplex = ::LoadLibrary(LPCWSTR("D:\\DLLMQL4\\MFC\\MFC\\stadev32.dll"));
        w_open op = (w_open)::GetProcAddress(hSimplex, "StaOpenFile");
        HSTAFILE handle = op("C:\\Tree.sta");


}

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий