Вот нашел у себя от 4 июля 2005 года. Даже забыл уже про него. Я его
уже выкладывал пару раз, не смотря на то, что его трудно назвать
подгонкой, торговать так и не поставил. В нем есть маленькая
недоговороннесть, но она в принципе устранима :)
#property copyright "VG version indicator, expert version Rosh" //---- input parameters extern int ATRperiod=13; extern int Slippage=3; extern double Lots=0.1; extern double K_revers=0.1; extern int ExpertMagicNumber=1019; double price=0.0,dk; int trend,myBars=0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int cnt,ticket,total,mode,totalExpert,CloseResult,i; double value; bool LongOrderExist=false,ShortOrderExist=false,CloseOrderResult; //---- SetTrace(); // Трассировка позиций //************ Проверка позиций советника ****************************** totalExpert=0; total=OrdersTotal(); if (OrdersTotal()>0) { for (cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if ((OrderMagicNumber()==ExpertMagicNumber)&&(Symbol()==OrderSymbol())) { totalExpert++; if (OrderType()==OP_BUY) LongOrderExist=true; if (OrderType()==OP_SELL) ShortOrderExist=true; } } } //************ Проверка позиций советника ****************************** //************ Первичная настройка ************************************** if (price==0.0) { if (Close[31]>Open[31]) { trend=1; dk=iATR(NULL,0,ATRperiod,32); price=Close[31]-dk; } else { trend=-1; dk=iATR(NULL,0,ATRperiod,32); price=Close[31]+dk; } for (int shift=30;shift>0;shift--) { dk=iATR(NULL,0,ATRperiod,shift+1); if (trend > 0) { if (Low[shift] > price) price = Close[shift]; value = price - dk; if (Close[shift] < value) { price = Close[shift]; value = price + dk; trend = -1; } } } if (trend <0) { if (High[shift] < price) price = Close[shift]; value = price + dk; if (Close[shift] > value) { price = Close[shift]; value = price- dk; trend = 1; } } }//if (price==0.0) //************ Первичная настройка ************************************** if (myBars==Bars) return(0); Print("Всего ордеров=",total); myBars=Bars; //************ Отслеживание тренда ************************************** dk=iATR(NULL,0,ATRperiod,1); if (trend > 0) { if (Low[1] > price) price = Close[1]; value = price - dk; if (Close[1] < value) { price = Close[1]; value = price + dk; trend = -1; } } if (trend < 0) { if (High[1] < price) price = Close[1]; value = price + dk; if (Close[1] > value) { price = Close[1]; value = price- dk; trend = 1; } } //************ Отслеживание тренда ************************************** Print("totalExpert=",totalExpert); //************ Выставление первого ордера ******************************* if (totalExpert==0) // выставление первого ордера { if (trend==1) // ордеров нет, тренд восходящий { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0.0,0.0,"buy",ExpertMagicNumber,0,Blue); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } return(0); } if (trend==-1) // ордеров нет, тренд нисходящий { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0.0,0.0,"sell",ExpertMagicNumber,0,Red); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } return(0); } }// if (totalExpert==0) //************ Выставление первого ордера ******************************* //************ Переворот ************************************************ if (totalExpert>0) { if ((LongOrderExist)&&(trend==-1)) { for (i=OrdersTotal()-1;i>=0; i--) // закрываем ордера в Long { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); mode=OrderType(); if (mode==OP_BUY) { Print("Закрываем Long ордеров ",OrdersTotal()); CloseResult=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White); if (CloseOrderResult==false) { Print("OrderClose failed with error #",GetLastError()); return(0); } Sleep(30000); } }//for ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0.0,0.0,"sell",ExpertMagicNumber,0,Red); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } return(0); } if ((ShortOrderExist)&&(trend==1)) { for (i=OrdersTotal()-1;i>=0; i--) // закрываем ордера в Short { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); mode=OrderType(); if (mode==OP_SELL) { Print("Закрываем Short ордеров ",OrdersTotal()); CloseResult=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White); if (CloseOrderResult==false) { Print("OrderClose failed with error #",GetLastError()); return(0); } Sleep(30000); } }//for ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0.0,0.0,"buy",ExpertMagicNumber,0,Blue); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } return(0); } } //************ Переворот ****************************************************** //---- return(0); } //+------------------------------------------------------------------+
Rosh, а эта функция где?
SetTrace(); // Трассировка позиций
Можете ее выбросить. Она никак не связана с алгоритмом торговли, а предназначена только для рисования стрелок при тестировании.
Rosh, спасибо, вижу. Абсолютно по всем моим критериям подходит, кроме одного пункта - последнего ("использование цен только одного ряда (например, только Close, или только Open)").
И еще один вопросик: пытался я его тестировать и даже оптимизировать (часовки, цены открытия), но ни одного положительного результата нет! Может, подскажешь область прибыльности?
И еще один вопросик: пытался я его тестировать и даже оптимизировать (часовки, цены открытия), но ни одного положительного результата нет! Может, подскажешь область прибыльности?
Странно, неужели не совсем тот. Нужно тестить на Евре 4-часах
по ценам открытия. Сейчас поверить не могу, если не тот, поищу
еще раз.
Ага, все-таки дает профит, но в 2004 году. Дальше вроде как сливает.
Ладно, отложим его на потом, а пока я все же надеюсь на новых
кандидатов.
Мое последнее требование - использование цен только одного ряда (например, только Close, или только Open) - остается. Если оно нарушено, я не смогу его тестировать, так как нет нужного инструментария.
Мое последнее требование - использование цен только одного ряда (например, только Close, или только Open) - остается. Если оно нарушено, я не смогу его тестировать, так как нет нужного инструментария.
А какой у вас замысел?
Может вот это подойдет?
http://grailholder.blogspot.com
Пишите, поговорим.
Советую изучить:
http://forum.viac.ru/viewtopic.php?p=68234#68234
Там Rosh выложил пипсовик - просто бомба.
Если бы не черезмерное количество сделок - самый натуральный
грааль.
Я например игрался с ним 3 дня - результаты обалденно-устойчивые.
Но так как я так и не поверил в логику этого алгоритма, пришлось
отправить в утиль.
А чему там верить, Aleksey24? Логика тривиальна, а сама система в долговременном плане не может ничего иного, как сливать или давать такие бешеные
просадки, что мама не горюй. Тестирование системы на 3 днях -
это несерьезно, извини.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
- полный исходный код советника-робота (полного робота!);
- использование только стандартных индюкаторов/осцилл в традиционных "непрерывных" интерпретациях - например, RSI+MACD+Envelopes;
- число таких фильтров - не менее 2-3, а лучше больше;
- никаких каналов, Фиб, уровней поддержки/сопротивления, Зигзагов;
- приличная прибыльность на тестовом периоде порядка нескольких лет;
- не пипсовщик;
- использование цен только одного ряда (например, только Close, или только Open).
Такая беспримерная наглость обусловлена тем, что мне он не нужен для рубки реальной капусты. Я знаю цену таким Граалям: почти все они ничего не стоят. Нужен он мне исключительно как мальчик для садистских экспериментов: я собираюсь прогнать его через собственную жесткую процедуру тестирования. Если окажется, что он ее пройдет с честью, приславший его узнает об этом немного позднее. И, конечно, желательно, чтобы он удовлетворял всем формальным критериям устойчивости, принятым в сообществе.
Вначале была идея использовать для этой цели обычный советник MACD, идущий в стандартной сборке от MQ. В принципе результат не так и плох: на 20 месяцах (EURUSD, часовки) после оптимизации по ценам открытия выходит около 2000 пипсов на 108 сделках. Матожидание сделки - 18 с копейками (лот 0.1), просадка с 1000 депозита - порядка 20%. Неплохо, но все же не настолько, чтобы новичок пищал бы от радости и был готов купить его без нормального тестирования и в виде черного ящика.
Тут есть программеры, которые таких Граалей уже кучу написали или видели. Если вы предоставите такой Грааль, который в форвард-тесте сливает, вы ничего не потеряете. Если есть предложения - пишите на мыло, указанное в моем профиле. Заодно я и поясню подробнее, для чего он на самом деле мне нужен. Спасибо.