Перейти к содержанию
Форекс Форум трейдеров Академии «MasterForex-V»

Начальное обучение (Практика)


Рекомендуемые сообщения

Практическое занятие № 4.7 (2). Раскраска (Продолжение)

И наконец, запрограммируем «маляра».

Выделим таблицу sgBidAsk и перейдем в инспекторе объектов на вкладку Events. Создадим реакцию на событие OnDrawCell. Проблема вся в том, что в StringGrid нет методов закрашивания отдельных ячеек и изменения цвета шрифта в этих ячейках, а посему будем все делать (раскрашивать) ручками, через объект Canvas (холст).

http://s42.radikal.ru/i096/1004/ff/1b4798f5ef43.gif

 

И начинаем писать…

void __fastcall TForm1::sgBidAskDrawCell(TObject *Sender, int ACol,
	int ARow, TRect &Rect, TGridDrawState State)
{
// Если в ячеке пусто - выходим
if (sgBidAsk->Cells[ACol][ARow].IsEmpty()) return;
// Если ячейка фиксированная - выходим
if (State.Contains(gdFixed)) return;

// Если текст
if (rgColor->ItemIndex == 1)
{
	// Ask или Bid
	if (ACol == 1 || ACol == 2)
	{
	// Если новое значение ячеки больше или равно предыдущего
	// Тогда цвет шрифта синий
	// в противном случае красный
	if (TextToDouble(sgBidAsk->Cells[ACol][ARow]) >= PrevQuote[ACol - 1][ARow - 1])
	sgBidAsk->Canvas->Font->Color = clBlue;
	else
	sgBidAsk->Canvas->Font->Color = clRed;
	// Забираем текст из ячейки
	AnsiString s = sgBidAsk->Cells[ACol][ARow];
	// и переривовываем его новым цветом
	sgBidAsk->Canvas->TextRect(Rect, Rect.Left + 2, Rect.Top + 2, s);

	}
}
// Если ячейка
if (rgColor->ItemIndex == 2)
{
	// Ask или Bid
	if (ACol == 1 || ACol == 2)
	{
	// Если новое значение ячеки больше или равно предыдущего
	// Тогда цвет киски светлозеленый
	// в противном случае красный
	if (TextToDouble(sgBidAsk->Cells[ACol][ARow]) >= PrevQuote[ACol - 1][ARow - 1])
	sgBidAsk->Canvas->Brush->Color = clLime;
	else
	sgBidAsk->Canvas->Brush->Color = clRed;
	// Копируем текст
	AnsiString s = sgBidAsk->Cells[ACol][ARow];
	// Заливаем регион
	sgBidAsk->Canvas->FillRect(Rect);
	// Пишем текст
	sgBidAsk->Canvas->TextRect(Rect, Rect.Left + 2, Rect.Top + 2, s);
	}
}
// Во всех остальных случаях по умолчанию
}

Вообще-то говоря, можно было сравнивать значения только одного типа (bid или ask) - в большинстве случаев спред у ДЦ фиксированный, но мы оставим так как есть, на случай работы с брокером, у которого плавающий спред. Чем больше возможностей у программы, тем шире спектр применения.

 

И еще пару украшательств…

Изменим шрифт в нашей таблице – сделаем его жирным и увеличим размер:

http://i037.radikal.ru/1004/cf/644c5c11021b.gif

 

И наконец. Добавим событие onclick для нашего группового переключателя rgColor.

void __fastcall TForm1::rgColorClick(TObject *Sender)
{
sgBidAsk->Invalidate();
}

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

F9, смотрим…

http://s58.radikal.ru/i160/1004/4f/5d91daa55a07.gif

 

Самостоятельно:

- как обычно, делаем для других валютных пар.

Quote_Event_Color_release.zip

Quote_Event_Color_source.zip

Ссылка на комментарий
Поделиться на другие сайты

Практическое занятие № 4.8. Приложение «в динамике».

 

«В динамике» не следует понимать буквально. Программу в динамик мы конечно запихивать не будем. Конечно, Вы догадались, что мы будем использовать динамическое создание объектов.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

 

И наконец. Добавим событие onclick для нашего группового переключателя rgColor.

void __fastcall TForm1::rgColorClick(TObject *Sender)
{
sgBidAsk->Invalidate();
}

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

F9, смотрим…

 

Если требуется немедленная перерисовка, то лучше использовать метод Update: sgBidAsk->Update(). Для таких компонентов как гриды(сетка) при полной перерисовке лучше вообще

использовать метод Refresh()(который вызовет Repaint, который в свою очередь вызовет Invalidate, а затем Update) и не мучиться.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Здравствуйте, не знал куда обратиться, поэтому пишу сюда.

Нашел исходник History Analist у вас на сайте.

Просто она похожа на курсовую.

Возникла проблема:

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

2) А когда другую базу устанавливал выводило ошибку с "8 is not valid integer value

 

Прошу помощи, курсач на неделе сдавать)

post-153375-0-55348300-1322937071_thumb.png

post-153375-0-75935800-1322937076_thumb.png

post-153375-0-60555300-1322937080_thumb.png

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
все просто- эта ошибка возникает в момент попытки преобразования текса в вещесвенное число. и приэтом в знак разделителя не совпадает с системным. надо поменять знак разделения дробной части и все заработает.
Ссылка на комментарий
Поделиться на другие сайты

  • 6 месяцев спустя...

это какие-то поделки, а не обучение С++.

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

Ссылка на комментарий
Поделиться на другие сайты

  • 3 года спустя...

это какие-то поделки, а не обучение С++.

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

плюсую

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

 

это какие-то поделки, а не обучение С++.

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

плюсую

 

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

Первый вопрос, а допускается ли такое? Есть стандарт или все эти терминалы МТ4 или  МТ5 являются закрытыми программами, без взаимодействия с расширениями и так далее.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...