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



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

СообщениеДобавлено: Ср Июн 22, 2016 5:35 pm Ответить с цитатой Вернуться к началу

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

Код:

FirstProfitTarget = 2; // profit
SecondProfitTarget = 4; // in percent
TrailingStop = 4; // also in percent

priceatbuy=0;
highsincebuy = 0;

exit = 0;

for (i = 1; i < BarCount; i++)
{
   if (market_position[i] == 0)
   {
   if (H[i]>LL[i-1] AND L[i]<YesterdayClose[i])
   {
      if (ShortUpperClose[i])
      {
         Short[i] = 1;
         ShortPrice[i] = YesterdayClose[i];
         enter = YesterdayClose[i];
         market_position = -1;
         stopLine = hh[i];
      }
   } else {
      if (ShorUpperClose[i])
      {
         Short[i] = 1;
         ShortPrice[i] = YesterdayClose[i];
         enter = YesterdayClose[i];
         market_position = -1;
         stopLine = hh[i];
      }
      
      if (Short_LL[i-1])
      {
         Short[i] = 1;
         ShortPrice[i] = O[i];
         enter = O[i];
         market_position = -1;
         stopLine =  hh[i];   
      }
   }
   }
      
   if (market_position[i] == -1)
   {
        highsincebuy = Min(Low[ i ], highsincebuy );

   if( exit == 0 AND Low[ i ] <= ( 1 - FirstProfitTarget * 0.01 ) * enter )
       {
         // first profit target hit - scale-out
         exit = 1;
         Short[ i ] = sigScaleOut;
       }

      if( exit == 1 AND
          Low[ i ] <= ( 1 - SecondProfitTarget * 0.01 ) * enter )
       {
         // second profit target hit - exit
         exit = 2;
         ShortPrice[ i ] = Min( Open[ i ], ( 1 - SecondProfitTarget * 0.01 ) * enter );
       }

if (time[i-1] >= 155000)
      {
         Cover[i] = 1;
         CoverPrice[i] = O[i];
         market_position = 0;
         stopLine = Null;
 
      }

      if( exit >= 2 )
       {
         Short[ i ] = 0;
         Cover[ i ] = exit + 1; // mark appropriate exit code
         exit = 0;
         priceatbuy = 0; // reset price
         highsincebuy = 0;
       }

      if (h[i]>stopLine)
      {
         Cover[i] = 1;
         CoverPrice[i] = stopLine[i];
         market_position = 0;
         stopLine = Null;
      }

   }
}
risk = 250/IIf(hh-ShortPrice==0,250,(hh-ShortPrice));
SetPositionSize(risk,4);
SetPositionSize(risk/2, spsPercentOfPosition * ( Short == sigScaleOut ) );



Сорри про копипастинге код немного потерял красоту оформления
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Июн 22, 2016 6:57 pm Ответить с цитатой Вернуться к началу

Неплохо было бы еще написать в чем конкретно этот код дурит.

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



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

СообщениеДобавлено: Ср Июн 22, 2016 7:50 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Неплохо было бы еще написать в чем конкретно этот код дурит.

он пропускает все промежуточные выходы и выходит только по трейдинг или в конце дня. Я специально подобрал тестовый набор чтобы срабатывали все выходы но нифига. Только два выхода срабатывают
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Июн 22, 2016 9:55 pm Ответить с цитатой Вернуться к началу

А как проверял? Тестер покажет только последний выход.

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



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

СообщениеДобавлено: Чт Июн 23, 2016 5:27 am Ответить с цитатой Вернуться к началу

000 писал(а):
А как проверял? Тестер покажет только последний выход.


Ну он же показывает ScaleIn/Out
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Июн 23, 2016 8:32 am Ответить с цитатой Вернуться к началу

В каком режиме он их показывает?

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



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

СообщениеДобавлено: Чт Июн 23, 2016 5:05 pm Ответить с цитатой Вернуться к началу

000 писал(а):
В каком режиме он их показывает?

в обычном он показывает 1 если был Оut
в необычном он показывает детальный лог
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Июн 23, 2016 9:40 pm Ответить с цитатой Вернуться к началу

В режиме Trade List scaleIn и scaleOut он никак не показывает.

Очень трудно разбирать твой код. А у тебя там еще и непонятности.
Типа.
highsincebuy у тебя изначально = 0.
Затем ты пишешь
highsincebuy = Min(Low[ i ], highsincebuy );
Ежу понятно, что 0 всегда меньше чем Low и поэтому highsincebuy всегда будет 0.
И при этом я так и не смог понять нафига этот highsincebuy вообще нужен...

Ты хоть в общих словах опиши что этот код должен делать.

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



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

СообщениеДобавлено: Пт Июн 24, 2016 2:36 am Ответить с цитатой Вернуться к началу

000 писал(а):
В режиме Trade List scaleIn и scaleOut он никак не показывает.
Ты хоть в общих словах опиши что этот код должен делать.


Он не показывает сами сделки, но он показывает 1 если scaleOut имел место. не важно сколько выходов было - всегда 1. если был один выход "обычный" то 0

Идея праста как барабан - если прошли 2% - выходим половинкой и стоп в безубыток (я его пока не приписал), еще 2% - выходим остатком. В 15-50 безусловный выход.
Я там уже почистил код - но все равно зараза не работает так как надо
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Июн 24, 2016 6:59 am Ответить с цитатой Вернуться к началу

вот так попробуй
Код:

FirstProfitTarget = 2; // profit
SecondProfitTarget = 4; // in percent
TrailingStop = 4; // also in percent
time = TimeNum();
risk = 2;

priceatbuy=0;

exit = market_position = 0;

for (i = 2; i < BarCount; i++)
{
   if (market_position[i] == 0)
   {
      if (H[i]>LL[i-1] AND L[i]<YesterdayClose[i])
      {
         if (ShortUpperClose[i])
         {
            Short[i] = 1;
            ShortPrice[i] = YesterdayClose[i];
            enter = YesterdayClose[i];
            market_position = -2;
            stopLine = hh[i];
         }
      }
      else
      {
         if (ShorUpperClose[i])
         {
            Short[i] = 1;
            ShortPrice[i] = YesterdayClose[i];
            enter = YesterdayClose[i];
            market_position = -2;
            stopLine = hh[i];
         }
         else if (Short_LL[i-1])
         {
            Short[i] = 1;
            ShortPrice[i] = O[i];
            enter = O[i];
            market_position = -2;
            stopLine =  hh[i];   
         }
      }
   }
   else if (market_position[i] == -2)
   {
      if (H[i] > stopLine)
      {
         Cover[i] = 1;
         CoverPrice[i] = Max(H[i], stopLine[i]);
         market_position = 0;
         stopLine = Null;
      }
      else if (time[i-1] >= 155000)
      {
         Cover[i] = 1;
         CoverPrice[i] = O[i];
         market_position = 0;
         stopLine = Null;
      }
      else if( Low[ i ] <= ( 1 - FirstProfitTarget * 0.01 ) * enter )
      {
         // first profit target hit - scale-out
         Short[ i ] = sigScaleOut;
         market_position = -1;
         stopLine = enter; // перенос стопа в безубыток
         risk[i] = 1;
      }
   }
   else if (market_position[i] == -1)
   {
      if (H[i] > stopLine)
      {
         Cover[i] = 1;
         CoverPrice[i] = Max(H[i], stopLine[i]);
         market_position = 0;
         
      }
      else if (time[i-1] >= 155000)
      {
         Cover[i] = 1;
         CoverPrice[i] = O[i];
         market_position = 0;
         stopLine = Null;
      }
      else if ( Low[ i ] <= ( 1 - SecondProfitTarget * 0.01 ) * enter )
      {
         Cover[i] = 1;
         ShortPrice[ i ] = Min( Open[ i ], ( 1 - SecondProfitTarget * 0.01 ) * enter );
         market_position = 0;
      }
   }
}
SetPositionSize(risk, 4)

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



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

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

Привет.
Попробовал...не взлетает. он выходит сразу на первом же "выходе" всей суммой (я пробовал менять SetPositionSize(risk, 4) как в мануале написано)
Эх...блин все хорошо в ами, но кое что через жопу
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июн 27, 2016 12:37 am Ответить с цитатой Вернуться к началу

К сожалению весь код я не вижу и немогу отладить. Думаю в цикле все ОК. Вероятно у тебя раньше ошибка...

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



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

СообщениеДобавлено: Пн Июн 27, 2016 1:30 am Ответить с цитатой Вернуться к началу

000 писал(а):
К сожалению весь код я не вижу и немогу отладить. Думаю в цикле все ОК. Вероятно у тебя раньше ошибка...


да там раньше кода то и нету особо никакого.
просто описываются условия входа и все.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июн 27, 2016 9:26 am Ответить с цитатой Вернуться к началу

Так дай.

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



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

СообщениеДобавлено: Ср Дек 09, 2020 1:35 pm Ответить с цитатой Вернуться к началу

Здравствуйте,

Возник такой вопрос. У меня открыта позиция и я хочу ее закрыть в несколько приемов. Пользуюсь конструкцией:
Buy = ScaleOut
Проблема в том, что после закрытия последней части таким образом, система продолжает видеть наличие открытой позиции (о чем говорит тестер), например Открытая позиция Лонг, величина открытой позиции 0.
Есть ли какой-нибудь способ закрыть позицию полностью последним ScaleOut'ом, чтобы тестер сразу указал отсутствие открытой позиции?
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen