Предлагаю функцию реверса ордеров, для сливающих советников.

 

Помню, поначалу сталкивался с вопросом, как грамотно "перевернуть" ордера с покупки на продажу и наоборот. Напишу круто сливающий советник и становится интересно: вдруг начнет зарабатывать, если сделки перевернуть? Но, и за-за Бид и Аск (спрэда) не всегда корректно сразу получалось. Ведь просто поменять местами СтопЛосс и Тейк Профит нельзя, и есть нюанс по поводу начальной цены открытия ордера.

Поэтому написал небольшой код, который поможет начинаюшим быстро проверить ваш сливающий советник на "развороте" ордеров.

Этот код меняет все ордера, включая отложенные. И как основная функция OrderSend, функция ReversOrderSend возвращает код ошибки.


Это кидаем в область внешних переменных:

extern int ReversOrder=0; // Переворот сделок 1-да; 0-нет;


Это кидаем в самый конец программы (то есть создаем новую функцию - ReversOrderSend() ):

int ReversOrderSend (string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit,string comment,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int Ret=0;
double sprd=MarketInfo(symbol,MODE_SPREAD)*Point;
//Print ("----------------------------",sprd);
if (ReversOrder==0) // Открываем ордера без разворота
{
Ret=OrderSend (symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);
}
if (ReversOrder==1)
{
///////////////
if (cmd==OP_SELLSTOP) // Переворачиваем ордера OP_SELLSTOP
{
Ret=OrderSend (symbol,OP_BUYLIMIT,volume,price+sprd,slippage,takeprofit-sprd,stoploss-sprd,comment,magic,expiration,arrow_color);
}
if (cmd==OP_BUYSTOP) // Переворачиваем ордера OP_BUYSTOP
{
Ret=OrderSend (symbol,OP_SELLLIMIT,volume,price-sprd,slippage,takeprofit+sprd,stoploss+sprd,comment,magic,expiration,arrow_color);
}
///////////////
if (cmd==OP_SELL) // Переворачиваем ордера OP_SELL
{
Ret=OrderSend (symbol,OP_BUY,volume,price+sprd,slippage,takeprofit-sprd,stoploss-sprd,comment,magic,expiration,arrow_color);
}
if (cmd==OP_BUY) // Переворачиваем ордера OP_BUY
{
Ret=OrderSend (symbol,OP_SELL,volume,price-sprd,slippage,takeprofit+sprd,stoploss+sprd,comment,magic,expiration,arrow_color);
}
//////////////
if (cmd==OP_SELLLIMIT) // Переворачиваем ордера OP_SELLLIMIT
{
Ret=OrderSend (symbol,OP_BUYSTOP,volume,price+sprd,slippage,takeprofit-sprd,stoploss-sprd,comment,magic,expiration,arrow_color);
}
if (cmd==OP_BUYLIMIT) // Переворачиваем ордера OP_BUYLIMIT
{
Ret=OrderSend (symbol,OP_SELLSTOP,volume,price-sprd,slippage,takeprofit+sprd,stoploss+sprd,comment,magic,expiration,arrow_color);
}
}
return (Ret);
}


В самой программе меняем все функции OrderSend на ReversOrderSend. (Можно автозаменой Ctrl-H) Все, что было в скобках, после функции оставляем.

Все готово. Теперь для проверки эксперта на развороте в настройках эксперта меняем значение ReversOrder с 0 на 1 и продолжаем наслаждаться сливом, т.к. на перевороте, как показывает практика, эксперты все равно сливают или не приносят прибыль.

 
Совершенно академический интерес -- в чём потаённый смысл данной работы?
 
LorDen:

писал много советников, для переворота заменял функцию бай на селл, а сел на бай. Для каждого советника своя функция бай и своя селл, свой алгоритм работы с ордерами. Пишу эти функции всегда заново, так как пишутся они в 2 минуты.

написать сливного советника, конечно проще, но сливаем мы лишь депозит и на этом заканчиваем торговлю, а прибыль от переворотного советника желаем получать бесконечно долго.

как правил,о кривая депозита советника без идеи, будет колебаться вокруг прямой устремляющейся в ноль, наклон прямой всегда вниз, из-за спредов и реквотов.

Слив возникает быстрее чем из-за спреда, только потому что после хода депозита в ноль он не может вернуться.

 
LorDen:


А что, есть предположение, что если советник сливает, то можно перевернуть ордера и от этого перевернется эквити? :-)
 

vasya_vasya:

писал много советников, для переворота заменял функцию бай на селл, а сел на бай.

Swetten 25.08.2010 01:25

Совершенно академический интерес -- в чём потаённый смысл данной работы?

Смысл, этой работы в 2 вещах:

1 Я сам как и vasya_vasya по началу просто менял Buy на Sell, а Sell на Buy, а это в корне не верно ! все из-за спрэда.

2 Именно из за того, что нельзя просто поменять Buy на Sell. Иногда приходится тратить время (кому-то 2 мин., а кому-то 2 часа если первый раз) чтобы вспомнить (обдумать), как правильно сделать разворот, то есть где отнять спрэд, где добавить. Чтобы не тратить на это время можно просто использовать эту функцию.

Насчет того, может ли сливающий советник зарабатывть, есть отдельный раздел форума, там это обсуждали. От себя хочу скзать, что сливающий советник может зарабатывать, все зависит от размеров S/L и T/P. Если они значительно превышают размер спрэда, то и влияния на профит, спрэд почти не оказывает, соответствено и на переворот ордеров.

Кстати, я так думаю, многие не правильно делают переворот ордеров, из-за этого не правильно строится обратный график.

Вот для примера два изображения одно, первое, без разворота, второе с переворотом сделанным с помощю моей функции.



 
LorDen:

Совершенно академический интерес -- в чём потаённый смысл данной работы?

Смысл, этой работы в 2 вещах:

1 Я сам как и vasya_vasya по началу просто менял Buy на Sell, а Sell на Buy, а это в корне не верно ! все из-за спрэда.

2 Именно из за того, что нельзя просто поменять Buy на Sell. Иногда приходится тратить время (кому-то 2 мин. кому-то 2 часа если первы раз) чтобы вспомнить (обдумать), как правильно сделать разворот, то есть где отнять спрэд, где добавить. Чтобы не тратить на это время можно просто использовать эту функцию.

Насчет того, может ли сливающий советник зарабатывть, есть отдельный раздел форума, там это обсуждали. От себя хочу скзать, что сливающий советник может зарабатывать, все зависит от размеров S/L и T/P. Если они значительно превышают размер спрэда, то и влияния на профит, спрэд почти не оказывает, соответствено и на переворот ордеров.

Кстати, я так думаю, многие не правильно делают переворот ордеров, из-за этого не правильно строится обратный график.

Вот для примера два изображения одно, первое, без разворота, второе с переворотом зделанным с помощю моей функции.



про спред все просто - покупаете по аску, продаете по биду, закрываете покупку по биду, закрываете продажу по аску. тейк профит и стоп лосс - это и есть закрытие, ничего кроме смены бай на селл и селл на бай делать не нужно.
 
vasya_vasya:
про спред все просто - покупаете по аску, продаете по биду, закрываете покупку по биду, закрываете продажу по аску. тейк профит и стоп лосс - это и есть закрытие, ничего кроме смены бай на селл и селл на бай делать не нужно.

Вы не правы, если вы просто поменяете Стопл Лосс и Тейк Профит, и я думаю (я уже писал это) большинство имеет схожее заблуждение.

Правилный разворот выглядит так:

if (cmd==OP_SELL) // Переворачиваем ордера OP_SELL
{
Ret=OrderSend (symbol,OP_BUY,volume,price+sprd,slippage,takeprofit-sprd,stoploss-sprd,comment,magic,expiration,arrow_color);
}
if (cmd==OP_BUY) // Переворачиваем ордера OP_BUY
{
Ret=OrderSend (symbol,OP_SELL,volume,price-sprd,slippage,takeprofit+sprd,stoploss+sprd,comment,magic,expiration,arrow_color);
}

 
LorDen:

Вы не правы, если вы просто поменяете Стопл Лосс и Тейк Профит, и я думаю (я уже писал это) большинство имеет схожее заблуждение.

Правилный разворот выглядит так:

if (cmd==OP_SELL) // Переворачиваем ордера OP_SELL
{
Ret=OrderSend (symbol,OP_BUY,volume,price+sprd,slippage,takeprofit-sprd,stoploss-sprd,comment,magic,expiration,arrow_color);
}
if (cmd==OP_BUY) // Переворачиваем ордера OP_BUY
{
Ret=OrderSend (symbol,OP_SELL,volume,price-sprd,slippage,takeprofit+sprd,stoploss+sprd,comment,magic,expiration,arrow_color);
}

хотя если разобраться, то да я просто не пользуюсь тейк профитом и стоп лоссом, мне проще
 

а чего так сложно-то? любой советник должен определять "сигналы" на вход (чтото вроде покупать - 1, продавать - 0) вы просто поменяйте 1 на 0 и у вас будут открываться "обратные" ордера.

но только вас это не спасет: если в днище корабля начать делать дырки не изнутри корпуса а снаружи - он все равно потонет ;)

сливают то как правило не на том что не туда открылись, а на том что слишком часто не туда открывались. кто вам сказал что вы не поймаете стопа "в другой стороне"? в этой методе ваш лось вас всегда найдет как бы вы ни крутились.

имхо конечно, правда подтвержденное нескольким практическими советниками сделанными в то время когда я тоже думал что нашел эту "золотую жилу" :)))))

как в там законах Мэрфи: если вам кажется что ситуация улучшается - значит вы чегото не заметили!

 
а чего так сложно-то? любой советник должен определять "сигналы" на вход (чтото вроде покупать - 1, продавать - 0) вы просто поменяйте 1 на 0 и у вас будут открываться "обратные" ордера.

Если бы все было так просто я бы не писал эту функцию. Прочитайте этот пост с начала и поймете.

Важно: Если после того, как вы "перевернули" ваш советник сами, своими ручками, колличество ордеров не совподает с колличеством ордеров без переворота, это значит вы что-то сделали не правильно. Исползуя мою функцию это колличество остается одинаковым. П.С. Если конечно советник не сливает весь депозит до конца тестирования.

 
LorDen:

и продолжаем наслаждаться сливом...

Хорошо сказал &)

Не пойму, почему ДЦ до сих пор не устраивают конкурсы типа "Бешеный слив" или "Сливная лихорадка"?

Причина обращения: