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

 
Никакого смысла в данной работе нет :) Написать советник, сливающий ТАК, чтобы его сделки имело смысл переворачивать - все равно, что написать прибыльную стратегию.
 
Во во! Попробуйте написать советник который бы СТАБИЛЬНО сливал, но не из-за спрэда, а просто чтобы процентов 70-80 сделок закрывались стабильно в минусе. Но это не должен быть пипсатор! Допустим средний убыток 300-500 пунктов на пятизнаке. Поймете что это так же точно сложно как и написать прибыльный советник.
 

А Вы можете добавить функцию реверса в советник Forex Envy? Я добавил, но он не хочет торговать. Советник использует сет файлы. Возможно это ка то связано. Посмотрите пожалуйста, что можно сделать.

Подробнее можно почитать здесь http://tradelikeapro.ru/forex-envy/ и скачать сет файлы. Я не могу их добавить.

/* Декомпил удален Vinin */

 

А смысл просто переворачиваться? По моему правильней будет переворот например по правилу если профит фактор серии сделок <-1 и это параметр не является случайным, тогда делаем переворот. Результаты как бы имеются (нет времени закончить) и это наверно статью писать надо уже отдельную. На мой взгляд такой момент весьма интересен. Как вариант думаю бы подошло для сеток ордеров когда сетка торгует на пробой и результат ПФ становится <-1 у сетки меняются местами стопы и профиты и типы ордеров на противоположные. Проблема в подборе оптимального периода сделок. Тут я придумал 2 варианта.

а) тупо по статистике смотреть когда в большинстве случаев для данного периода сделок изменение ПФ является критичным.

б) глубоко не доработанный вариант. искать периоды ПФ в которых тот или иной результат не являтся случайным, те в скольки случаях из всех переворот был оправдан на данном интервале. (тут надо бы по больше теории вероятности, беда в том что я не шибко силен в этом, а с прозьбой помоч был послан на..).

и еще витает мысль тк сам граффик ПФ по сути аналогичен машкам и будет весьма опаздывать, то необходимо смотреть среднюю длительность +1 ПФ и -1 и скажем если ПФ с +1 длится 70 сделок и это не является частым результатом (напрмиер только 30% случаев достигли 70 сделок с ПФ>1) то уже заранее переворачиваемся.

 
Skydiver:

А смысл просто переворачиваться? По моему правильней будет переворот например по правилу если профит фактор серии сделок <-1 и это параметр не является случайным, тогда делаем переворот.

Вот тут замечен более глубокий анализ проблемы.

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

Когда-то писал вводные идеи на переворот советника - LorDen, посмотри, может быть всё-таки немного копнуть дальше спредов стоит... Усложнять\редактировать не стал, этой темы на самом деле на статью хватит, да и обсуждали это уже где-нибудь наверняка.

Прежде чем перевернуть советника, точнее алгоритм, следует очень внимательно изучить связь между последовательными заходами в рынок. Скорее всего проблема в том, что после переворота сделки открываются иные.
К примеру, в исходном советнике есть трейлинг стопы - тогда окажется что в перевёртыше сделки закрываются по статическому ТП раньше чем закрылись бы по СЛ в исходном, и соответственно следующие сделки могут быть другие, появляются лишние, которые чем дальше тем больше нарушают исходный ряд сделок. Короче, нарушается причинно-следственная связь.

Проще всего сделать что-то вроде копира, то есть советник с исходным алгоритмом работает в штатном сливном режиме на демо с огромным депо, а копир - переворачивает его сделки на реале. Не факт что демо всегда коррелируетс с реалом, но всё же.

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

 
LorDen:

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

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

Этот код меняет все ордера, включая отложенные. И как основная функция 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 и продолжаем наслаждаться сливом, т.к. на перевороте, как показывает практика, эксперты все равно сливают или не приносят прибыль.

Здравствуйте. Вы так хорошо-понятно все написали, у меня получилось хотя в код я заглянула впервые. Нет ли у вас такого-же шаблона для вставки функции выставления стоплосса в советник?
 
Наверно, стоит выставить в Маркет! Может, там вам будет какой-нибуль профит?!
 

Переверните мне этот советник пожалуйста, а то сливает, сволочь, как ни переворачивай, а ведь идеальный сливатор при перевороте должен стать ГРААЛЕМ

void start()
{
  if(OrdersTotal()==0)
{
  OrderSend(NULL,OP_BUY,0.1,Ask,3,0,0,"",0,0,Green);
  OrderSend(NULL,OP_SELL,0.1,Bid,3,0,0,"",0,0,Pink);
Sleep(3000);
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), 3,Red);
}
}
}
 
evillive:

Переверните мне этот советник пожалуйста, а то сливает, сволочь, как ни переворачивай, а ведь идеальный сливатор при перевороте должен стать ГРААЛЕМ


Попробуйте его перевернуть слева направо! ;)
 
borilunad:

Попробуйте его перевернуть слева направо! ;)

Компилятор текст на иврите на захотел понять )))
Причина обращения: