Автор |
Сообщение |
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
Тут два вопроса, сделал простейший код:
Код: |
ApplyStop(stopTypeProfit, stopModePoint, amount, 1);
ApplyStop(stopTypeLoss, stopModePoint, koef*amount, 1); |
соотвественно оптимизируются амаунт и коефициент.
1. Чо-то не сработало билеберда какая-то. ни один выход не был по условиям ApplyStop, хотя тестер и писал что выходы по Стоплоссу и профиту.
2. Какой писать Sell (Cover) если в принципе нужны выходы только по ApplyStop? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
2. Какой писать Sell (Cover) если в принципе нужны выходы только по ApplyStop?
|
Sell = 0;
Цитата: |
1. Чо-то не сработало билеберда какая-то. ни один выход не был по условиям ApplyStop, хотя тестер и писал что выходы по Стоплоссу и профиту.
|
А подробнее? И как тогда система выходила если выходы только по стопам? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
000 писал(а): |
А подробнее? И как тогда система выходила если выходы только по стопам? |
Нет, выходила-то по стопам, просто цели были не стоповские, не были равны установленным значениям amount'a и koef*amount.
Вот щас это протестил:
Код: |
amount = Optimize("punkti", 250, 20, 1000, 10);
koef = Optimize("koef", 0.2, 0.1, 0.9, 0.1);
BuyPrice = Open;
Buy = Open;
Sell = 0;
SetPositionSize(1, 4);
ApplyStop(stopTypeProfit, stopModePoint, amount, 1);
ApplyStop(stopTypeLoss, stopModePoint, koef*amount, 1); |
|
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
kosbar писал(а): |
Вот щас это протестил: |
щас внимательнее глянул, похоже это всё гэпы о.О хыхы |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
Другая проблема Олег: Applystop по прибыли перебивает команду Sell, сталкивался?
Вот такой, например, простенький код:
Код: |
LvlBuy = Optimize("Enter", 100, 100, 2000, 50);
Profit = Optimize("Profit", 600, 100, 6000, 100);
BuyPrice = Open + LvlBuy;
SellPrice = Open - LvlBuy;
Buy = (Open + LvlBuy) < High;
Sell = (Open - LvlBuy) > Low;
ApplyStop(stopTypeProfit, stopModePoint, Profit, 1); |
Там где система должна была бы выйти по условию Sell она ждёт, когда произойдёт приибыль и выходит по Профитстопу. Доходность соответствующая)))))
Я так понимаю только циклом решается? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тут фигня в том, что на одном и том, же баре и вход и выход.
Ами так не любит. Думаю дело именно в этом. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
000 писал(а): |
Тут фигня в том, что на одном и том, же баре и вход и выход.
Ами так не любит. Думаю дело именно в этом. |
Да нет, галочка эта убрана, да и не входит/выходит он в один бар, сделки, конечно, идут часто, но входа/выхода в одном баре там нет ни разу. Чаще всего вход и выход на следующем баре.
Проблема в том, что на баре, где срабатывает Sell и ApplySTop, ами выбирает именно ApplyStop ((( |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
всё понял, ты про то что на одном баре аж три сигнала выходит...?
ну а как лечить? циклом с проверкой наличия позы? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В случае если на одном баре несколько сигналов (однонаправленых), то у Ами есть приоритеты выполнения. Т.е. некоторые сигналы имеют приоритет выше и соответственно выполняются в первую очередь. Сейчас не помню какие "важнее", а искать лень.
Способ обхода на самом деле только один. Уменьшать фрейм так, чтобы ситуация когда на одном баре несколько однонаправленных сигналов случалась реже.
На самом деле, поскольку мы не можем угадать как двигалась цена внутри бара, корректно исполнить на одном баре несколько сигналов нельзя... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
000 писал(а): |
В случае если на одном баре несколько сигналов (однонаправленых), то у Ами есть приоритеты выполнения. Т.е. некоторые сигналы имеют приоритет выше и соответственно выполняются в первую очередь. Сейчас не помню какие "важнее", а искать лень.
Способ обхода на самом деле только один. Уменьшать фрейм так, чтобы ситуация когда на одном баре несколько однонаправленных сигналов случалась реже.
На самом деле, поскольку мы не можем угадать как двигалась цена внутри бара, корректно исполнить на одном баре несколько сигналов нельзя... |
Ясно, усё понятно. Хотел было покрутить с таймфреймами, но сев накатал предыдущий код вот в таком виде:
Код: |
pnkt = Param("punkti", 500, 50, 3000, 50); //пункты к условию покупки/продажи
pnpf = Param("profit", 500, 50, 3000, 50); //профит-стоп в пунктах
Cap = 500000; //стартовый капитал
Pos = 0; //триггер позиции
Cntr = 0; //количество контрактов
pr_in = Open + pnkt; //цена входа в позицию
pr_out = Open - pnkt; //цена выхода из позиции
pr_pr = 0; //цена выхода из позиции по прибыли
price = 0; //цена входы
Ost = 0;
for( i = 1; i < BarCount; i++ )
{
if (pos == 0) //если не в позции
{
if (pr_in[i] < High [i]) //проверяем условие входа в позицию
{
Cntr = int(Cap / pr_in[i]); // считаем количество контрактов
pos = 1; // триггер - мы вошли в позицию
price = pr_in[i]; // цена входа для дальнейших расчетов
Ost = Cap - Cntr * pr_in[i]; // остаток депо после входа в позу
pr_pr = pr_in[i] + pnpf; // определяем цену выхода по профиту
}
}
else
{ if (pr_out[i] > Low[i]) // условие стандартного выхода
{
Cap = Ost + (pr_out[i] - price)*Cntr + price*Cntr - 20; //расчет результата 20 это комиссия :)
pos = 0; //тригер - вышли из позы
}
else
{
if(High[i] > Pr_pr) // проверка на условие выхода по прибыли
{
pos = 0; //тригер - вышли из позы
Cap = Ost + (pr_pr - price)*Cntr + price*Cntr - 20; //расчет результата позы
}
}
}
trailARRAY[ i ] = Cap;
};
Plot(trailARRAY, "cap", 1,1); //рисуем эквити |
И вышло как-то глюковато, если зумить график, то цифры пляшут.
А идея такая: если не в позиции - проверяем условие входа, если выполняется - входим, если и нет - следующий бар. Если вошли то выходим по условию, если условия выхода нет - то по условию достижения профит-стопа. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Посмотрел. Правда не подробно. Вроде все правильно. А цифры пляшут при зумировании возможно потому, что АФЛ по умолчанию считает не с нулевого бара, а только видимую часть с некоторым запасом (называется квик афл). Сделано для ускорения расчетов.
Чтобы заставить его считать с реально первого бара в начале кода ставь функцию
Код: |
SetBarsRequired(500000, 0);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
000 писал(а): |
SetBarsRequired(500000, 0);
|
ага. помогло. Но результаты мне всё равно не нравятся, попахивают нереальностью какой-то. Гляжу на эквити (чем меньше фрейм тем красивее, на RTSI например), и кажется, что входишь в любой бар, ставишь профит: случился профит - круто, не случился, так комиссию по любому отобъёшь. Надо роботу прям вот этот простой код и скормить, позырить что выйдет. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
kosbar
Зарегистрирован: 17.03.2009
Сообщения: 356
|
комиссию подправил, всё встало на свои места) |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
|