Автор |
Сообщение |
kent
Гость
|
Добрый день.
Мне нужно чтобы при входе стоп составлял 200 пунктов а при движении цены в мою сторону более чем на 150 пунктов переносился в безубыток.
Перечитал весь форум, но так и не сумел написать нужный код, пробовал через определение уровней и выходить по sell, через функции аппл стоп, но чето не работает. Подскажите кто знает желательно самый простой вариант. |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
К сожалению простого способа либо не существует, либо я о нем не знаю. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kent
Гость
|
жаль конечно. ну тогда хоть какой нить вариант |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Подожди пару дней. Рожу какой-нить вариант. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kent
Гость
|
Спасибо Олег! Буду ждать, а то без этого пресловутого стопа все тестирование встало |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Получилось довольно сложно. Сам не проверял, но вроде ошибок нету
Код: |
Buy = ...;
Sell = ...;
Short = ...;
Cover = ...;
ReverceSignal = 0 ;
// если 1 то переворот при наличии обратного сигнала
// если 0 то обратный сигнал игнорируется.
Exit = 0;
// если 1 то сигнал на выход закрывает позу
// если 0 то сигнал на выход игнорируется
FirstStop = 200 * TickSize;
// уровент начального стопа
trans = 150 * TickSize;
// при достижении профита переносим стоп сюда
Long = 0;
tran = 0;
for(i = 1; i < BarCount; i++)
{
if(Buy[i])
{
Long = 1;
Price = BuyPrice[i];
stop = Price - FirstStop;
tran = 0; // стоп не перенесен
}
if(Short[i])
{
Long = -1;
Price = ShortPrice[i];
stop = Price + FirstStop;
tran = 0; // стоп не перенесен
}
////// выход //////////
if(exit)
{
if(Long == 1)
{
if(Sell[i] > 0)
Long = 0;
}
if(Long == -1)
{
if(Cover[i] > 0)
Long = 0;
}
}
////// переворот //////////
if(ReverceSignal)
{
if(Long == 1)
{
if(Short[i] > 0)
{
Long = -1;
Price = ShortPrice[i];
stop = Price + FirstStop;
tran = 0; // стоп не перенесен
}
}
if(Long == -1)
{
if(Buy[i] > 0)
{
Long = 1;
Price = BuyPrice[i];
stop = Price - FirstStop;
tran = 0; // стоп не перенесен
}
}
}
////////// перенос стопа ////////////
if(tran == 0)
{
if(Long == 1)
{
if(H[i] > Price + trans)
{
tran = 1; // стоп перенесен
stop = Price;
}
}
if(Long == -1)
{
if(L[i] < Price - trans)
{
tran = 1; // стоп перенесен
stop = Price;
}
}
}
////////// стоп ///////////
if(Long == 1)
{
if(L[i] < stop)
{
Sell[i] = 1;
SellPrice[i] = stop;
Long = 0;
}
}
if(Long == -1)
{
if(H[i] > stop)
{
Cover[i] = 1;
CoverPrice[i] = stop;
Long = 0;
}
}
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Ср Сен 24, 2008 12:12 am), всего редактировалось 2 раз(а) |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kent
Гость
|
Добрый день! Скопировал код вставил, выдает такую ошибку:
Line 143, Column 1:
Long = 0;
}
}
}
^
Error 3.
Condition in IF, WHILE, FOR statements
has to be Numeric or Boolean type.
You can not use array here,
please use [] (array subscript operator)
to access array elements |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Трудно сказать что там за ошибка в строке 143. У меня в коде всего 121 строка...
Вообще говоря это черновик потому, что совсем универсальный код написать неполучилось. Разумеется его работоспособность зависит от того, как заданы Buy, Sell, short, cover и какие в коде есть еще прибамбасы... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kent
Гость
|
Добрый день. вышеуказанную ошибку так и не смог устранить, залез на сайт амиброкера там копался в готовых кодах, вот что нарыл:// TRADING SYSTEM LONG STOP FORMULA
// ****************************************************************************************
BuyStopLoss = 0; // 0 - not a stop loss formula, stop must be activated
// 1 - stop is activated without checking ActiveLevel
// How many bars ago was the last Buy signal?
BuyBarsSince = BarsSince(Buy == 1);
// Setting stop level
// As an example BuyStopLevel depends directly on BuyPrice and a constant
// Could be also: BuyPrice + ATR or any other dynamic formula
BuyStopLevel = Ref(BuyPrice, -BuyBarsSince) + 3;
// Setting the level to activate stop
// BuyActivateLevel depends directly on BuyPrice and a constant
// and I think this is how it should be - BuyActiveLevel should not be dynamically calculated
// NOTE: When BuyStopLoss = 1, BuyActiveLevel is not important
BuyActiveLevel = Ref(BuyPrice, -BuyBarsSince) + 22;
// Active is triggered when the highest price since Buy is higher then BuyActiveLevel or
// is always 1 (True) when BuyStopLoss = 1
// NOTE: Cross() returns 0 when HHV = BuyActiveLevel
BuyActive = Cross(BuyActiveLevel, HHV(High, -BuyBarsSince)) OR BuyStopLoss;
// BuyStop is triggered when Low of the session is lower than BuyStopLevel
// NOTE: Cross() returns 0 when BuyStopLevel = Low
BuyStop = Cross(Low, BuyStopLevel);
// BuyActive will be 1 (True) till BuyStop is triggered
// therefore we will know if BuyStop is activated and should be executed
BuyActive = Flip(BuyActive, BuyStop);
// When gap on open - use Open otherwise use BuyStopLevel as a SellPrice
SellPrice = Min(Open, BuyStopLevel);
У меня блин не тока с формулами но и с английским не очень, но из того что удалось перевести вроде то что я ищу, что скажаеш Олег? |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Эта формула генерирует стопы и входы при пробое ценой уровня задаваемого при выполнении некоторых условий . Совсем не похоже на перенос стопа в безубыток. Скинь мне в личку свою готовую формулу. Посмотрю, что там не работает. Только не обещаю быстро. Мне еще надо главу про аккаунт менеджер дописать... )))) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
у меня в коде была небольшая ошибочка. Исправил и смотри личку. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
TeRGeR
Зарегистрирован: 02.02.2010
Сообщения: 48
|
а код который выложен выше он уже исправлен?
не подскажите как здесь нарисовать стрелки именно где сработал стоп?
а тут stop на stop[i] не надо заменить? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ошибка исправлена.
stop на stop[i] заменять не надо.
Стрелки на срабатывание стопа в данном случае по простому не нарисовать. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
TeRGeR
Зарегистрирован: 02.02.2010
Сообщения: 48
|
|
Посмотреть профиль Отправить личное сообщение |
|
TeRGeR
Зарегистрирован: 02.02.2010
Сообщения: 48
|
все никак не могу придумать скользящий стоп ((
есть только такая идея, но пока не работает...
есть какие-нить идеи?
Код: |
ReverceSignal = 0 ;
// если 1 то переворот при наличии обратного сигнала
// если 0 то обратный сигнал игнорируется.
Exit = 0;
// если 1 то сигнал на выход закрывает позу
// если 0 то сигнал на выход игнорируется
FirstStop = TickSize*200;
// уровент начального стопа
trans = 200*TickSize;
// при достижении профита переносим стоп сюда
for(i = 1; i < BarCount; i++)
{
if(Buy[i])
{
Long = 1;
Price = BuyPrice[i]; // BuyPrice[i] Определяет массив, цену покупки
stop = Price - FirstStop;
tran = 0; // стоп не перенесен
}
if(Short[i])
{
Long = -1;
Price = ShortPrice[i]; // ShortPrice[i] Определяет массив, цену продажи
stop = Price + FirstStop;
tran = 0; // стоп не перенесен
}
////// выход //////////
if(exit)
{
if(Long == 1)
{
if(Sell[i] > 0)
Long = 0;
}
if(Long == -1)
{
if(Cover[i] > 0)
Long = 0;
}
}
////// переворот //////////
if(ReverceSignal)
{
if(Long == 1)
{
if(Short[i] > 0)
{
Long = -1;
Price = ShortPrice[i]; // ShortPrice[i] Определяет массив, цену продажи
stop = Price + FirstStop;
tran = 0; // стоп не перенесен
}
}
if(Long == -1)
{
if(Buy[i] > 0)
{
Long = 1;
Price = BuyPrice[i]; // BuyPrice[i] Определяет массив, цену покупки
stop = Price - FirstStop;
tran = 0; // стоп не перенесен
}
}
}
////////// перенос стопа ////////////
if(Long == 1)
{
if(H[i] > Price + trans)
{
stop = Price;
Price = H[i];
}
if(Long == -1)
{
if(L[i] < Price - trans)
{
stop = Price;
Price = L[i];
}
}
}
////////// стоп ///////////
if(Long == 1)
{
if(L[i] < stop)
{
Sell[i] = 1;
SellPrice[i] = stop; // SellPrice[i] Определяет массив, цену по которой совершается закрытие длинной продажи.
Long = 0;
}
}
if(Long == -1)
{
if(H[i] > stop)
{
Cover[i] = 1;
CoverPrice[i] = stop; // CoverPrice[i] Определяет массив, цену по которой совершается закрытие короткой продажи.
Long = 0;
}
}
}
|
"выход" и "переворот" у меня не на что не влияют почему-то |
Последний раз редактировалось: TeRGeR (Чт Апр 01, 2010 3:10 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
|