Простите, что в эту тему, но не сможет ли кто прояснить мне вопрос:
Что за HIGH и LOW отправляет DDE-сервер MT4 ???
High и Low - это за какое время?
Спасибо.
Для реакции вашей процедуры Timer1Timer не по таймеру, а по событию изменения цены достаточно прописать процедуру OnChange в вашем DdeClientItem1. Тогда при изменении цены, каждый раз будет вызываться ваша процедура обработки.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброго всем времени суток.
пишу програмку на дельфи для того чтобы брать текущии котировки (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" - и прога вешается .
я понимаю что через таймер получать котировки неправильно, но с другой стороны я невижу как сделать это без таймера
подскажите пажалусто как получать котировки по изменению цены а не по запросу таймера .
заранее всем благодарен.
С Уважением Сергей