Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Олег, подскажите, пожалуйста, что у меня неправильно в коде Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
dmitry1208197320



Зарегистрирован: 23.10.2009
Сообщения: 86

СообщениеДобавлено: Вс Ноя 01, 2009 1:16 pm Ответить с цитатой Вернуться к началу

Олег, у меня есть задача (это моя первая задача, которую я пытаюсь выполнить на AmiBroker, но никак не получается):

Мы хотим узнать выгодно ли каждый день (при условии, что у нас нет открытых позиций) продавать 1 позицию в 100.000 EURUSD, закрывая ее на первой прибыли и ограничив свои убытки -1.800 usd на позицию.
P.S. Понятно, что если курс EURUSD будет идти вниз, то мы будем получать прибыль, если вверх – то убыток.

Алгоритм.
Если у нас нет открытых позиций, то мы продаем одну позицию (100.000 долларов) на закрытии дня.
После открытия позиции возможно 3 варианта развития событий:
1. Курс пошел вверх и дошел до StopLoss (1800) - позиция автоматически закрывается.
2. Курс пошел вниз, позиция приносит прибыль – позиция закрывается с забором любой прибыли.
3. Курс пошел вниз, но не дошел до StopLoss, позиция приносит убыток и переносится на следующий день.


Скажите, пожалуйста, что я делаю не так в следующем коде.
------------------------------------------------------------------------------------------------------------------------------------------------
//1. Отображаем график котировок для последующего контроля выполняемых операций
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
if( ParamToggle("Tooltip shows", "All Values|Only Prices" ) )
{
ToolTip=StrFormat("Open: %g\nHigh: %g\nLow: %g\nClose: %g (%.1f%%)\nVolume: "+NumToStr( V, 1 ), O, H, L, C, SelectedValue( ROC( C, 1 )));
}
_SECTION_END();
//отображаем график котировок для последующего контроля выполняемых операций

//2. Выполняем описанные в условии задачи операции
BarDay = Day(); //заполняем массив днями
Short = False;
for (i = 1; i < BarCount; i++)//проходимся по всем барам
{
if (BarDay[i-1] != BarDay[i]) //если есть переход на следующий день
{
//то продаём позицию по закрытию дня
Short = True;
//устанавливаем размер открытой позиции
SetPositionSize(100.000, spsValue);
break; //выходим из цикла
}
}

//закрываем позицию при убытках равных 1.9
ApplyStop(stopTypeLoss, stopModePoint, 1.9, 1, False, 1);

//закрываем позицию при достижении любой прибыли
ApplyStop(stopTypeProfit, stopModePoint, 1, False, 1);

//для контроля выполненных операций отмечаем на графике протяжённость открытой позиции
PlotShapes(IIf(Short, shapePositionAbove, shapeNone), colorGreen);
------------------------------------------------------------------------------------------------------------------------------------------------

В результате:
у меня при выполнении PlotShapes на графике не видно закрытия короткой позиции. Я так понимаю, что не срабатывают стопы по убыткам и (или) по прибыли, хотя судя по графику котировок должны срабатывать. Почему? Можете подсказать что неправильно?
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вс Ноя 01, 2009 9:36 pm Ответить с цитатой Вернуться к началу

Очень много ошибок.
1. Непонятно для какого фрейма нужен код. Одно дело для дневного и совсем другое для меньшего.
2. Тут ошибка
Код:
Short = True;

Надо
Код:
Short[i] = True;

3. Тут
Код:
ApplyStop(stopTypeProfit, stopModePoint, 1, False, 1);

Если это дневки, то в общем работать будет. Только надо иметь ввиду, что поинт надо писать в абсолютном выражении. Т.е. если пункт равен 0,01, то и писать надо 0,01, а не 1.
Если фрейм меньше дневного, то работать правильно не будет.

Цитата:

у меня при выполнении PlotShapes на графике не видно закрытия короткой позиции. Я так понимаю, что не срабатывают стопы по убыткам и (или) по прибыли, хотя судя по графику котировок должны срабатывать. Почему? Можете подсказать что неправильно?

Для того, чтобы было видно закрытие позиции надо во первых "активизировать" стопы. Это делается функцией Equity()
Во вторых надо вывести стрелки закрытия короткой позиции. При срабатывании стопов будет записан сигнал Cover для закрытия шорта. Этот сигнал будет не равен 1 (см коментарии к функции Equity )
Соответственно этот сигнал тоже надо выводить на график при помощи PlotShapes.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
dmitry1208197320



Зарегистрирован: 23.10.2009
Сообщения: 86

СообщениеДобавлено: Пн Ноя 02, 2009 12:38 pm Ответить с цитатой Вернуться к началу

Олег, спасибо Вам за присланные подсказки и комментарии.
Но я не могу понять, почему у меня не срабатывают никакие стопы после открытия короткой позиции, я уже написал стоп через 5 баров, всё-равно не срабатывает:

BarDay = Day(); //заполняем массив днями
Short = False;
for (i = 1; i < BarCount; i++)//проходимся по всем барам
{
if (BarDay[i-1] != BarDay[i]) //если есть переход на следующий день
{
//то продаём позицию по закрытию дня
Short[i] = True;
//устанавливаем размер открытой позиции
SetPositionSize(100.000, spsValue);
break; //выходим из цикла
}
}

ApplyStop(stopTypeNBar, stopModeBars, 5);
Equity(1);
PlotShapes(IIf(Cover, shapeDownArrow, shapeNone), colorRed);


Почему так?

И можете ещё подсказать, как узнать, чему у меня равен пункт?
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 02, 2009 12:58 pm Ответить с цитатой Вернуться к началу

dmitry1208197320 писал(а):
Олег, спасибо Вам за присланные подсказки и комментарии.
Но я не могу понять, почему у меня не срабатывают никакие стопы после открытия короткой позиции, я уже написал стоп через 5 баров, всё-равно не срабатывает:

BarDay = Day(); //заполняем массив днями
Short = False;
for (i = 1; i < BarCount; i++)//проходимся по всем барам
{
if (BarDay[i-1] != BarDay[i]) //если есть переход на следующий день
{
//то продаём позицию по закрытию дня
Short[i] = True;
//устанавливаем размер открытой позиции
SetPositionSize(100.000, spsValue);
break; //выходим из цикла
}
}

ApplyStop(stopTypeNBar, stopModeBars, 5);
Equity(1);
PlotShapes(IIf(Cover, shapeDownArrow, shapeNone), colorRed);


Почему так?

И можете ещё подсказать, как узнать, чему у меня равен пункт?

Давай постепенно разбирать ошибки.
Цитата:

//то продаём позицию по закрытию дня
Short[i] = True;

Это неправильный коментарий. Продаем на этом баре вот в данном случае правильный коментарий. А поскольку мы находимся в этот момент на 1- ом баре внутри дня (у предыдущего бара другой день)(если тестируется внутридневной фрейм) То продаем на первом баре дня.
break там вообще не нужен.
А гораздо проще записать это совсем без цикла
Код:

Short = Day() != Ref(Day(), -1);
cover = 0;
SetPositionSize(100.000, spsValue);
ApplyStop(stopTypeNBar, stopModeBars, 5);
Equity(1);
Plot(C, "", colorBlack, styleCandle);
PlotShapes(IIf(Short, shapeUpArrow, shapeNone), colorGreen);
PlotShapes(IIf(Cover, shapeDownArrow, shapeNone), colorRed);

Вот такой код будет входить всегда на первом баре дня и выходить на 5 - ом. Тольько не забудь в настройках тестера включить шорты.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
dmitry1208197320



Зарегистрирован: 23.10.2009
Сообщения: 86

СообщениеДобавлено: Пн Ноя 02, 2009 2:49 pm Ответить с цитатой Вернуться к началу

Ура, у меня получилось - в настройках тестера включил шорт. Спасибо.
И можете ещё подсказать, как узнать, чему у меня равен пункт?
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 02, 2009 4:47 pm Ответить с цитатой Вернуться к началу

Для ApplyStop() ???
Пункт там всегда равен 1.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
dmitry1208197320



Зарегистрирован: 23.10.2009
Сообщения: 86

СообщениеДобавлено: Пн Ноя 02, 2009 5:02 pm Ответить с цитатой Вернуться к началу

Просто Вы выше писали:

"3. Тут
Код:
ApplyStop(stopTypeProfit, stopModePoint, 1, False, 1);

Если это дневки, то в общем работать будет. Только надо иметь ввиду, что поинт надо писать в абсолютном выражении. Т.е. если пункт равен 0,01, то и писать надо 0,01, а не 1."

поэтому я и сомневаюсь насчёт этих пунктов
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 02, 2009 5:09 pm Ответить с цитатой Вернуться к началу

Ну. Я имел ввиду, что аункт. Это минимальное изменение цены бумаги. И если минимальное изменение цены равно 0,01, для установки минимального размера стопа функцией ApplyStop() надо писать там 0,01. А то довольно частой ошибкой является что пишут 1 в то время как пункт равен 0,01...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
dmitry1208197320



Зарегистрирован: 23.10.2009
Сообщения: 86

СообщениеДобавлено: Пн Ноя 02, 2009 5:34 pm Ответить с цитатой Вернуться к началу

Олег, всё-таки, разрешите ещё раз уточнить. Если я хочу закрыть позицию на минимальной прибыли, мне надо писать в стопе 1-цу?:

ApplyStop(stopTypeProfit, stopModePoint, 1, False, 1);

или, если эта величина не равна 1-це, то как мне определить, или откуда можно взять (вычислить) это значение?
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 02, 2009 5:39 pm Ответить с цитатой Вернуться к началу

Там надо написать минимальное изменение цены бумаги которая тестируется.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen