Кому стратегию? Много и бесплатно) - страница 63

 

Yes the mail is correct.

I sent you a Private Message a minute ago.

 

О, я про личку совсем забыл :))))))

Там уже накопилось, смотрю :). Ребята - извините, кому не ответил вовремя, я просто обычно Личные сообщения на форумах отключаю, и тут по привычке даже внимания не обращал :)...


Мирослав - тогда сейчас сообщение(ответ) подготовлю и по почте отправлю...

 

**Напомню, что проблемой Bar Opening и Bar Closing - Point of the Position не ограничиваются, там вполне могут быть использованы значения обычных индикаторов. И соотв. позиция может быть открыта "посреди" бара (легко!). (так скажем, к вопросу о расчете значений индикаторов ТОЛЬКО на пересечении баров... как уже говорил - это условие выполнимо "не всегда" ;))**


If understand correctly, you think that we have to recalculate an Indicator on every tick if the Entry point is in the middle of the bar (Let say at a MA). I'll afford to not agree with you.


For a reliable back test (using MT, FSB or other tester), all the indicators including Entry / Exit points have to be fixed. That doesn't limits an EA to use market entry during the bar.

Examples:


1. Entry at Moving Average (21, close):

In this case we cannot use the current MA since it is moving up / down until bar closing price is fixed. So we have to use MA from the previous bar. Doing this it's not necessary to recalculate it on every tick.


2. Entry at Moving Average (21, open):

Here we can use the current MA. It is fixed because the MA base price - Bar Opening is already fixed. We also don't need to recalculate it on every tick.


--------

Edit:

Of course this is mine personal opinion.

I don't intend to force you backtesting in that way.

Regards!


Edit2:

In case I'm missing something, please show me an example of a strategy prepared with FSB when you have to recalculate an indicator on every tick.

 

Ммм, Мирослав, я понял идею (еще давно, причем)!

Меня просто смутили конструкции в коде индикаторов, которые я приводил выше:

                    case "The position opens above the MA value":
                        component[0].PosPriceDependence = PositionPriceDependence.BuyHigherSellLower;
                        component[0].UsePreviousBar     = iPrvs;
                        component[1].DataType           = IndComponentType.Other;
                        component[1].ShowInDynInfo      = false;
                        component[2].DataType           = IndComponentType.Other;
                        component[2].ShowInDynInfo      = false;
                        break;

а именно: component[0].PosPriceDependence = PositionPriceDependence.BuyHigherSellLower;

Вот это просто как раз не тот самый случай? Важно понять, что я сейчас не про РАСЧЕТ индикатора, как такового. Значение которого - да, стационарно в пределах бара. А про то, что мы вынуждены вот в этом случае (который я привел выше) сравнивать с ним последнее значение цены? Чтобы принять решение об открытии позиции. В FSB это делается внутренними процедурами (если я все правильно понял). Но т.к. они "нам не известны" (да и, собственно, зачем вообще) - я и предложил в таких вот случаях пересчитывать индикатор на каждом тике, чтобы получить однозначное ДА/НЕТ на тему логического условия. Т.е. пусть такой вывод делает сам индикатор, а не внешний для него код. Я имел ввиду это!

Т.е., ммм, еще раз - я согласен с тезисом, что индикатор должен расчитываться один раз на "пересечении" баров. Но в случаях, когда индикатор подает сигналы о подтверждении открытия позиции, в приложении к работе будущего советника(ов) в МТ - мы должны опираться только на эти значения (ДА/НЕТ), а не на сравнивание текущих цен с ценами индикатора (которые статичны). Пусть это для нас сравнивает сам индикатор. А мы только учтем его ДА/НЕТ. Все... :)


Или уже я где-то чего-то missing something? :D? ("захлопоталась... мамуля...")

 

Отсюда проистекает следствие, что мне нужно все-таки еще раз ревизию таких вот вычислений сделать (сейчас подумал), чтобы как раз корректно сравнить Close[iBar] с текущим или предыдущим значением индикатора (которое из них статично) (iPrvs учитывать). Но в идее я, думаю, не ошибся...?!



(мы вообще что обсуждаем :)))?! Индикаторы все-равно будут учитывать работу с IndicatorCounted() ПО ЛЮБОМУ!!! Я по другому делать не буду просто :). Ими же могут воспользоваться не только писатели EA, но и просто пользователи, которым визуальная часть нужна будет (и значения в реальном времени). А оригинальный код от этого ни сколько НЕ ВИДОИЗМЕНЯЕТСЯ! Обычно добавляется просто кусочек в самом начале, который инициализирует "первоначальные" значения переменных, завязанных на самих себя. Не более... Иногда это дается "малой кровью". Иногда - не очень (как в примере с Hourly High Low). Но в любом случае - телодвижения минимальны (пока?) :))


Или все-таки глобальный аспект? Тогда и обсуждать нечего - iPrvs - это КРУТО! :) Точка! Но с этим же никто и не спорит :)!


(я выслал на почту письмо... сейчас здесь постараюсь в личке ответить)

 
                    case "The position opens above the MA value":
                        component[0].PosPriceDependence = PositionPriceDependence.BuyHigherSellLower;


This logic cannot be managed from the indicator itself since the signals depend on the Entry Point indicator.

This logic doesn't give buy / sell (1 , 0) signals like the others.

FSB proceeds as follows:

1. It initially ignores this indicator when taking decision for trading;
2. If all the other logic rules are satisfied and FSB knows the entry point, it checks this indicator to allow or forbid the entry just before the actual execution.

This is included in the backtester.

There are three options for application in an EA:

1. To calculate the entry points first (in an array). After that to sent this array to the indicator to calculate the Buy/ Sell signals.

2. To have a base method EntryPrice(int iBar) that returns the position's opening price.
case "The position opens above the MA value":
for(int iBar ... )
{
SignalLong[iBar] = EntryPrice(iBar) > MA[iBar] ? 1 : 0;
SignalShort[iBar] = EntryPrice(iBar) < MA[iBar] ? 1 : 0;
}

3. Calling this indicator before the actual entry:
double EntryPrice = ....;
If(EntryPrice > fsb_MA(...))
OrderSend(...);


----

There are several indicators that don't set 1:0 signals:
- All indicators with the logic "Position opens above / below .."
- "Time" indicators: Entry Time, Entry Hour, Day of Week;
- Account Percent Stop
- ATR Stop
- Stop Limit
- Stop Loss
- Take Profit
- Trailing Stop
- Trailing Stop Limit
- Lot Limiter

These "Indicators" give Entry / Exit permission at the moment of trading;



 






 

Мирослав - "дошло"! Не в том смысле, что наконец-то что-то понял :) (идею манипулирования FSB логикой индикаторов,

где используется "Position opens above / below .." я понял давно (всякие Stop Limit и прочее я пока в расчет не беру, я их не смотрел)).

Я наконец-то что-то ВСПОМНИЛ, скажем так :)


МЫ просто говорим в одном контексте о разных приложениях (имея ввиду и сами приложения (FSB и MT) и "в приложении к").

Ключевой момент - расчет индикаторов FSB единоразово, перед самой процедурой back-testing'а.

FSB просто не может вычислить однозначно 1/0 для таких условий ("Position opens above / below ..") перед самим тестированием!

Поэтому в нем используется совершенно правильная логика:

1. It initially ignores this indicator when taking decision for trading;
2. If all the other logic rules are satisfied and FSB knows the entry point, it checks this indicator to allow or forbid the entry just before the actual execution.
Но для нашего (RealTime) случая - ЭТО НЕ ОБЯЗАТЕЛЬНО. Верней - расчитывая индикаторы "постоянно и на лету" - мы в любой конкретный
момент будем иметь однозначный ответ 1/0 для данного логического условия.
Мы все-равно "не сможем" открыть позицию не по последней доступной цене (Close[0]). Так почему бы с ней значение индикатора и не сравнить?
И не вывести логическое 1/0 как и для других случаев (извиняюсь, форматирование "съехало", в HTML лезть не хочется (там уже "черт ногу сломит"):
         case MA_POS_OPENS_ABOVE:
            for (iBar = iFirstBar; iBar >= 0; iBar--) {
               LPIndBuffer[iBar] = Close[iBar] > adMA[iBar];
               SPIndBuffer[iBar] = Close[iBar] < adMA[iBar];
            }
            break;

// Что, видимо, более корректно нужно будет переписать с учетом iPrvs (меня просто только сегодня "осенило", как эту проблему вообще можно обойти)

         case MA_POS_OPENS_ABOVE:
            for (iBar = iFirstBar; iBar >= 0; iBar--) {
               LPIndBuffer[iBar] = Close[iBar] > adMA[iBar + iPrvs];
               SPIndBuffer[iBar] = Close[iBar] < adMA[iBar + iPrvs];
            }
            break;

// А учитывая, что на всех барах, кроме [0] (real-time) значения будут "не совсем верные" (верней - зафиксированные для Close[iBar]), можно изменить код примерно так:

         case MA_POS_OPENS_ABOVE:
            for (iBar = iFirstBar + 1; iBar >= 0; iBar--) {
               if (iBar > 0) {
                  LPIndBuffer[iBar] = 0.0;
                  SPIndBuffer[iBar] = 0.0;
               } else {
                  LPIndBuffer[iBar] = Close[iBar] > adMA[iBar + iPrvs];
                  SPIndBuffer[iBar] = Close[iBar] < adMA[iBar + iPrvs];
               }
            }
            break;

// Т.е. для всех баров, кроме [0] индикатор будет показывать, что данное условие не выполнимо (не выполнялось) - вопрос эстетики, так скажем... не более того.

 

(off: пытаюсь по новой код вставить, отдельным комментарием - "не выходит каменный цветок" :), то пустой комментарий, то просто на первую страницу выкидывает... может какие-то элементы в тексте встречаются - "не перевариваемые"... в общем - так читайте (как получилось выше) :))

 

Господа, Мирослав вчера обновил FSB до версии 2.8.3.6 Beta:

http://forexsb.com/forum/post/2446/#p2446


Была унифицирована логика сигналов. Изменения коснулись подавляющего большинства индикаторов. Код расчета самих индикаторов не менялся!

Логические сигналы стали чуть менее восприимчивы к "шуму". В config файле добавились два параметра:

  <SIGMA_MODE_MAIN_CHART>1</SIGMA_MODE_MAIN_CHART>
  <SIGMA_MODE_SEPARATED_CHART>5</SIGMA_MODE_SEPARATED_CHART>

Параметры задают "порог" срабатывания сигналов от уровня изменения цены (для индикаторов на окне с графиком и для индикаторов со своими собственными окнами).

Соответствие значений MODE приведено здесь:

http://forexsb.com/library/source/Sigma.html


Мы считаем, что значения "по умолчанию" ВПОЛНЕ адекватны (в большинстве случаев). Но... можете поэкспериментировать :).


Я специально ждал этого релиза, чтобы не делать двойную работу. Свои наработки соотв. тоже выкладываю. На данный момент 20 индикаторов (2 я бы не рассматривал за "полезные" (Bar Closing / Bar Opening) - они в будущем пригодятся ;)):

-FSB- Accelerator Oscillator.ex4
-FSB- Accumulation Distribution.ex4
-FSB- ADX.ex4
-FSB- Bar Closing.ex4
-FSB- Bar Opening.ex4
-FSB- Bar Range.ex4
-FSB- Bollinger Bands.ex4
-FSB- Donchian Channel.ex4
-FSB- Envelopes.ex4
-FSB- Force Index.ex4
-FSB- Heiken Ashi.ex4
-FSB- Hourly High Low.ex4
-FSB- Ichimoku Kinko Hyo.ex4
-FSB- Keltner Channel.ex4
-FSB- Moving Average.ex4
-FSB- Price Oscillator.ex4
-FSB- RSI MA Oscillator.ex4
-FSB- RSI.ex4
-FSB- Starc Bands.ex4
-FSB- Steady Bands.ex4

Алгоритмы расчета и логика сигналов полностью соответствует FSB (ну... должны :D)...

В ТОМ ЧИСЛЕ ЗНАЧЕНИЯ ИНДИКАТОРОВ!!! (FSB (application) = -FSB- (convertation) = MT (internal) ) (до любого знака)

Исключением является "-FSB- Accumulation Distribution.ex4" - у Мирослава там заковыристый код, пока не стал разбираться (не совпадает с MT точно, с FSB не проверял).


Я продолжаю в алфавитном порядке (ну почти). Если кому-то что-то нужно более приоритетно - пишите... (человек с Hourly High Low куда-то пропал, я так и не понял - помогло или нет :D?!)


Параллельно начинаем разработку EA, который сможет оперировать данными версиями индикаторов. В конечном итоге должно получиться нечто вроде связки:

FSB -> Exported strategy file -> EA, based on converted indicators and internal trading logic, compatible with FSB...


Удачи! И с наступающим праздником всех!!!

Я появлюсь ближе к началу рабочей недели... не теряйте...

Файлы:
 
Stellarator >>:

Господа, Мирослав вчера обновил FSB до версии 2.8.3.6 Beta:

http://forexsb.com/forum/post/2446/#p2446


Чего-то качаю, а архив битый... :