Автор |
Сообщение |
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
Вопрос следующий.
Конечная задача - отрисовать некую кривую на графике.
У кривой будет точка начала расчета. Как это сделать, вроде понятно.
Далее. Кривая строится по формуле. Т.е.:
Y = F(x);
Вопрос - как сделать выбор в контекстном меню индикатора для x. Я говорю о том, что формула расчета может быть разная. Может быть А, может быть Б, может быть В.
Далее в каждой формуле также необходим выбор пары внутренних параметров. Т.е. расчет А может проводится по параметрам а, либо б, либо в и т.д.
Прошу помочь составить мне некий скелет из
Y = F(x)
x = A или Б или В
Параметры для расчета формул А или Б или В:
к примеру, может использоваться или хай или лой свечей,
к примеру, может использоваться разные формулы параметра.
Т.е. должен быть скелет самого кода и чтобы он выводил этот выбор в меню. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
yser
Зарегистрирован: 30.11.2011
Сообщения: 76
|
если я правильно поля, то что-то типа этого:
Код: |
f1 = ParamList("Формула", "Формула1,Формула2,Формула3", 0);
p1 = ParamField("Параметр1", 0);
p2 = ParamField("Параметр2", 3);
p3 = ParamList("Параметр3", "A,B,C", 0);
if (f1=="Формула1") {
r = MA(p1, 3);
} else
if (f1=="Формула2") {
r = TEMA(p1, 3);
} else
if (f1=="Формула3") {
r = MA((p1+p2)/2, 9);
}
Plot(r, "RES", colorBlack, styleLine); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
Создал следующую конструкцию.
Код: |
f1 = ParamList("Расчет", "А,Г,Г2", 1);
xiname = ParamList("Основа расчета", "Ср, Х, Л, З", 0);
wisname = ParamList("Основа в...", "О.., Д.., Д2, Т...", 1);
winame = ParamList("СЗВ", "Н..., К.., К2, К3, ДС, Exp+ДС, Т...", 0);
dd = ParamDate("Дата начала", "2012-01-10", 0);
tt = ParamTime("Время начала", "12:00:00", 0);
BarsStart = 1 + BarsSince(DateNum() == dd AND tt == TimeNum());
StartBar = ValueWhen(DateNum() == dd AND tt == TimeNum(), BarIndex());
if (xiname=="Ср") {
xi = (H+L)/2;
} else
if (xiname=="Х") {
xi = H;
} else
if (xiname=="Л") {
xi = L;
} else
if (xiname=="З") {
xi = C;
}
if (wisname=="О...") { ..
wis = V;
} else
if (wisname=="Д...") {
wis = H-L;
} else
if (wisname=="Д2") {
wis = (H-L) / ((H+L)/2) * 100;
} else
if (wisname=="Т...") {
wis = V;
}
if (winame=="Н...") {
wi = wis;
} else
if (winame=="К...") {
wi = арифмитическая операция с wis;
} else
if (winame=="К2") {
wi = арифмитическая операция с wis;
} else
if (winame=="К3") {
wi = арифмитическая операция с wis;
} else
if (winame=="ДС") {
wi = арифмитическая операция с wis;
} else
if (winame=="Exp+ДС") {
wi = арифмитическая операция с wis;
} else
if (winame=="Т...") {
wi = wis;
}
if (f1=="А") {
umidformula = Конечная формула с переменными wi и xi;
} else
if (f1=="Г") {
umidformula = Конечная формула #2 с переменными wi и xi;
} else
if (f1=="Г2") {
umidformula = Конечная формула #3 с переменными wi и xi;
}
IIf (BarIndex() >= StartBar, umid = umidformula, Null);
umid = IIf(umid > 0 , umid, Null);
Plot (umid,"UMID",colorWhite, styleLine | styleNoRescale, Null, Null, 0, 0, width);
|
В итоге выдает ошибку следующего вида: |
|
|
Посмотреть профиль Отправить личное сообщение |
|
yser
Зарегистрирован: 30.11.2011
Сообщения: 76
|
это значит что у тебя переменная не инициализирована т.е. на момент расчета такой переменной нету и могу предположить что это из за того что ни одно условие из этого блока не сработало:
Код: |
if (wisname=="О...") { ..
wis = V;
} else
if (wisname=="Д...") {
wis = H-L;
} else
if (wisname=="Д2") {
wis = (H-L) / ((H+L)/2) * 100;
} else
if (wisname=="Т...") {
wis = V;
} |
и если внимательно присмотреться к заданию параметров и соответствующему блоку условий
Код: |
wisname = ParamList("Основа в...", "О.., Д.., Д2, Т...", 1); |
то видно что ни одно значение наименований не совпадают с проверяемыми значениями в условии, например : "O.." и "O...", " Д.." и "Д...", " Д2" и " Д2" , "Т..." и " Т..."
Код: |
wisname = ParamList("Основа в...", "О.., Д.., Д2, Т...", 1); - из твоего примера
wisname = ParamList("Основа в...", "О...,Д...,Д2,Т...", 1); - а нужно так, что бы сработали условия |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
Это я названия потер для выкладки кода сюда. На самом деле там все совпадает.
Пробовал перед каждым блоком прописывал: xi = 1, wis = 1, wi = 1. Ну каждая переменная перед своим блоком.
Ошибка уходит, однако выбор не везде проходит. К примеру, выбираю Ср для Xi - рисует верно. Выбираю Х - рисует просто линию на уровне 1.
Вот, все сходится. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
ВСЁ! НАЛАДИЛ!
За код скелета спасибо! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|