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



Зарегистрирован: 21.11.2008
Сообщения: 67
Откуда: Рязань

СообщениеДобавлено: Пн Дек 22, 2008 3:45 pm Ответить с цитатой Вернуться к началу

подскажите, как в стопе, написанном вручную, задать исполнение строго по цене стопа
типа exitatstop=1 во встроенных стопах))
Код:

g=Optimize("g",0.03,0.01,0.07,0.01);
Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);

stopLevel=(1-g);
pos = 0;

Buy=Cond1 AND Cond2 AND Cond3 AND Cond4;
Sell=0;
for(i = 1; i<BarCount; i++)
{
  if (Buy[i-1])
  {
  pos[i] = 1;
  }
  else
  {pos[i]=pos[i-1];
  }

// уровень стопа
   if (pos[i] == 1)
   {
      Buy[i] = 0;
      stop[i] = C[i-1]*stopLevel;
      if(stop[i] < stop[i-1])
      {
         stop[i]=stop[i-1];
      }
   }
   else
   {
      stop[i]=Null;
   }
   // активизация стопа

   if(pos[i] == 1)
   {
      if(C[i] < stop[i])
      {
         Sell[i] = 1;
         pos = 0;
      }
   }
   else
   {
      Sell[i]=0;
   }
}
Plot(C,"",colorBlack,styleCandle);
Plot(stop,"",colorIndigo);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);





_________________
per aspera ad astra...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Не совсем верно написано.
В коде стоп срабатывает только если закрытие произошло ниже уровня стопа.
Код:

   if(pos[i] == 1)
   {
      if(C[i] < stop[i])
      {
         Sell[i] = 1;
         pos = 0;
      }

В таком случае стоп может исполняться тольоко по цене закрытия. Если надо чтобы стоп срабатывал по уровню, то надо исправить кодслед. образом.
Код:

   if(pos[i] == 1)
   {
      if(L[i] < stop[i])
      {
         Sell[i] = 1;
         pos = 0;
      }

Цену сделки можно задавать. В случае sell для этого надо указать SellPrice.
В данном случае примерно так
Код:

   if(pos[i] == 1)
   {
      if(L[i] < stop[i])
      {
         Sell[i] = 1;
         SellPrice[i] = stop[i];
         pos = 0;
      }

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


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

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

pos[i] = 0;
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Пн Дек 22, 2008 10:04 pm Ответить с цитатой Вернуться к началу

BabyBear писал(а):
pos[i] = 0;

А зачем переменную pos тащить массивом? Можно и так (без [i]). Единственное неудобство в том, что нельзя потом проверить где какое значение было

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


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

СообщениеДобавлено: Пн Дек 22, 2008 10:08 pm Ответить с цитатой Вернуться к началу

Не надо тащить. Но и в цикле писать Pos=0 нинада
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Пн Дек 22, 2008 10:27 pm Ответить с цитатой Вернуться к началу

Почему? Я всегда так пишу.

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


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

СообщениеДобавлено: Пн Дек 22, 2008 10:36 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Почему? Я всегда так пишу.


Код:

g=Optimize("g",0.03,0.01,0.07,0.01);
Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);

stopLevel=(1-g);
pos = 0;

Buy=Cond1 AND Cond2 AND Cond3 AND Cond4;
Sell=0;
for(i = 1; i<BarCount; i++)
{
  if (Buy[i-1])
  {
  pos[i] = 1;
  }
  else
  {pos[i]=pos[i-1];
  }

// уровень стопа
   if (pos[i] == 1)
   {
      Buy[i] = 0;
      stop[i] = C[i-1]*stopLevel;
      if(stop[i] < stop[i-1])
      {
         stop[i]=stop[i-1];
      }
   }
   else
   {
      stop[i]=Null;
   }
   // активизация стопа

   if(pos[i] == 1)
   {
      if(C[i] < stop[i])
      {
         Sell[i] = 1;
         // след строка затирает все предыдущие значения pos
         // на графике стрелки есть, а pos == 0
         pos = 0;
      }
   }
   else
   {
      Sell[i]=0;
   }
}
Plot(C,"",colorBlack,styleCandle);
Plot(stop,"",colorIndigo);
// я добавил.
Plot(pos,"",colorBlack);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Пн Дек 22, 2008 10:45 pm Ответить с цитатой Вернуться к началу

А, вон что... Не посмотрел, что в начале цикла используется массив pos, а в конце он почему то без индекса. Действительно непорядок.

Но можно было его с самого начала писать без [i] и использовать не как массив, а как переменную

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


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

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

А я не понял Sad ...
Уважаемый 000 или BabyBear, проясните плз поподробнее
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Дек 23, 2008 10:30 pm Ответить с цитатой Вернуться к началу

Подробнее. Когда мы запоминаем в позиции система или нет (при помощи pos) можно это записать в массив. Тогда немного больше писанины в коде, но зато потом можно посмотреть историю на каком баре система была в позе, а на каком нет. Код получится такой
Код:

g=Optimize("g",0.03,0.01,0.07,0.01);
Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);

stopLevel=(1-g);
pos = 0;

Buy=Cond1 AND Cond2 AND Cond3 AND Cond4;
Sell=0;
for(i = 1; i<BarCount; i++)
{
  if (Buy[i-1])
  {
      pos[i] = 1;
      // на баре входа стоп не проверяем.
      // Имеется в виду, что вход по закрытию
  }
  else
  {
      pos[i]=pos[i-1];
  }

// уровень стопа
   if (pos[i] == 1)
   {
      Buy[i] = 0;
      stop[i] = C[i-1]*stopLevel;
      if(stop[i] < stop[i-1])
      {
         stop[i]=stop[i-1];
      }
   }
   else
   {
      stop[i]=Null;
   }
   // активизация стопа

   if(pos[i] == 1)
   {
      if(L[i] < stop[i])
      {
         Sell[i] = 1;
         pos[i] = 0;
      }
   }
   else
   {
      Sell[i]=0;
   }
}
Plot(C,"",colorBlack,styleCandle);
Plot(stop,"",colorIndigo);
// я добавил.
Plot(pos,"",colorBlack);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);

или можно запоминать пзицию в переменную. Тогда писанины чуть меньше, но нельзя проверить на истории на каком баре система была в позиции а на каком нет. Это плохо при проверке правильности написания кода.
Код:

g=Optimize("g",0.03,0.01,0.07,0.01);
Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);

stopLevel=(1-g);
pos = 0;

Buy=Cond1 AND Cond2 AND Cond3 AND Cond4;
Sell=0;
for(i = 1; i<BarCount; i++)
{
  if (Buy[i-1])
  {
      pos = 1;
  }

// уровень стопа
   if (pos == 1)
   {
      Buy[i] = 0;
      stop[i] = C[i-1]*stopLevel;
      if(stop[i] < stop[i-1])
      {
         stop[i]=stop[i-1];
      }
   }
   else
   {
      stop[i]=Null;
   }
   // активизация стопа

   if(pos == 1)
   {
      if(C[i] < stop[i])
      {
         Sell[i] = 1;
         pos = 0;
      }
   }
   else
   {
      Sell[i]=0;
   }
}
Plot(C,"",colorBlack,styleCandle);
Plot(stop,"",colorIndigo);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);

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


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

СообщениеДобавлено: Ср Дек 24, 2008 4:44 am Ответить с цитатой Вернуться к началу

СПАСИБО
Посмотреть профиль Отправить личное сообщение
ID
Советник


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

СообщениеДобавлено: Чт Дек 25, 2008 11:41 am Ответить с цитатой Вернуться к началу

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


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

СообщениеДобавлено: Чт Дек 25, 2008 2:03 pm Ответить с цитатой Вернуться к началу

Забыл. Но его в самом первом коде и небыло... (поэтому забыл)

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


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

СообщениеДобавлено: Пт Дек 26, 2008 12:28 am Ответить с цитатой Вернуться к началу

Если SellPrice явно не указан, то сделка будет посчитана по "регулярной" цене (обычной цене исполнения сделок заданной в настройках АА на закладке Trades)

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen