Автор |
Сообщение |
Tim
Зарегистрирован: 12.02.2010
Сообщения: 245
Откуда: Дмитров
|
Уже сломал мозг ((
Решил реализовать простейшую систему и банально уткнулся в то, что ну никак не найду необходимых формул для её реализации.
Просто ступор, блин
Таймфрейм 15 минут.
Система даёт 4 сигнала:
Buy на пробитии ценой закрытия MA(Close,87)+13;
Short на пробитии ценой закрытия MA(Close,87)-13;
Sell на пробитии ценой закрытия MA(Close,45) сверху вниз;
Cover на пробитии ценой закрытия MA(Close,45) снизу вверх.
Всё. Довольно просто... как казалось в начале.
Проблема в том, что при пересечении Close 87-ми периодной средней переменной X1 или X2 присваивается 1, но только для данной свечи.
А мне необходимо сохранять признак пересечения ценой средней линии до появления сигнала Short или Buy, и с их появлением обнулять этот признак.
Конструкция :
Код: |
BuyMA=MA(C,87)+13;
ShortMA=MA(C,87)-13;
X1=Cross(C,BuyMA);
X2=Cross(ShortMA,C);
XShort=Flip(X2,Short);
XBuy=Flip(X1,Buy);
Buy= Cross(C,BuyMA) AND XBuy;
Short = Cross(ShortMA,C) AND XShort; |
не помогает, т.к. не получается обнулять XShort и XBuy, в случае лонга или шорта.
Там постоянно 1.
Как сделать обнуление этих переменных после появления сигнала???
Чтобы не было более 1 сигнала после пересечения средней.
После одного Buy или Short должен быть только один Sell/Short или Cover/Buy соответственно. |
_________________ УСПЕХ — это движение от неудачи к неудаче БЕЗ ПОТЕРИ ЭНТУЗИАЗМА.
- Уинстон Черчилль |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Tim писал(а): |
Уже сломал мозг ((
Решил реализовать простейшую систему и банально уткнулся в то, что ну никак не найду необходимых формул для её реализации.
Просто ступор, блин
Таймфрейм 15 минут.
Система даёт 4 сигнала:
Buy на пробитии ценой закрытия MA(Close,87)+13;
Short на пробитии ценой закрытия MA(Close,87)-13;
Sell на пробитии ценой закрытия MA(Close,45) сверху вниз;
Cover на пробитии ценой закрытия MA(Close,45) снизу вверх.
Всё. Довольно просто... как казалось в начале.
Проблема в том, что при пересечении Close 87-ми периодной средней переменной X1 или X2 присваивается 1, но только для данной свечи.
А мне необходимо сохранять признак пересечения ценой средней линии до появления сигнала Short или Buy, и с их появлением обнулять этот признак.
Конструкция :
Код: |
BuyMA=MA(C,87)+13;
ShortMA=MA(C,87)-13;
X1=Cross(C,BuyMA);
X2=Cross(ShortMA,C);
XShort=Flip(X2,Short);
XBuy=Flip(X1,Buy);
Buy= Cross(C,BuyMA) AND XBuy;
Short = Cross(ShortMA,C) AND XShort; |
не помогает, т.к. не получается обнулять XShort и XBuy, в случае лонга или шорта.
Там постоянно 1.
Как сделать обнуление этих переменных после появления сигнала???
Чтобы не было более 1 сигнала после пересечения средней.
После одного Buy или Short должен быть только один Sell/Short или Cover/Buy соответственно. |
Используй Barssince(), потом фильтруй exrem(), а потом сравнивай Barssince(условие buy)<Barssince(условие short). |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В общем не понятно зачем это надо. Но я бы сделал так.
Код: |
BuyMA=MA(C,87)+13;
ShortMA=MA(C,87)-13;
X1=Cross(C,BuyMA);
X2=Cross(ShortMA,C);
X1 = ExRem(X1, X2);
X2 = ExRem(X2, X1);
Buy = X1;
Short = X2;
|
Все. XShort и XBuy не нужны. Лишние сигналы удалены функцией ExRem(). Если XShort и XBuy небходимы потом, то можно их сделать при помощи Flip() |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Tim
Зарегистрирован: 12.02.2010
Сообщения: 245
Откуда: Дмитров
|
Я привёл не весь код, поэтому меня неверно поняли.
Извините.
Утром завтра покажу весь код.
Дело в том, что есть 2 сигнала: пересечение со средней, и пересечение Close средней+-13 для выставления ордера.
Первый сигнал простого пересечения появляется только для одной свечи, которая пересекла. На дальнейших свечах команда Cross даёт нули и обнуляет этот признак.
Потом необходимо этот признак пересечения сохранять, до тех пор пока:
- либо тенденция не усилиться и не произойдет ухода Close от средней более, чем на 12 пунктов,
- либо тенденция ослабнет и цена откатится, пересекая среднюю в обратном направлении, что должно обнулить признак предыдущего пересечения и присвоить 1 признаку нового обратного пересечения. |
_________________ УСПЕХ — это движение от неудачи к неудаче БЕЗ ПОТЕРИ ЭНТУЗИАЗМА.
- Уинстон Черчилль |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если надо зафиксировать некое событие и "удерживать" его в течении некоторого времени, то пользуйся функцией Hold() |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Tim
Зарегистрирован: 12.02.2010
Сообщения: 245
Откуда: Дмитров
|
Всё равно не получается даже Hold не помогает. Пока отложил - вышла другая более первоочередная проблема.
P.S. Вот так уже почти год ни одну систему добить не получается. Всё времся всякая хрень вылезает. Задолбало! Или я идиот, или просто тупой
Обнаружил ещё одну ошибку в системе:
Код: |
Capital=100000;
Risk=Optimize("Risk",2.5,1,1,0.5);//планируемый риск
R1=Risk*0.7/100;
R2=Risk*0.3/100;
RR1=R1*Capital;
RR2=R2*Capital;
Filter=1;
AddColumn(Capital,"Capital",1.0);
AddColumn(Risk,"Risk",1.0);
AddColumn(R1,"R1",1.0);
AddColumn(RR1,"RR1",1.0);
|
В Exploration все значения выводятся стабильно нулевыми, кроме Capital и Risk.
Они всегда 100000 и 3 (видимо округяет).
Почему не происходит расчёта переменных? |
_________________ УСПЕХ — это движение от неудачи к неудаче БЕЗ ПОТЕРИ ЭНТУЗИАЗМА.
- Уинстон Черчилль |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
вот в этой строке
Код: |
AddColumn(Capital,"Capital",1.0);
|
1.0 обозначает выводить 0 десятичных знаков, а там получается значение меньше 0. Напиши там например 1.4
Не только в этой строке. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Tim
Зарегистрирован: 12.02.2010
Сообщения: 245
Откуда: Дмитров
|
Ага, теперь всё видно, что считает.
Возвращаюсь к проблеме Hold.
Спасибо ) |
_________________ УСПЕХ — это движение от неудачи к неудаче БЕЗ ПОТЕРИ ЭНТУЗИАЗМА.
- Уинстон Черчилль |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А с ним то что не так? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Tim
Зарегистрирован: 12.02.2010
Сообщения: 245
Откуда: Дмитров
|
Да, просто мучаюсь с вопросом - заранее неизвестно сколько баров надо держать сигнал.
Т.е. надо как-то прописать, чтобы на получении сигнала на Бай/Шорт он прекратил держать сигнал пересечения.
А наперед это невозможно сделать.
Видимо как-то добавлять по 1-це каждый бар что ли... хз.
Есть ещё трабла, с которой борюсь, но про неё позже - спать пойду ) |
_________________ УСПЕХ — это движение от неудачи к неудаче БЕЗ ПОТЕРИ ЭНТУЗИАЗМА.
- Уинстон Черчилль |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Первый сигнал простого пересечения появляется только для одной свечи, которая пересекла. На дальнейших свечах команда Cross даёт нули и обнуляет этот признак.
Потом необходимо этот признак пересечения сохранять, до тех пор пока:
- либо тенденция не усилиться и не произойдет ухода Close от средней более, чем на 12 пунктов,
- либо тенденция ослабнет и цена откатится, пересекая среднюю в обратном направлении, что должно обнулить признак предыдущего пересечения и присвоить 1 признаку нового обратного пересечения.
|
Код: |
BuyMA = Cross(C, MA(C,87));
OffBuyMA = Cross(MA(C,87), C) OR Cross(C, MA(C,87) + 12*TickSize);
Xbuy = Flip(BuyMA, OffBuyMA);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Tim
Зарегистрирован: 12.02.2010
Сообщения: 245
Откуда: Дмитров
|
Спасибо за код.
Возник ещё непонятный момент:
Цитата: |
A = условия;
S = условия;
A=Flip(A,S);
S=Flip(S,A);
Buy = A AND ...;
Short = S AND ...;
BuyPrice = Close + Otstup;
Buy = ExRem (A,S);
ShortPrice = Close - Otstup;
Short = ExRem (S,A);
ChasX22 = TimeNum()>=221400 AND TimeNum()<223100>=190500 AND TimeNum()<=191500;
TimeFrameSet(in5Minute);
SellPrice = Close-Otstup;
CoverPrice = Close+Otstup;
|
Sell = A AND ChasX23 AND Close <Ref> = Ref(Low,-1);
Последняя красная строчка - некорректная. Ниже вставил нормальные.
В этой части кода всё, что касается A, S, Buy и Short исполняется корректно.
Не выполняется Sell и Cover в вечернее время. Хотя при просмотре Quote Editor все условия выполняются.
Почему так может быть?
База 1-минутная. Si клееный с Финама. |
_________________ УСПЕХ — это движение от неудачи к неудаче БЕЗ ПОТЕРИ ЭНТУЗИАЗМА.
- Уинстон Черчилль
Последний раз редактировалось: Tim (Ср Мар 10, 2010 2:14 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Cover в коде нету.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Tim
Зарегистрирован: 12.02.2010
Сообщения: 245
Откуда: Дмитров
|
Что-то код не вставляется корректно.
Вот концовка правильная:
Код: |
TimeFrameSet(in5Minute);
SellPrice = Close-Otstup;
CoverPrice = Close+Otstup;
Sell = A AND ChasX22 AND Low < Ref(High,-1);
|
|
_________________ УСПЕХ — это движение от неудачи к неудаче БЕЗ ПОТЕРИ ЭНТУЗИАЗМА.
- Уинстон Черчилль
Последний раз редактировалось: Tim (Ср Мар 10, 2010 2:15 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Tim
Зарегистрирован: 12.02.2010
Сообщения: 245
Откуда: Дмитров
|
Олег, блин, приходится по строчке вставлять.. что за фигня? )
Код: |
Cover = S AND ChasX22 AND High > Ref(Low,-1); |
Всё у меня есть, просто сюда коряво вставляется почему-то. |
_________________ УСПЕХ — это движение от неудачи к неудаче БЕЗ ПОТЕРИ ЭНТУЗИАЗМА.
- Уинстон Черчилль |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|