Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Элементарные правила тестовой системы.
Код: |
Buy = Cross(MA(C, 10), MA(C, 20));
Sell = 0;
Short = Cross(MA(C, 20), MA(C, 10));
Cover = 0;
|
Выходы только по трейлингу:
при лонге - трейлинг по хаям 3*ATR(10)
при шорте - трейлинг по лоу 2*ATR(10)
и еще.
Часто хотят ставить стоп в безубыток. Если не трудно и такой пример. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
как то так.
Если будут ошибки - напишите, я не разглядывал внимательно результат.
Теперь про правила работы.
Порядок всегда такой.
1. Внутри свечи проверяем срабатывание ордеров.
2. Двигаем стопы
3. Открываемся всегда по закрытию свечи или по открытию следующей.
Библиотека ордеров - никакого отношения к торговле не имеет. Она не знает ничего про спреды и предназначена только для запоминания места ордера и рисования прерывистой линии. То есть линия рисуется только тогда когда ордер "стоит". Если вы определили, что ордер сработал, нужно цену открытия-закрытия передать в функцию закрытия-открытия позиции. Здесь и нужно самому следить за спредом.
Библиотека ордеров поддерживает только по одному ордеру каждого вида. Всего 4 штуки.
AmiVar CoverStop;
AmiVar CoverLimit;
AmiVar SellStop;
AmiVar SellLimit;
Торговая библиотека написана таким образом, чтобы работал стандартный Scan Ami. Так что проверять можно и соответствие графиков и скана.
З.Ы. По самой задаче.
Не получился трейлинг с первого раза
Трейлинг ведь только в сторону улучшения двигаться должен.
В следующем посте исправимся |
Последний раз редактировалось: BabyBear (Ср Дек 17, 2008 10:46 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Трейлинг стоп двигается только в сторону цены.
З.Ы. Очень похоже, что входим мы не в ту сторону при пересечении МА. Так чта Кому надо наоборот - устанавливайте в параметрах
Short MA Period > Long MA Period
|
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
000 писал(а): |
Часто хотят ставить стоп в безубыток. Если не трудно и такой пример. |
Есть такие функции в библиотеке
Код: |
BBL_GetCurrentBuyLotPrice();
BBL_GetCurrentShortLotPrice();
|
Они возвращают среднюю цену длинных/коротких позиций. Если нет добавлений, функции возвратят цены покупки/продажи.
Так что двигание стопа (для короткой позиции) в безубыток может быть, например, таким
Код: |
if( High[i] < BBL_GetCurrentShortLotPrice())
{
// без учета спреда
BBL_OrdersCoverStopSet( BBL_GetCurrentShortLotPrice());
} |
З.Ы. Имена функций длинные, так что пользуемся "Ctrl+Space" |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Теперь про оптимизацию.
Оптимизировать большое количество параметров можно руками. получается быстро и удобно.
1. переключаемся в режим построения эквити
2. делам видимым весь график
3. открываем окно с параметрами и шевелим их.
Устойчивость так же легко оценить. пошевелив по очереди параметры
Приведенные на рисунке параметры плохие, так как нет устойчивости по параметру Short MA Period, в этом можно убедиться, заменив 12 на 14, например. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
а вот нормальные параметры,
12 и 12 , конечно не оптимальные, но можно с умным видом говорить, что они меют глубокий смысл. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не видел список всех новых функций с кратким описанием |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
000 писал(а): |
Не видел список всех новых функций с кратким описанием |
А его и нет
Буду тут писать его
BabyBearLib
BBL_InitForex
Код: |
spread = Param( "Spread", 5, -15, 15);
BBL_InitForex(20000, spread, 100000, 100000); |
параметры: начальный баланс, спред, 3 и 4 параметры передаются в SetBarsRequired()
Функция вызывает настроечные функции Ами: PointValue, RoundLotSize, MarginDeposit, InitialEquity, CommissionMode, CommissionAmount, PriceBoundChecking.
BBL_Init
Внутри неё всякая ерунда и что то типа
Код: |
Buy=0; Short=0; Cover=0; Sell=0;
BuyPrice = Close + spread*TickSize;
CoverPrice = Close + spread*TickSize;
SellPrice = Close;
ShortPrice = Close;
|
BBL_Release
Ничего интересного. Обязательно вызываем в конце программы.
Копирует данные из библиотеки в Ами
BBL_NextCandle
Вызываем в начале цикла по барам. Говорит библиотеке, что нужно перейти к следующей свече.
BBL_EndCandle
Вызываем в конце цикла по барам. Вычисляет новые значения открытых позиций, эквити и баланса
BBL_EntryStatistic
Вывод информации наружу. Подробности не помню. потом напишу
http://bearden.narod.ru/BBL_SignalGraph.html
BBL_ShortLot
Продаем на текущем баре указанный лот по указанной цене
Параметры лот и цена. По умолчанию цена = Close
Правильнее было мне написать ShortPrice.
использование
Код: |
BBL_ShortLot( 10000]);
BBL_ShortLot( 10000], OrderPrice[i]); |
BBL_ShortScaleInLot
Добавляемся (продаем) на текущем баре указанный лот по указанной цене
Параметры лот и цена. По умолчанию цена = Close
Правильнее было мне написать ShortPrice.
использование
Код: |
BBL_ShortScaleInLot( 10000);
BBL_ShortScaleInLot( 10000, OrderPrice[i]); |
BBL_ShortScaleOutLot
Это покупка!!!
Уменьшаем продажи (покупаем) на текущем баре указанный лот по указанной цене
Параметры лот и цена. По умолчанию цена = Close + spread
Правильнее было мне написать BuyPrice или CoverPrice.
использование
Код: |
BBL_ShortScaleOutLot( 10000);
BBL_ShortScaleOutLot( 10000, OrderPrice[i] + spread*TickSize); |
BBL_ShortOrScaleInLot
Продаем. Добавляемся или открываем short
Параметры лот и цена. По умолчанию цена = Close
Правильнее было мне написать ShortPrice.
BBL_ShortScaleInProcent
Увеличение лота short - Продаем
Параметры лот и цена. По умолчанию цена = Close
Например, ShortScaleInProcent(100) - удваиваем лот short
BBL_ShortScaleOutProcent
частичное закрытие short - Покупаем
например, ShortScaleOutProcent(50) - закрываем половину открытого вниз
BBL_CoverAll
Закрываем Short.
Параметр - цена. по умолчанию Сlose + spread * TickSize
Устанавливает Cover[i] = 1;
BBL_CoverStop
Закрываем Short.
Параметр - цена. по умолчанию Сlose + spread * TickSize
Устанавливает Cover[i] = 2;
BBL_CoverLimit
Закрываем Short.
Параметр - цена. по умолчанию Сlose + spread * TickSize
Устанавливает Cover[i] = 3;
Следующие функции аналогичны предыдущим.
BBL_BuyLot
BBL_BuyOrScaleInLot
BBL_BuyScaleOutLot
BBL_BuyScaleOutProcent
BBL_BuyScaleInLot
BBL_BuyScaleInProcent
BBL_SellAll
BBL_SellStop
BBL_SellLimit
// Функции возвращают массивы для рисования после всех расчетов
BBL_GetBalanceArray
BBL_GetEquityArray
BBL_GetBuyLotArray
BBL_GetSellLotArray
// А эти возвращают одно число - используем внутри цикла
BBL_GetCurrentShortLot
BBL_GetCurrentBuyLot
BBL_GetCurrentBuyLotPrice
BBL_GetCurrentShortLotPrice
BBL_GetCurrentShortEquity
BBL_GetCurrentBuyEquity
BBL_GetLastBuyAsk - Аск последней покупки
BBL_GetLastSellBid - бид последней продажи
BBL_GetLastShortBid
BBL_GetLastBid - бид последней сделки (любой)
BBL_GetCurrentBid - это просто close[CurrentCandle]
BBL_GetCurrentAsk - это close[CurrentCandle] + fSpreadSize
Библиотека BBL_Orders
Библиотека ордеров - никакого отношения к торговле не имеет. Она не знает ничего про спреды и предназначена только для запоминания места ордера и рисования прерывистой линии. То есть линия рисуется только тогда когда ордер "стоит". Если вы определили, что ордер сработал, нужно цену открытия-закрытия передать в функцию закрытия-открытия позиции. Здесь и нужно самому следить за спредом.
Библиотека ордеров поддерживает только по одному ордеру каждого вида. Всего 4 штуки.
AmiVar CoverStop;
AmiVar CoverLimit;
AmiVar SellStop;
AmiVar SellLimit;
BBL_OrdersInit
BBL_OrdersEndCandle
BBL_OrdersGetCoverStopArray
BBL_OrdersGetCoverStopValue
BBL_OrdersCoverStopSet
BBL_OrdersCoverStopCancel
BBL_OrdersCoverStopCheck
BBL_OrdersGetCoverLimitArray
BBL_OrdersGetCoverLimitValue
BBL_OrdersCoverLimitSet
BBL_OrdersCoverLimitCancel
BBL_OrdersCoverLimitCheck
BBL_OrdersGetSellStopArray
BBL_OrdersGetSellStopValue
BBL_OrdersSellStopSet
BBL_OrdersSellStopCancel
BBL_OrdersSellStopCheck
BBL_OrdersGetSellLimitArray
BBL_OrdersGetSellLimitValue
BBL_OrdersSellLimitSet
BBL_OrdersSellLimitCancel
BBL_OrdersSellLimitCheck
ЧТо поподробнее описать? |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
Ты можешь описать этим языком аналог applystop (.... TRUE) т.е. с изменениями в течении времени? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Сергей писал(а): |
Ты можешь описать этим языком аналог applystop (.... TRUE) т.е. с изменениями в течении времени? |
Думаю, что могу. Но...
Я не разбирался с ApplyStop. Давай конкретную задачу. Можно со стандартным решением. За одно результаты можно будет сравнить. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сергей писал(а): |
Ты можешь описать этим языком аналог applystop (.... TRUE) т.е. с изменениями в течении времени? |
Первый задание для примера которое я давал как раз содержало трейлинг с переменным размером зависящим от ATR()
Цитата: |
Выходы только по трейлингу:
при лонге - трейлинг по хаям 3*ATR(10)
при шорте - трейлинг по лоу 2*ATR(10)
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
привет BabyBear,
Вопрос по твоей BBL:
Твой BBL умеет вести несколько позиций по одному тикеру? То есть ами всегда ведет одну позу, рассчитывая среднюю цену, хотя многие терминалы позволяют иметь пять лонговых поз по EUR.
И еще:
Если не секрет: тебя как звать? Меня Денис. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Приветик.
В BBL ведется только одна позиция. То есть внутри есть хранится только один размер открытой позиции. Он умножается на цены и получается прибыль. Однако , есть возможность увеличивать и сокращать этот размер позиции.
Ордера - отдельная длл. Ордеров может быть только 4
buy stop
sell stop
buy limit
sell limit
идея такая - когда график пересекает/касается линию стопа, вызываем функцию из первой библиотеки. Эту идею можно реализовать руками с любым количеством ордеров. Просто , мне не было нужды.
В интернете меня все зовут BabyBear. Это имя мне очень нравится. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
|