DDE Delphi MT4

 

Доброго всем времени суток.

пишу програмку на дельфи для того чтобы брать текущии котировки (ASK, BID, HIGH, LOW)

Если делать вот таким образом ->


DdeClientConv1

DDeService:='MT4'

DDEtopic:='ASK'


DdeClientItem1

DDEItem:='EURUSD'

procedure TForm1.DdeClientItem1Change(Sender: TObject);
begin
SG.Cells[1,1]:=' ' + DdeClientItem1.Text;
end;

То работает всё ок - но это всего лишь одна пара и одна цена

Если я делаю вот таким образом-> 

var
Form1: TForm1;
i:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
SG.Cells[1,0]:=' Ask';
SG.Cells[2,0]:=' Bid';
SG.Cells[3,0]:=' High';
SG.Cells[4,0]:=' Low';
SG.Cells[0,1]:='EURUSD';
SG.Cells[0,2]:='EURGBP';
SG.Cells[0,3]:='USDJPY';
SG.Cells[0,4]:='GBPJPY';
SG.Cells[0,5]:='GOLD';
end;

procedure TForm1.DdeClientItem1Change(Sender: TObject);
begin
SG.Cells[1,i]:=' ' + DdeClientItem1.Text;
end;

procedure TForm1.DdeClientItem2Change(Sender: TObject);
begin
SG.Cells[2,i]:=' ' + DdeClientItem2.Text;
end;

procedure TForm1.DdeClientItem3Change(Sender: TObject);
begin
SG.Cells[3,i]:=' ' + DdeClientItem3.Text;
end;

procedure TForm1.DdeClientItem4Change(Sender: TObject);
begin
SG.Cells[4,i]:=' ' + DdeClientItem4.Text;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
for i:=1 to SG.RowCount-1 do begin
DdeClientItem1.DdeItem:=SG.Cells[0,i];
DdeClientItem2.DdeItem:=SG.Cells[0,i];
DdeClientItem3.DdeItem:=SG.Cells[0,i];
DdeClientItem4.DdeItem:=SG.Cells[0,i];
end;
end;



Всё работает отлично - но примерно через 2-10-15 минут вылетает сообщение - "Access violation at address 0049b6f7 in module read of address 00000048" - и прога вешается .

я понимаю что через таймер получать котировки неправильно, но с другой стороны я невижу как сделать это без таймера

подскажите пажалусто как получать котировки по изменению цены а не по запросу таймера .

заранее всем благодарен.

С Уважением Сергей

 

Вон по этой ссылке я приводил код функции, получающей данные из DDE. Правда там тоже надо по запросу их получать, а не по изменению информации

 

Простите, что в эту тему, но не сможет ли кто прояснить мне вопрос:

Что за HIGH и LOW отправляет DDE-сервер MT4 ???

High и Low - это за какое время?


Спасибо.

 
Для реакции вашей процедуры Timer1Timer не по таймеру, а по событию изменения цены достаточно прописать процедуру OnChange в вашем DdeClientItem1. Тогда при изменении цены, каждый раз будет вызываться ваша процедура обработки.