Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Выбор параметров для построения индикатора Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 207
Откуда: Новосибирск

СообщениеДобавлено: Чт Дек 28, 2017 9:16 am Ответить с цитатой Вернуться к началу

Вопрос следующий.

Конечная задача - отрисовать некую кривую на графике.
У кривой будет точка начала расчета. Как это сделать, вроде понятно.

Далее. Кривая строится по формуле. Т.е.:

Y = F(x);

Вопрос - как сделать выбор в контекстном меню индикатора для x. Я говорю о том, что формула расчета может быть разная. Может быть А, может быть Б, может быть В.

Далее в каждой формуле также необходим выбор пары внутренних параметров. Т.е. расчет А может проводится по параметрам а, либо б, либо в и т.д.

Прошу помочь составить мне некий скелет из

Y = F(x)

x = A или Б или В

Параметры для расчета формул А или Б или В:
к примеру, может использоваться или хай или лой свечей,
к примеру, может использоваться разные формулы параметра.

Т.е. должен быть скелет самого кода и чтобы он выводил этот выбор в меню.
Посмотреть профиль Отправить личное сообщение
yser



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

СообщениеДобавлено: Чт Дек 28, 2017 11:07 am Ответить с цитатой Вернуться к началу

если я правильно поля, то что-то типа этого:
Код:
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
Сообщения: 207
Откуда: Новосибирск

СообщениеДобавлено: Пт Дек 29, 2017 6:42 am Ответить с цитатой Вернуться к началу

Создал следующую конструкцию.

Код:
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
Сообщения: 74

СообщениеДобавлено: Пт Дек 29, 2017 9:03 am Ответить с цитатой Вернуться к началу

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

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
Сообщения: 207
Откуда: Новосибирск

СообщениеДобавлено: Пт Дек 29, 2017 9:39 am Ответить с цитатой Вернуться к началу

Это я названия потер для выкладки кода сюда. На самом деле там все совпадает.

Пробовал перед каждым блоком прописывал: xi = 1, wis = 1, wi = 1. Ну каждая переменная перед своим блоком.
Ошибка уходит, однако выбор не везде проходит. К примеру, выбираю Ср для Xi - рисует верно. Выбираю Х - рисует просто линию на уровне 1.

Вот, все сходится.
Посмотреть профиль Отправить личное сообщение
AntColonel



Зарегистрирован: 03.05.2011
Сообщения: 207
Откуда: Новосибирск

СообщениеДобавлено: Пт Дек 29, 2017 10:02 am Ответить с цитатой Вернуться к началу

ВСЁ! НАЛАДИЛ!
За код скелета спасибо!
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen