Список форумов Trading tools Trading tools
?нструменты для торговли на FORTS
 

На сайт ttools.ru
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы  RSS-Подписка на форумRSS-Подписка на форум   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Взятие информации о сделке из списка всех сделок
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов Trading tools -> QuikOrdersDOM SDK
Предыдущая тема :: Следующая тема  
Автор Сообщение
Fortis



Зарегистрирован: 11.05.2010
Сообщения: 99
Откуда: Сибири матушки

СообщениеДобавлено: Чт Май 13, 2010 10:16 am    Заголовок сообщения: Взятие информации о сделке из сп Ответить с цитатой

Доброго время суток!

Прежде хотелось бы поблагодарить за удобный привод. Спасибо Вам за проделанную работу!

Вопросик есть.
Беру информацию о сделке через fATLibGetTradeInfo, но при любом вызове данной функции уже во время работы библиотеке постоянно вываливается ошибка: "Access Violation at address 00402DCD in module 'QuikOrdersDom.exe'. Write of address 011A9FD8."

Компилятор ошибок не выдает(Delphi 7), все вроде перепроверил. Номер сделки беру из открытой таблицы всех сделок в квике. Ошибка вываливается сразу при обращении к данной функции. Rolling Eyes
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Danila
Site Admin


Зарегистрирован: 24.07.2009
Сообщения: 837

СообщениеДобавлено: Чт Май 13, 2010 12:32 pm    Заголовок сообщения: Re: Взятие информации о сделке из Ответить с цитатой

Fortis писал(а):
Доброго время суток!

Прежде хотелось бы поблагодарить за удобный привод. Спасибо Вам за проделанную работу!

Вопросик есть.
Беру информацию о сделке через fATLibGetTradeInfo, но при любом вызове данной функции уже во время работы библиотеке постоянно вываливается ошибка: "Access Violation at address 00402DCD in module 'QuikOrdersDom.exe'. Write of address 011A9FD8."

Компилятор ошибок не выдает(Delphi 7), все вроде перепроверил. Номер сделки беру из открытой таблицы всех сделок в квике. Ошибка вываливается сразу при обращении к данной функции. Rolling Eyes


Скажите, какую версию QuikOrdersDOM используете, а также приведите пожалуйста часть кода, где вы вызываете функцию. ?нтересует как вы выделяете и освобождаете память
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Fortis



Зарегистрирован: 11.05.2010
Сообщения: 99
Откуда: Сибири матушки

СообщениеДобавлено: Чт Май 13, 2010 8:39 pm    Заголовок сообщения: Ответить с цитатой

QuikOrdersDOM 2.0.4.2.

Вернулся с работы.
Написал быстро все заново, все убрал, оставил только вызов функции.
Цитата:
library Project1;

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }

uses
SysUtils,
Classes,
forms,
Unit1 in 'Unit1.pas' {Form1},
uATLibrary in 'uATLibrary.pas',
Main in 'Main.pas';

{$R *.res}
exports
AT_LIB_INIT name 'AT_LIB_INIT',
AT_LIB_CYCLE name 'AT_LIB_CYCLE',
AT_LIB_DONE name 'AT_LIB_DONE';


begin
Application.CreateForm(TForm1, Form1);
Form1.Show;
end.



Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Main, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
car:cardinal;
begin
car:= strToInt(edit1.Text);
View_Sdel(car);
end;

end.
Цитата:
unit Main;

interface
uses uATLibrary,
SysUtils,Dialogs ;

function AT_LIB_INIT (T : TLibInitialRecord): Cardinal; stdcall;
function AT_LIB_CYCLE: Cardinal ; stdcall;
function AT_LIB_DONE: Cardinal ; stdcall;
function AT_LIB_ABOUT: Cardinal; stdcall;
function AT_LIB_SETUP: Cardinal ; stdcall;

var
bot : TLibInitialRecord ;

Procedure View_Sdel(sd:cardinal);

implementation
uses unit1;


Procedure View_Sdel(sd:cardinal);
var
Sdel_Info : PTradeInfo;
cardi:cardinal;
begin
// fATLibGetTradeInfo(sdel,Sdel_Info);
cardi:=Bot.fATLibGetTradeInfo(sd,sdel_Info);
//cardi:=Bot.fATLibGetTradeInfo(sdel,Sdel_Info);
//if cardi=0 then
// begin
// Form1.Label10.Caption:=IntToStr(sdel);
// Form1.Label9.Caption:=IntToStr(sdel_info.N);
// Form1.Label10.Caption:=IntToStr(Sdel_Info.SecIdx);
// Form1.Label11.Caption:=FormatDateTime('hh:nn-ss',sdel_Info.TradeDT);
// Form1.Label12.Caption:=FloatToStr(Sdel_Info.Price);
// Form1.Label13.Caption:=IntToStr(Sdel_Info.Quantity);
// Form1.Label14.Caption:=IntToStr(sdel_info.OrderDirection);
// end
// else
// Form1.Label9.Caption:='Îøèáêà!!';
end;
//-----------------------------------------------------------

function AT_LIB_INIT (T : TLibInitialRecord): Cardinal; stdcall;
begin
Bot:=T ;

end ;

function AT_LIB_CYCLE: Cardinal ; stdcall;
begin

end ;

function AT_LIB_DONE: Cardinal ; stdcall;
begin
{}
end ;

function AT_LIB_SETUP: Cardinal ; stdcall;
begin
MessageDlg('this is Setup window',mtInformation,[mbOK],0);

end ;

function AT_LIB_ABOUT: Cardinal; stdcall;
var
S : String;
begin
S:='Ïðèìåð ìîäóëÿ àâòîòðåéäèíãà '#13#10'äëÿ QuikOrdersDOM'#13#10;
ShowMessage(S) ;
end ;

end.


Вываливается ошибка.
Я не все еще функции попробовал, но те что пробовал нормально работали.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Danila
Site Admin


Зарегистрирован: 24.07.2009
Сообщения: 837

СообщениеДобавлено: Чт Май 13, 2010 9:28 pm    Заголовок сообщения: Ответить с цитатой

Вот перед этой строчкой

cardi:=Bot.fATLibGetTradeInfo(sd,sdel_Info);

надо
new(sdel_info) ;

после того, как sdel_info не нужна
dispose(sdel_info) ;

и так везде. под все указатели, если в область, на которую он указывает предполагается записывать какое-то значение нужно выделять и освобождать память. если вы этого не делаете - получите плавающие ошибки в своей программе
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Fortis



Зарегистрирован: 11.05.2010
Сообщения: 99
Откуда: Сибири матушки

СообщениеДобавлено: Чт Май 13, 2010 10:30 pm    Заголовок сообщения: Ответить с цитатой

Спасибо за быстрый ответ!

Все исправил, заработало.

Только сейчас другая проблема.
Номер сделки в таблице 9-ти значная цифра, при попытке запросить из функции сделку с 9-ти значной цифрой выдается ошибка "Exception EConvertError in Module QuikOrdersDom.exe at 000092F6".

Методом тыка попадаю например на индексах РТС на реальную сделку под номером 168696874 запросив 1111111 номер сделки. Под номером 1111112 лежит сделка 168696875.

Код тот же, добавил лишь вышеназванные команды. Тут то что может быть не так?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Danila
Site Admin


Зарегистрирован: 24.07.2009
Сообщения: 837

СообщениеДобавлено: Пт Май 14, 2010 9:23 am    Заголовок сообщения: Ответить с цитатой

Fortis писал(а):
Спасибо за быстрый ответ!

Все исправил, заработало.

Только сейчас другая проблема.
Номер сделки в таблице 9-ти значная цифра, при попытке запросить из функции сделку с 9-ти значной цифрой выдается ошибка "Exception EConvertError in Module QuikOrdersDom.exe at 000092F6".

Методом тыка попадаю например на индексах РТС на реальную сделку под номером 168696874 запросив 1111111 номер сделки. Под номером 1111112 лежит сделка 168696875.

Код тот же, добавил лишь вышеназванные команды. Тут то что может быть не так?


Не знаю. Если рассчитываете на помощь, старайтесь сообщать как можно больше необходимой информации. Нужен ваш код, значения переменных и скриншоты квика в этот момент. Могу предположить, что вы путаете номер сделки в поле "Номер" таблицы всех сделок и порядковый номер QUIK. В функцию необходимо передавать порядковый номер сделки QUIK
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Fortis



Зарегистрирован: 11.05.2010
Сообщения: 99
Откуда: Сибири матушки

СообщениеДобавлено: Пт Май 14, 2010 5:39 pm    Заголовок сообщения: Ответить с цитатой

Да действительно, я думал это уникальный номер из таблицы всех сделок.

Запустил просмотрел разные номера и запутался в конец. Что-то не пойму, а что тогда "порядковый номер QUIK"?
Хочу например взять первую сделку(под номером 1 в таблице всех сделок) по данному инструменту - это какая цифра?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Danila
Site Admin


Зарегистрирован: 24.07.2009
Сообщения: 837

СообщениеДобавлено: Пт Май 14, 2010 7:33 pm    Заголовок сообщения: Ответить с цитатой

Fortis писал(а):
Да действительно, я думал это уникальный номер из таблицы всех сделок.

Запустил просмотрел разные номера и запутался в конец. Что-то не пойму, а что тогда "порядковый номер QUIK"?

справа столбик в таблице всех сделок, нам нумерация по порядку с 1.
Но в QuikOrdersDOM нумерация с нуля.

Цитата:

Хочу например взять первую сделку(под номером 1 в таблице всех сделок) по данному инструменту - это какая цифра?

Это цифра 0 Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Fortis



Зарегистрирован: 11.05.2010
Сообщения: 99
Откуда: Сибири матушки

СообщениеДобавлено: Сб Май 15, 2010 8:54 pm    Заголовок сообщения: Ответить с цитатой

От 0 до 25:
[img] http://cpu81.narod.ru/Prim1.JPG [/img]

Дальше с 30 вообще странный переход:
[img] http://cpu81.narod.ru/Prim2.JPG [/img]

Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Main, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
car:cardinal;
begin
car:= strToInt(edit1.Text);
View_Sdel(car);
end;
end.



Цитата:
unit Main;

interface
uses uATLibrary,
SysUtils,Dialogs ;

function AT_LIB_INIT (T : TLibInitialRecord): Cardinal; stdcall;
function AT_LIB_CYCLE: Cardinal ; stdcall;
function AT_LIB_DONE: Cardinal ; stdcall;
function AT_LIB_ABOUT: Cardinal; stdcall;
function AT_LIB_SETUP: Cardinal ; stdcall;

var
bot : TLibInitialRecord ;

procedure View_Sdel(sd:cardinal);

implementation
uses Unit1;

function AT_LIB_INIT (T : TLibInitialRecord): Cardinal; stdcall;
begin
Bot:=T ;
end ;


// ---------------------------------------------------------------------
Procedure View_Sdel(sd:cardinal);
var
Sdel_Info : PTradeInfo;
cardi,i : cardinal;
Stroka : string;

begin

// fATLibGetTradeInfo(sdel,Sdel_Info);
//Sdel_info:=new(PtradeInfo);
new(Sdel_info);
//cardi:=Bot.fATLibGetTradeInfo(sdel,Sdel_Info);
Form1.Memo1.clear;
For i:=sd to sd+25 do
begin
cardi:=Bot.fATLibGetTradeInfo(i,sdel_Info);
stroka:=inttoStr(i)+IntToStr(Sdel_info.N)+' / '+IntToStr(Sdel_Info.SecIdx)+
' / '+FormatDateTime('hh:nn-ss',sdel_Info.TradeDT)+ ' / ' +
FloatToStr(sdel_info.Price)+ ' / '+ IntToStr(sdel_Info.Quantity);

Form1.Memo1.lines.add(stroka);
end;

if cardi<>0 then
Form1.Label4.Caption:='!!Êîñÿê!!';
dispose(sdel_info);
end;

//-----------------------------------------------------------

function AT_LIB_CYCLE: Cardinal ; stdcall;
begin

end ;

function AT_LIB_DONE: Cardinal ; stdcall;
begin
{}
end ;

function AT_LIB_SETUP: Cardinal ; stdcall;
begin
MessageDlg('this is Setup window',mtInformation,[mbOK],0);

end ;

function AT_LIB_ABOUT: Cardinal; stdcall;
var
S : String;
begin
S:='Ïðèìåð ìîäóëÿ àâòîòðåéäèíãà '#13#10'äëÿ QuikOrdersDOM'#13#10;
ShowMessage(S) ;
end ;

end.


В чем может быть ошибка? Confused
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Danila
Site Admin


Зарегистрирован: 24.07.2009
Сообщения: 837

СообщениеДобавлено: Сб Май 15, 2010 10:02 pm    Заголовок сообщения: Ответить с цитатой

пришлите пожалуйста исходник на email
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Fortis



Зарегистрирован: 11.05.2010
Сообщения: 99
Откуда: Сибири матушки

СообщениеДобавлено: Вс Май 16, 2010 4:53 pm    Заголовок сообщения: Ответить с цитатой

Выслал на ttооls@ttооls.ru исходник.

Открыто только одно окно всех сделок. Может конфликтует с каким-нибудь другим окном?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Danila
Site Admin


Зарегистрирован: 24.07.2009
Сообщения: 837

СообщениеДобавлено: Пн Май 17, 2010 9:30 am    Заголовок сообщения: Ответить с цитатой

у меня ваш пример отработал правильно. ?зучил внимательно ваш скриншот - заголовок "Таблица всех сделок#3". Значит, ещё 2 где-то открыты? Надо, чтобы была открыта одна.
Маленькое замечание по коду:
Старайтесь вызывать функции sdk только в потоке QuikOrdersDOM, т.е. внутри функций AT_LIB_INIT, AT_LIB_CYCLE, AT_LIB_DONE
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Fortis



Зарегистрирован: 11.05.2010
Сообщения: 99
Откуда: Сибири матушки

СообщениеДобавлено: Вт Май 18, 2010 8:46 pm    Заголовок сообщения: Ответить с цитатой

Два текущих дня мне эта функция выносит мозг.
Закрывал вообще ВСЕ окна кроме окна всех сделок. Сегодня я уже переустановил себе квик, поставил 5.16.0.128 версию, нажимал очистить все и начать новый сеанс. Никакого толка!!!

Выдает одно и тоже:
[img] http://Cpu81.narod.ru/prim9.JPG [/img]

Откуда вообще время сделки могло взяться 9-15, а уже под номером 19 идет время сделки 19-00?!?!

Мало того, я случайно закрыл окно всех сделок и нажал на кнопку в боте - он мне выдает без стыда и совести привычные данные. Несколько раз еще перепроверил запрашивал разные номера... и он выдает сделки независимо от таблицы квика. Как такое возможно? Откуда берутся данные то?

По правде говоря я уже что-то запутался в конец. Даже уже не знаю где копать... фигня какая-то Evil or Very Mad

p.s
Количество сделок берет верно. Функция видимо снимает данные прямо с экрана у вас, показывает нижнее значение на котором остановлен бегунок и зависит от того насколько широко открыто окно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Danila
Site Admin


Зарегистрирован: 24.07.2009
Сообщения: 837

СообщениеДобавлено: Вт Май 18, 2010 9:48 pm    Заголовок сообщения: Ответить с цитатой

Fortis писал(а):
Два текущих дня мне эта функция выносит мозг.
Закрывал вообще ВСЕ окна кроме окна всех сделок. Сегодня я уже переустановил себе квик, поставил 5.16.0.128 версию, нажимал очистить все и начать новый сеанс. Никакого толка!!!

Выдает одно и тоже:
[img] http://Cpu81.narod.ru/prim9.JPG [/img]
Откуда вообще время сделки могло взяться 9-15, а уже под номером 19 идет время сделки 19-00?!?!

Похоже, вы всё видите верно. Снимите фильтры с таблицы всех сделок и увидите. В 09-15 это "виртуальные" сделки по рассчетным индексам, 19-xx - вечерка.


Цитата:

Количество сделок берет верно. Функция видимо снимает данные прямо с экрана у вас, показывает нижнее значение на котором остановлен бегунок и зависит от того насколько широко открыто окно.

эта ошибка была обнаружена и исправлена для версии 5.15.0.69, Если вы качали QuikOrdersDOM давно - скачайте заново и замените QuikSettings.cfg в папке QuikOrdersDOM. Тогда количество будет определяться вне зависимости от положения бегунка
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Fortis



Зарегистрирован: 11.05.2010
Сообщения: 99
Откуда: Сибири матушки

СообщениеДобавлено: Ср Май 19, 2010 9:25 pm    Заголовок сообщения: Ответить с цитатой

Спасибо за ответы!
Разобрался, действительно, функция отображает все сделки вне завимости от фильтров на таблице всех сделок. Да и квик похоже загружает в любом случае все сделки независимо от настроек отображаемой таблицы.

Получается "сортировать горох" уже нужно вручную по индексу бумаг в квике.

Если позволите вопрос из практических соображений.
Пишется бот.
Насколько актуальнее\целесообразнее\эффективнее будет писать функцию отбора нужных встречных сделок из таблицы занимая процессорное время и некоторые излишние транзакции в противовес изъятию данных из базы данных Access. Я заметил квик позволяет выгружать уже отсортированные данные в базу Access, насколько я понял в реальном времени.
?ли это нисколько не эффективнее будет, или не значительная эффективность будет не оправданна заморочкой с базой?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Trading tools -> QuikOrdersDOM SDK Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB


Яндекс.Метрика