нужна помощь

  • Автор темы vlad-tlt
  • Дата начала

vlad-tlt

New member
Уважаемые коллеги , при написании кода индикатора торговой позиции (1-LONG, -1-SHORT,0- вне рынка) , на языке Метасток , возникла проблема.
Имеем некий индикатор тренда (Инициирует +1-Long,-1-Short).
В качестве фильтра для входа ,используем пересечение двух линий a,b ( в момент пресечения инициируется 1).
Индикатор торговой стратегии будет инициировать 1 когда индикаторы тренда и фильтра равны ссответственно 1.
Вся загвоздка заключается в том , что описывая фильтр функцией cross(a,b) получаем 1 только в момент пересечения, в остальное время 0 ; что приводит к скачкообразному движению индикатора позиции. Описание фильтра функцией типа a>b , также не преемлемо в моём случае . Подскажите как ещё можно описать фильтр ???
[/b]
 

Intro

New member
А почему не приемлемо а>b? Как же вы хотите, чтобы работал ваш фильтр? Возможно вам поможет конструкция типа alert(cross(a,b),xbars) .
 

vlad-tlt

New member
А почему не приемлемо а>b? Как же вы хотите, чтобы работал ваш фильтр? Возможно вам поможет конструкция типа alert(cross(a,b),xbars) .
Непреемлемо (a>b) по причине того, что это условие не остаётся постоянным после открытия позиции ( проще говоря - линии a,b могут неоднократно пересекаться) , даже сгладив их скользящими средними ,а это приведёт к скачкам +1 -1 самого индикатора торговой позиции.
Использование конструкции типа alert , так же мною рассматривалось;
нет возможности определить длину периода xbars - использование малой длины приводит к преждевременному обнулению фильтра и закрытию позиции, большой - пропуск и ложные сигналы фильтра.
Хотя в принципе , использование alert можно допустить при работе
" в ручную" , но единого индикатора торговой позиции не получится и оценить торговую стратегию за длительный период времени не удастся.
Может быть попробывать использовать фильтр только для открытия позиции , а дальше его игнорировать , но КАК ???
 

DN

New member
Вроде начал понимать ситуацию..........

Только не понял проблемы......должно ANDа хватить........
 

mehanizator1

New member
сигнал на открытие = условия
сигнал на закрытие = условия

состояние = BarsSince(сигнал на открытие)<BarsSince(сигнал на закрытие)
 

vlad-tlt

New member
сигнал на открытие = условия
сигнал на закрытие = условия

состояние = BarsSince(сигнал на открытие)<BarsSince(сигнал на закрытие)

Таким образом выразить состояние позиции не получается , т.к. в условие открытия входит фильтр , который после открытия позиции необходимо игнорировать.

Вот что получается:

a:=индикатор тренда
b:=фильтр( две скользящие средние)
BS1:=If(b,1,-1);
BS2:=If(a<CLOSE AND BS1=1 ,1,0);{ условие открытия}
BS3:=If(a>CLOSE,0,BS2);{условие закрытия}
BS4:=BS3*BS2;{позиция}
BS4{1;0}

Необходимо, что бы после того как BS4 становится равным 1 фильтр b не учитывался в формуле (был велечиной постоянной 1 , до закрытия позиции).
Написав условие , типа If(BS4=1,BS1=1,0) получается абсурд , т.к. BS1 входит в расчёт BS4 .

Прошу коллеги ВАШЕЙ помощи .
 

Dimus

New member
Влад, если я тебя правильно понял по алгоритму, то попробуй написать таким вот образом:

EL:=a<C AND b;
CL:=a>C;
ES:=a>C AND b;
CS:=a<C;
If(Cum(1)=1,0,If(EL,1,If(ES,-1,If((CL AND PREV=1) OR (CS AND PREV=-1),0,PREV))))

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

vlad-tlt

New member
Влад, если я тебя правильно понял по алгоритму, то попробуй написать таким вот образом:

EL:=a<C AND b;
CL:=a>C;
ES:=a>C AND b;
CS:=a<C;
If(Cum(1)=1,0,If(EL,1,If(ES,-1,If((CL AND PREV=1) OR (CS AND PREV=-1),0,PREV))))

в данном случае EL - открытие лонга, остальное в том же направлении.
Если не правильно понял, то попробуй алгоритма открытия-закрытия, лонга-шорта вставить вместо моих условий.
последнюю строку не трогай - она выдает -1,0,1 на основе условий алгоритма
СПАСИБО , сегодня попробую !!!
 

Dim_plus

New member
Уважаемые коллеги , при написании кода индикатора торговой позиции (1-LONG, -1-SHORT,0- вне рынка) , на языке Метасток , возникла проблема.
Имеем некий индикатор тренда (Инициирует +1-Long,-1-Short).
В качестве фильтра для входа ,используем пересечение двух линий a,b ( в момент пресечения инициируется 1).
Индикатор торговой стратегии будет инициировать 1 когда индикаторы тренда и фильтра равны ссответственно 1.
Вся загвоздка заключается в том , что описывая фильтр функцией cross(a,b) получаем 1 только в момент пересечения, в остальное время 0 ; что приводит к скачкообразному движению индикатора позиции. Описание фильтра функцией типа a>b , также не преемлемо в моём случае . Подскажите как ещё можно описать фильтр ???
[/b]
для фильтра нужно использовать функцию Метастока:
ValueWhen(1,Cross(a,b),1); тогда 1-ца будет после пересечения на каждом баре
 

vlad-tlt

New member
Влад, если я тебя правильно понял по алгоритму, то попробуй написать таким вот образом:

EL:=a<C AND b;
CL:=a>C;
ES:=a>C AND b;
CS:=a<C;
If(Cum(1)=1,0,If(EL,1,If(ES,-1,If((CL AND PREV=1) OR (CS AND PREV=-1),0,PREV))))

в данном случае EL - открытие лонга, остальное в том же направлении.
Если не правильно понял, то попробуй алгоритма открытия-закрытия, лонга-шорта вставить вместо моих условий.
последнюю строку не трогай - она выдает -1,0,1 на основе условий алгоритма
Большое спасибо, всё работает так как и должно на 5+!!!
Но не пойму как работает PREV в последней строке, если не затруднит поясни .
 

Dimus

New member
Большое спасибо, всё работает так как и должно на 5+!!!
Но не пойму как работает PREV в последней строке, если не затруднит поясни .
Понятия не имею как она работает!!! :) В свое время мучался с проблемой похожей, в итоге выдернул готовую функцию. Как работает PREV до сихпор не понял. В других случаях я ее не использую...
 

vlad-tlt

New member
Большое спасибо, всё работает так как и должно на 5+!!!
Но не пойму как работает PREV в последней строке, если не затруднит поясни .
... в итоге выдернул готовую функцию...

откуда выдернул , если не затруднит ссылку .
 
Your email address will not be publicly visible. We will only use it to contact you to confirm your post.
Сверху