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



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

СообщениеДобавлено: Ср Ноя 28, 2012 11:27 pm Ответить с цитатой Вернуться к началу

Привет.
Вопрос опять про добавление позы. Имеем системку для которой нужно реализовать доливку к открытой позе. Сам механизм доливки написан (см примерный код) но нужно сказать ами, что:
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;
    }
  }
 
  }


Хелп плиз Sad
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Ноя 28, 2012 11:35 pm Ответить с цитатой Вернуться к началу

Наверное как то так
Код:

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

СообщениеДобавлено: Чт Ноя 29, 2012 7:59 am Ответить с цитатой Вернуться к началу

Спасибо большое!
теперь заработало. оказывается я все пытался правильно сделать но скобки не корректно расставил и цикл не так срабатывал
Посмотреть профиль Отправить личное сообщение
max



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

СообщениеДобавлено: Чт Ноя 29, 2012 4:49 pm Ответить с цитатой Вернуться к началу

Хотя нет, я поторопился
не срабатывает
1.если писать else if(pos > 0 AND pos < 4) {
то система начинает выходить "через стоп". Т.е. например если в базовом варианте мы выходим ровно в 19-00 каждый день, то тут она входит, держит позу два дня и выходит в 19-00
если поставить pos > 1 то сделки начинают совпадать с базовым вариантом
2.но при этом количество контрактов всегда "по максимуму" (на заявленный депозит получается Cool , хотя в базовом тесте (где нет ограничения на количество доливок их не бывает более 5

Попробовал перенести скобки (как в базовом варианте) - вообще сделки не идут
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Так может сперва объяснишь что собственно нужно?

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



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

СообщениеДобавлено: Чт Ноя 29, 2012 6:04 pm Ответить с цитатой Вернуться к началу

хм попробую еще раз

есть система, meanreversing. соответственно для нее усреднение убыточной позиции позволяет улучшить соотношение профитов\лосей
Нужно соответственно это усреднение изобразить.
есть два варианта как определять точки доливок: просто повторение условия входа но не более 3х раз или поделить расстояние между точкой входа первоначального и уровнем когда условие MR считаем отмененными и поделить на 3.
Вот первый вариант я и пытаюсь изобразить. Заставить ами просто доливаться я смог. И гипотеза о полезности доливки в такого рода систем подтвердилось. Но я никак не могу зафиксировать условие "не более 3х доливок"
Второй вариант "делим расстояние" я пока вообще не представляю как осуществить так как нужно заставить АМИ четко зафиксировать точку первоначального входа и не передвигать ее...это будет мой второй вопрос как с этим разберусь
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Бррр. Тогда я не понял, что не работает. Что значит "выходит через стоп"?
Пропускает один сигнал выхода и выходит только на следующем?
Этого не может быть. Или есть какие то причины о которых ничего не было сказано....

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



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

СообщениеДобавлено: Пт Ноя 30, 2012 6:50 am Ответить с цитатой Вернуться к началу

000 писал(а):
Бррр. Тогда я не понял, что не работает. Что значит "выходит через стоп"?
Пропускает один сигнал выхода и выходит только на следующем?
Этого не может быть. Или есть какие то причины о которых ничего не было сказано....

Нет, никаких причин нет. Ну вот смотри.
В Базовом варианте - код который я привел в своем первом сообщении он входит ровно там где нужно (и первоначальный вход и доливки) и выходит ровно там где нужно (на самом деле стоп комбинированный - из нескольких условий, но система железобетонно выходит в конце дня)
При этом количество контрактов ами указывает так же корректно
В твоем варианте он пропускает выходы. Например входы в понедельник днем а выход аж во вторник вечером, потом в среду набирает позу а выход в четверг вечером. Т.е. вместо 10 выходов у нас получается 5
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Ноя 30, 2012 9:32 am Ответить с цитатой Вернуться к началу

Я не вижу причин, по которым этот код может пропускать выход. Если он его действительно пропускает, значит есть причина о которой тут ничего не сказано. Т.е. в другом месте кода или настроек.
Можно предположить вот что.
У тебя на одном и том же баре могут быть сигналы и на доливку и на выход т.к. условия не взаимоисключающие. Может дело в этом?

Ты точно мой код проверял? А то может что изменил а я теперь голову ломаю?

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



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

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

Да нет! в том то и дело.
когда я подставляю условия Buy и Sell в первоначальный код - все доливки срабатывают корректно и выходы корректны, а когда в твой - он начинает пропускать выходы.
если поменять pos>0 на pos>1 все начинает срабатывать верно...
я попробую сегодня просто со стопом поиграться - ну тупо ему "вписать" один вариант выхода - в конце дня и посмотрю что там получится....
но с другой стороны - с первоначальным вариантом кода где нет контроля количества входов все работает корректно
Посмотреть профиль Отправить личное сообщение
Alex14



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

СообщениеДобавлено: Чт Апр 11, 2013 3:20 pm Ответить с цитатой Вернуться к началу

"Помогите!" самое распространенное начало обращений)). Я не исключение - в цикл
Код:
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

СообщениеДобавлено: Чт Апр 11, 2013 3:47 pm Ответить с цитатой Вернуться к началу

Alex14 писал(а):
если выполняется условие VOLAT, то доливка не происходит

Код:
 
if (Dn[i]>=Up[i-1] AND Volat != 1)

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



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Чт Апр 11, 2013 3:54 pm Ответить с цитатой Вернуться к началу

А Volat разве не массив тоже? К нему по идее тоже надо обращаться через индекс.
Посмотреть профиль Отправить личное сообщение ICQ Number
Alex14



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

СообщениеДобавлено: Чт Апр 11, 2013 4:01 pm Ответить с цитатой Вернуться к началу

Да, Олег, на твою конструкцию ругается((( Если через индекс, то все равно доливает
Посмотреть профиль Отправить личное сообщение
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Чт Апр 11, 2013 4:09 pm Ответить с цитатой Вернуться к началу

Значит условие Volat = s1 > Ref(s1,10); не рабочее, в момент доливки оно равно 0. Выведи массив Volat как индикатор в отдельном окошке и убедись. Функцией Plot.
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen