а где выходим? по трейлингу?
по тейк профиту, ясно ведь сказано..
но трейлинг-стоп пределать этому советнику не помешает.
а где выходим? по трейлингу?
по тейк профиту, ясно ведь сказано..
но трейлинг-стоп пределать этому советнику не помешает.
TrailingStop в этом советнике есть (trailing) как только прибыль будет больше этого параметра (в п) стоплосс будет передвигаться за ценой в сторону увеличения прибыли.
Дополнительно в советнике есть перевод в безубыток (NoLoss), как только прибыль достигнет значения NoLoss (в п.) стоплосс переместится на цену открытия ордера.
Хороший советник. Скачал, посмотрел и заодно проверил идею пробой канала определенной ширины и высоты.
//+------------------------------------------------------------------+ //|Пробой канала определенной BreakdownLevelChannel.mq4 | //|ширины и высоты Copyright © 2011, Хлыстов Владимир | //|EURUDSD H1 cmillion@narod.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, http://cmillion.narod.ru" #property link "cmillion@narod.ru" //-------------------------------------------------------------------- extern int SL = 1100, //Стоплосс в пунктах TP = 1100, //Тейкпрофит в пунктах NoLoss = 200, //Если 0 то нет установки безубытка trailing = 800, //Если 0 то нет трейлинга Delta = 80, //Выше или ниже экстремумов канала Width = 2000, //Ширина канала risk = 0, //Если 0 то по фиксированному лоту BarsCount = 18; //Количество баров в канале extern double Lot = 1; //используется только при risk = 0 extern bool OpenStop = true; //Выставлять стоп ордера при открытом ордере extern color color_BAR = DarkBlue; //цвет инфо //-------------------------------------------------------------------- double MaxPrice,MinPrice,Sigma; int STOPLEVEL,magic=123321,tip; //-------------------------------------------------------------------- int init() { STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL); if (SL < STOPLEVEL) SL = STOPLEVEL; if (TP < STOPLEVEL) TP = STOPLEVEL; if (NoLoss < STOPLEVEL && NoLoss != 0) NoLoss = STOPLEVEL; if (trailing < STOPLEVEL && trailing != 0) trailing = STOPLEVEL; Comment("Copyright © 2011 cmillion@narod.ru\nУстановленные параметры BreakdownLevelDay "+"\n"+ "Delta " , Delta, "\n", "SL ", SL, "\n", "TP " , TP, "\n", "Lot ", DoubleToStr(Lot,2),"\n", "risk ", risk, "\n", "NoLoss " , NoLoss, "\n", "trailing ", trailing); } //-------------------------------------------------------------------- int start() { if (OpenStop) magic=TimeDay(CurTime()); if (!IsDemo()) {Comment("Демо версия, обратитесь cmillion@narod.ru для разблокировки");return;} //----------------------------------------------------------------- int bay,sel,error; bool BUY=false,SEL=false; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue; tip=OrderType(); if (tip==0) BUY = true; if (tip==1) SEL = true; if (tip==4) bay++; if (tip==5) sel++; } } if ((BUY||SEL)&&(bay!=0||sel!=0)) DelAllStop(); //если есть открытый ордер удаляем стоп ордера if ( BUY||SEL) { if (trailing!=0) TrailingStop(trailing); if (NoLoss!=0) No_Loss(NoLoss); return; //если есть открытый ордер } MaxPrice=High[iHighest(NULL,0,MODE_HIGH,BarsCount,0)]+NormalizeDouble(Delta*Point,Digits); MinPrice=Low[iLowest(NULL,0,MODE_LOW,BarsCount,0)]-NormalizeDouble(Delta*Point,Digits); Sigma = MaxPrice-MinPrice; int expiration=CurTime()+(23-TimeHour(CurTime()))*3600+(60-TimeMinute(CurTime()))*60; //время закрытия стоп ордера double TrPr,StLo; if (risk!=0) Lot = LOT(); if (bay<1 && Sigma<Width*Point) { if (Ask+STOPLEVEL*Point>MaxPrice) MaxPrice = NormalizeDouble(Ask+STOPLEVEL*Point,Digits); if (TP!=0) TrPr = NormalizeDouble(MaxPrice + TP * Point,Digits); if (SL!=0) StLo = NormalizeDouble(MaxPrice - SL * Point,Digits); error=OrderSend(Symbol(),OP_BUYSTOP ,Lot,MaxPrice,3,StLo,TrPr,"BUYSTOP BLD",magic,expiration,Blue); if (error==-1) Alert("Error BUYSTOP ",GetLastError()," ",Symbol()," Lot ",Lot," Price ",MaxPrice," SL ",StLo," TP ",TrPr," expiration ",expiration); } if (sel<1 && Sigma<Width*Point) { if (Bid-STOPLEVEL*Point<MinPrice) MinPrice = NormalizeDouble(Bid-STOPLEVEL*Point,Digits); if (TP!=0) TrPr = NormalizeDouble(MinPrice - TP * Point,Digits); if (SL!=0) StLo = NormalizeDouble(MinPrice + SL * Point,Digits); error=OrderSend(Symbol(),OP_SELLSTOP,Lot,MinPrice,3,StLo,TrPr,"SELLSTOP BLD",magic,expiration,Red ); if (error==-1) Alert("Error SELLSTOP ",GetLastError()," ",Symbol()," Lot ",Lot," Price ",MinPrice," SL ",StLo," TP ",TrPr," expiration ",expiration); } if (bay<1&&sel<1) { ObjectDelete("bar0"); ObjectCreate("bar0", OBJ_RECTANGLE, 0, 0,0, 0,0); ObjectSet ("bar0", OBJPROP_STYLE, STYLE_SOLID); ObjectSet ("bar0", OBJPROP_COLOR, color_BAR); ObjectSet ("bar0", OBJPROP_BACK, true); ObjectSet ("bar0", OBJPROP_TIME1 ,iTime( NULL, 1440, 0)); ObjectSet ("bar0", OBJPROP_PRICE1,MaxPrice); ObjectSet ("bar0", OBJPROP_TIME2 ,CurTime()); ObjectSet ("bar0", OBJPROP_PRICE2,MinPrice); } return(0); } //-------------------------------------------------------------------- void DelAllStop() { int tip; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if (OrderSymbol()!=Symbol()||OrderMagicNumber()!=magic) continue; tip=OrderType(); if (tip==4||tip==5) OrderDelete(OrderTicket()); } } } //-------------------------------------------------------------------- void TrailingStop(int trailing) { double TrPr,StLo; int tip; bool error; color col; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { tip = OrderType(); if (tip<2 && OrderSymbol()==Symbol()) { if (OrderMagicNumber()!=magic) continue; if (tip==0) //Bay { StLo = Bid - trailing*Point; if (StLo > OrderStopLoss() && StLo > OrderOpenPrice()) {error=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(StLo,Digits),OrderTakeProfit(),0,White);Comment("Трейлинг "+OrderTicket());Sleep(500);} } if (tip==1) //Sell { StLo = Ask + trailing*Point; if (StLo < OrderStopLoss() && StLo < OrderOpenPrice()) {error=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(StLo,Digits),OrderTakeProfit(),0,White);Comment("Трейлинг "+OrderTicket());Sleep(500);} } if (error==false && SL!=0) Alert("Error SELLSTOP ",GetLastError()," ",Symbol()," SL ",StLo); }//tip<2 }//OrderSelect }//for } //------------------------------------------------------------------+ double LOT() { double MINLOT = MarketInfo(Symbol(),MODE_MINLOT); double LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/15; if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT); if (LOT<MINLOT) LOT = MINLOT; if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1); return(LOT); } //------------------------------------------------------------------+ void No_Loss(int NoLoss) { double TrPr,StLo; int tip; bool error; color col; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { tip = OrderType(); if (tip<2 && OrderSymbol()==Symbol()) { if (OrderMagicNumber()!=magic) continue; if (tip==0) //Bay { if (OrderStopLoss()>=OrderOpenPrice()) return; StLo = Bid - NoLoss*Point; if (StLo > OrderStopLoss() && StLo > OrderOpenPrice()) {error=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(StLo,Digits),OrderTakeProfit(),0,White);Comment("Трейлинг "+OrderTicket());Sleep(500);} } if (tip==1) //Sell { if (OrderStopLoss()<=OrderOpenPrice()) return; StLo = Ask + NoLoss*Point; if (StLo < OrderStopLoss() && StLo < OrderOpenPrice()) {error=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(StLo,Digits),OrderTakeProfit(),0,White);Comment("Трейлинг "+OrderTicket());Sleep(500);} } if (error==false && SL!=0) Alert("Error SELLSTOP ",GetLastError()," ",Symbol()," SL ",StLo); }//tip<2 }//OrderSelect }//for } //------------------------------------------------------------------+
Действительно неплохой советник. Посмотрел на EURUSD H1.
При определённых параметрах даже с лотом 0.1 делает больше 200% за прошлый год. И это без оптимизации.
Есть одно небольшое предложение: сделайте закрытие ордеров с усреднением для случая наличия убыточных.
Должно неплохо сработать. Общую прибыль усреднения во внешние переменные.
Успехов!
демо версия?
Serj_Che:
Зачем код выложил? Где график тестирования красивый?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Советник "Пробой дня":
Author: Vladimir Khlystov