Вопрос по макроязыку Метастока

  • Автор темы Mrc
  • Дата начала

Mrc

New member
Всем привет!

Потихоньку осваиваю Метас.
Вчера разбирался с тестированием систем. Попробовал создать самую примитивную систему, которая открывала бы позиции на локальных минимумах и максимумах моего собственного индикатора.

Код входа в лонг выглядит примерно так:
fml("MyInd") > ref(fml("MyInd"),-1) and
ref(fml("MyInd"),-1) < ref(fml("MyInd"),-2)
Выход по обратному условию.

На этапе тестирования не было заключено ни одной сделки, хотя минимумы и максимумы индикатора явно видны.
Если заменить мой индикатор на любой из встроенных, например MACD, то все работает (хотя и с убытком ;) ).

Что я делаю неправильно?
 

Mrc

New member
Ну что, никто не может подсказать?
Скорее всего, я как-то неправильно обращаюсь к своему индикатору. Но как еще можно его вызвать - пока не знаю.
Подскажите, плз...
 

Dimus

New member
Ну что, никто не может подсказать?
Скорее всего, я как-то неправильно обращаюсь к своему индикатору. Но как еще можно его вызвать - пока не знаю.
Подскажите, плз...
Ты когда просто индикатор накладываешь на котировки он у тебя динамику показывает? Или тупо горизонтальной чертой по 0. Если последнее, то он не работает. Если показывается динамику, то все нормально.
 
Ну что, никто не может подсказать?
Скорее всего, я как-то неправильно обращаюсь к своему индикатору. Но как еще можно его вызвать - пока не знаю.
Подскажите, плз...
Набросал в мете индикатор, назвал его также "MyInd" ...затем советник с вызовом индикатора..вроде сигналы показывает..
 

Mrc

New member
Спасибо за ответы.
Ты когда просто индикатор накладываешь на котировки он у тебя динамику показывает? Или тупо горизонтальной чертой по 0. Если последнее, то он не работает. Если показывается динамику, то все нормально.
Нет, график рисуется. Я же сказал, что ясно вижу все минимумы и максимумы.
Вчера еще раз перечитал мануал, понял, что, наверное, неправильно использовал fml(). Это не array, а я пытаюсь адресоваться к предыдущему и пред-пердыдущему значениям. Надо было использовать P, это Array Data Identifier.
Переписал условия, проставив везде P вместо fml("MyInd"). Не помогло.
Я правильно понимаю, что пользовательская функция (Р) - это та, которя в настоящий момент выделена на графике? По мануалу, вроде, получается так.
To run a system test, exploration, or expert that contains a "P" variable
1. Write a system test, exploration, or expert using the "P" variable in place of the data array identifier (e.g., mov(p,10,e), sum(p,25), stdev(p,12), etc.).
2. Select the plot (i.e., indicator or price plot) to use for the "P" variable by clicking directly on the plot. The plot is selected when small square "handles" appear on the plot.
3. Run the system test or exploration.
Т.е. надо написать формулу, содержащую "Р", выделить график и запустить тест.
А вот все одно ни фига не работает :(

Набросал в мете индикатор, назвал его также "MyInd" ...затем советник с вызовом индикатора..вроде сигналы показывает..
Да показывается он на экране, я систему с его участием протестировать не могу :(
Если знаете как написать систему, которая тестирует пользовательский индикатор, не могли бы вы расписать процесс по шагам, для тупого? :)

Попутный вопрос: я правильно понимаю, что можно использовать только один пользовательский индикатор (массив) в расчетах? Ведь Р ссылается только на одну пользовательскую функцию.
 
Да показывается он на экране, я систему с его участием протестировать не могу :(
Если знаете как написать систему, которая тестирует пользовательский индикатор, не могли бы вы расписать процесс по шагам, для тупого? :)
Тестируются алгоритмы, а не индикаторы. Тестер выбирает оптимальные значения переменных opt1, opt2 итд. В индикаторе уже заложены определенные условия, там тестировать нечего. Пропишите Ваш алгоритм в тестере, заменив значения на opt1, opt2.. итд. Будет результат..

Попутный вопрос: я правильно понимаю, что можно использовать только один пользовательский индикатор (массив) в расчетах? Ведь Р ссылается только на одну пользовательскую функцию.
[/quote]

Если речь идет о системе, то возможно использовать несколько индикаторов. Для примера можете посмотреть систему индикаторов Binary Waves в Метастоке 7.
 
Если знаете как написать систему, которая тестирует пользовательский индикатор, не могли бы вы расписать процесс по шагам
Открываем System tester. Затем New, прописываем условия для лонга и шорта, предварительно заменив значения индикатора на opt1,2,2....
 

Mrc

New member
Открываем System tester. Затем New, прописываем условия для лонга и шорта, предварительно заменив значения индикатора на opt1,2,2....
Вот все, что после слова New и хотелось бы по шагам :)

Если вам не очень сложно, не могли бы вы сделать следующую вещь:

Создать следующий индикатор MyInd:
Т.е. это просто MACD с другими периодами.

А после этого протестировать систему, которая открывала бы лонги на локальном минимуме индикатора (когда текущее значение выше предыдущего, а предыдущее - меньше пред-предыдущего), а закрывала бы по противоположному условию (когда текущее значение меньше предыдущего, а предыдущее - больше пред-предыдущего).

Мне протестировать такую систему не удается, она не заключает сделок вообще. Если подставить вместо MyInd любую встроенную (не пользовательскую) функцию - все работает. Значит, дело в ручках :(
 
Т.е. это просто MACD с другими периодами.

А после этого протестировать систему, которая открывала бы лонги на локальном минимуме индикатора (когда текущее значение выше предыдущего, а предыдущее - меньше пред-предыдущего), а закрывала бы по противоположному условию (когда текущее значение меньше предыдущего, а предыдущее - больше пред-предыдущего).

Мне протестировать такую систему не удается, она не заключает сделок вообще. Если подставить вместо MyInd любую встроенную (не пользовательскую) функцию - все работает. Значит, дело в ручках :(

Индикатор создавать не надо. Ваш алгоритм для теста будет иметь следующий вид:

лонг

Mov(C,opt1,E)-Mov(C,opt2,E) > Ref(Mov(C,opt1,E)-Mov(C,opt2,E),-1) AND
Ref(Mov(C,opt1,E)-Mov(C,opt2,E),-1) < Ref(Mov(C,opt1,E)-Mov(C,opt2,E),-2)


шорт

Mov(C,opt1,E)-Mov(C,opt2,E) < Ref(Mov(C,opt1,E)-Mov(C,opt2,E),-1) AND
Ref(Mov(C,opt1,E)-Mov(C,opt2,E),-1) > Ref(Mov(C,opt1,E)-Mov(C,opt2,E),-2)

где Mov(C,opt1,E)-Mov(C,opt2,E) - ваш "индикатор"

после теста, получим значения переменных и забиваем их в эксперт
 

Dimus

New member
у тебя "MyInd" на чем основан? выложи нормально функцию и ее прицепи в алгоритме. Если есть возможность не использования внешних функций, то надо этим пользоваться. Так тупить меньше будет.
 

Mrc

New member
гм... Использовать пятиэтажные формулы без вызова внешних функций мне как-то в голову не пришло :) Спасибо, буду пробовать.

[спустя время]
Спасибо, заработало!
Хотя и жутко неудобно эти пятиэтажные формулы городить...
 
Your email address will not be publicly visible. We will only use it to contact you to confirm your post.
Сверху