Автор |
Сообщение |
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Привет.
Вопрос опять про добавление позы. Имеем системку для которой нужно реализовать доливку к открытой позе. Сам механизм доливки написан (см примерный код) но нужно сказать ами, что:
1.каждое открытие - только 1 контракт
2.всего открытых контрактов не более 4 (ну т.е. 1 основной вход и не более 3х доливок)
Пробовал его в этом убедить - никак
Код: |
pos = 0;
for(i = 1; i < BarCount; i++)
{
if(pos == 0) {
if(C[i] > C[i-1]) {
Buy[i] = 1;
BuyPrice[i] = C[i] ;
pos = 1;
}
}
else if(pos == 1) {
if(C[i] > C[i-2] AND C[i]>O[i]) {
Buy[i] = sigScaleIn;
BuyPrice[i] = C[i];
}
else if(C[i] < C[i-1]) {
Sell[i] = 1;
SellPrice[i] = C[i];
pos = 0;
}
}
} |
Хелп плиз |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Наверное как то так
Код: |
pos = 0;
for(i = 1; i < BarCount; i++)
{
if(pos == 0) {
if(C[i] > C[i-1]) {
Buy[i] = 1;
BuyPrice[i] = C[i] ;
pos = 1;
}
}
else if(pos > 0 AND pos < 4) {
if(C[i] > C[i-2] AND C[i]>O[i]) {
Buy[i] = sigScaleIn;
BuyPrice[i] = C[i];
pos++;
}
}
if(C[i] < C[i-1] AND pos > 0) {
Sell[i] = 1;
SellPrice[i] = C[i];
pos = 0;
}
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Спасибо большое!
теперь заработало. оказывается я все пытался правильно сделать но скобки не корректно расставил и цикл не так срабатывал |
|
|
Посмотреть профиль Отправить личное сообщение |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Хотя нет, я поторопился
не срабатывает
1.если писать else if(pos > 0 AND pos < 4) {
то система начинает выходить "через стоп". Т.е. например если в базовом варианте мы выходим ровно в 19-00 каждый день, то тут она входит, держит позу два дня и выходит в 19-00
если поставить pos > 1 то сделки начинают совпадать с базовым вариантом
2.но при этом количество контрактов всегда "по максимуму" (на заявленный депозит получается , хотя в базовом тесте (где нет ограничения на количество доливок их не бывает более 5
Попробовал перенести скобки (как в базовом варианте) - вообще сделки не идут |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так может сперва объяснишь что собственно нужно? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
хм попробую еще раз
есть система, meanreversing. соответственно для нее усреднение убыточной позиции позволяет улучшить соотношение профитов\лосей
Нужно соответственно это усреднение изобразить.
есть два варианта как определять точки доливок: просто повторение условия входа но не более 3х раз или поделить расстояние между точкой входа первоначального и уровнем когда условие MR считаем отмененными и поделить на 3.
Вот первый вариант я и пытаюсь изобразить. Заставить ами просто доливаться я смог. И гипотеза о полезности доливки в такого рода систем подтвердилось. Но я никак не могу зафиксировать условие "не более 3х доливок"
Второй вариант "делим расстояние" я пока вообще не представляю как осуществить так как нужно заставить АМИ четко зафиксировать точку первоначального входа и не передвигать ее...это будет мой второй вопрос как с этим разберусь |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Бррр. Тогда я не понял, что не работает. Что значит "выходит через стоп"?
Пропускает один сигнал выхода и выходит только на следующем?
Этого не может быть. Или есть какие то причины о которых ничего не было сказано.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
000 писал(а): |
Бррр. Тогда я не понял, что не работает. Что значит "выходит через стоп"?
Пропускает один сигнал выхода и выходит только на следующем?
Этого не может быть. Или есть какие то причины о которых ничего не было сказано.... |
Нет, никаких причин нет. Ну вот смотри.
В Базовом варианте - код который я привел в своем первом сообщении он входит ровно там где нужно (и первоначальный вход и доливки) и выходит ровно там где нужно (на самом деле стоп комбинированный - из нескольких условий, но система железобетонно выходит в конце дня)
При этом количество контрактов ами указывает так же корректно
В твоем варианте он пропускает выходы. Например входы в понедельник днем а выход аж во вторник вечером, потом в среду набирает позу а выход в четверг вечером. Т.е. вместо 10 выходов у нас получается 5 |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Я не вижу причин, по которым этот код может пропускать выход. Если он его действительно пропускает, значит есть причина о которой тут ничего не сказано. Т.е. в другом месте кода или настроек.
Можно предположить вот что.
У тебя на одном и том же баре могут быть сигналы и на доливку и на выход т.к. условия не взаимоисключающие. Может дело в этом?
Ты точно мой код проверял? А то может что изменил а я теперь голову ломаю? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Да нет! в том то и дело.
когда я подставляю условия Buy и Sell в первоначальный код - все доливки срабатывают корректно и выходы корректны, а когда в твой - он начинает пропускать выходы.
если поменять pos>0 на pos>1 все начинает срабатывать верно...
я попробую сегодня просто со стопом поиграться - ну тупо ему "вписать" один вариант выхода - в конце дня и посмотрю что там получится....
но с другой стороны - с первоначальным вариантом кода где нет контроля количества входов все работает корректно |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Alex14
Зарегистрирован: 12.11.2010
Сообщения: 90
|
"Помогите!" самое распространенное начало обращений)). Я не исключение - в цикл
Код: |
for (i = 1; i < BarCount; i++)
{
if (Dn[i]>=Up[i-1])
{
Buy[ i ] = 1;
Pos = Lots;
}
if (Dn[i]>=Up[i-1])
{
Buy[ i ] = sigScaleIn;
Pos = Lots;
} |
хочу добавить ограничение,
Код: |
Volat = s1 > Ref(s1,10); |
то есть, если выполняется условие VOLAT, то доливка не происходит.Просто в цикл прописать не получается, я попробовал вот так, но тоже не то
Код: |
for (i = 1; i < BarCount; i++)
{
if (Dn[i]>=Up[i-1])
{
Buy[ i ] = 1;
Pos = Lots;
}
if (Dn[i]>=Up[i-1] AND Volat=1)
{
Buy[ i ] = sigScaleIn;
Pos = Lots;
} |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Alex14 писал(а): |
если выполняется условие VOLAT, то доливка не происходит |
Код: |
if (Dn[i]>=Up[i-1] AND Volat != 1)
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
А Volat разве не массив тоже? К нему по идее тоже надо обращаться через индекс. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Alex14
Зарегистрирован: 12.11.2010
Сообщения: 90
|
Да, Олег, на твою конструкцию ругается((( Если через индекс, то все равно доливает |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Значит условие Volat = s1 > Ref(s1,10); не рабочее, в момент доливки оно равно 0. Выведи массив Volat как индикатор в отдельном окошке и убедись. Функцией Plot. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
|