Группа "Стол заказов MQL"

Рейтинг 2151



РЕКОМЕНДУЮ



Добавить лимитки в советник

Добрый день уважаемые программисты. Прошу Вашей помощи. Нашел на просторах интернета советник торгующий стоповыми ордерами. Просьба добавить ему функцию смены на торговлю лимитными ордерами с теми же условиями. Зараннее БЛАГОДАРЕН. С уважением.

extern int Stoploss = 10,
Takeprofit = 50;
extern int TrailingStop = 10;
extern int TrailingStart = 0;
extern int StepTrall = 2;
extern int NoLoss = 0,
MinProfitNoLoss = 0;
extern int Magic = 77;
extern int Step = 10;
extern double Lot = 0.1;
extern int TimeModify = 30;
extern int slippage = 30;
extern int TimeStart = 0,
TimeEnd = 24;
//--------------------------------------------------------------------
datetime TimeBarB,TimeBarS;
//--------------------------------------------------------------------
int OnInit()
{
int STOPLEVEL=(int)MarketInfo(Symbol(),MODE_STOPLEVEL);
if (Stoploss!=0 && Stoploss<STOPLEVEL) Stoploss=STOPLEVEL;
if (Takeprofit!=0 && Takeprofit<STOPLEVEL) Takeprofit=STOPLEVEL;
if (TrailingStop!=0 && TrailingStop<STOPLEVEL) TrailingStop=STOPLEVEL;
if (NoLoss!=0 && NoLoss<STOPLEVEL) NoLoss=STOPLEVEL;
if (Step!=0 && Step<STOPLEVEL) Step=STOPLEVEL;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTick()
{
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
double OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
int b=0,s=0,TicketB=0,TicketS=0,OT;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
OT = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
if (OT==OP_BUY)
{
b++;
if (OSL<OOP && NoLoss!=0 && (Bid — OOP)/Point >= NoLoss)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits);
if (StLo > OSL && StLo <= NormalizeDouble(Bid — STOPLEVEL * Point,Digits)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid — OOP)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Bid — TrailingStop*Point,Digits);
if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
}
if (SL > OSL)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print(«Error »,GetLastError()," Order Modify Buy SL ",OSL,"->",SL);
else Print(«Order Buy Modify SL »,OSL,"->",SL);
}
}
if (OT==OP_SELL)
{
s++;
if ((OSL>OOP || OSL==0) && NoLoss!=0 && (OOP — Ask)/Point >= NoLoss)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits);
if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP — Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
}
if ((SL < OSL || OSL==0) && SL!=0)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print(«Error »,GetLastError()," Order Modify Sell SL ",OSL,"->",SL);
else Print(«Order Sell Modify SL »,OSL,"->",SL);
}
}
if (OT==OP_BUYSTOP) {PriceB=OOP; TicketB=OrderTicket();}
if (OT==OP_SELLSTOP) {PriceS=OOP; TicketS=OrderTicket();}
}
}
}
if (b>0 && TicketS>0) if (!OrderDelete(TicketS)) return;
if (s>0 && TicketB>0) if (!OrderDelete(TicketB)) return;
if (b+s>0) return;
int TekHour = Hour();
bool Trade;
if ( TimeStart < TimeEnd && TekHour >= TimeStart && TekHour < TimeEnd ) Trade=true;
else
{
if ( TimeStart > TimeEnd && (TekHour >= TimeStart || TekHour < TimeEnd)) Trade=true; //торговля ночью
else Trade=false;
}
if (!Trade)
{
if (TicketS>0) if (!OrderDelete(TicketS)) return;
if (TicketB>0) if (!OrderDelete(TicketB)) return;
return;
}
double price=0;
if (b+TicketB==0)
{
price = NormalizeDouble(Ask+Step * Point,Digits);
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(price — Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(price + Takeprofit * Point,Digits); else TP=0;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,price,slippage,SL,TP,«news»,Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
}
if (s+TicketS==0)
{
price=NormalizeDouble(Bid — Step * Point,Digits);
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(price + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(price — Takeprofit * Point,Digits); else TP=0;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,price,slippage,SL,TP,«news»,Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
}
if (TicketB!=0)
{
price = NormalizeDouble(Ask+Step * Point,Digits);
if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(price-PriceB)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(price — Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(price + Takeprofit * Point,Digits); else TP=0;
if (OrderModify(TicketB,price,SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
}
}
if (TicketS!=0)
{
price=NormalizeDouble(Bid — Step * Point,Digits);
if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(price-PriceS)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(price + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(price — Takeprofit * Point,Digits); else TP=0;
if (OrderModify(TicketS,price,SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
}
}
}
  • 0
  • Просмотров: 1383
  • 30 ноября 2020, 00:03
  • Lotos017
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Вынести цвета стрелок в буфер
Следующая запись в группе  
Доработать сов
25 ноября 2020
30 ноября 2020

Брокер для ваших роботов, 15 лет на рынке

Комментарии (7)

+
0
опишите тз целиком, напишу
avatar

  35  AM2 Сообщений: 16426 - Андрей

  • 30 ноября 2020, 20:02
+
0
Добрый день.
Советник торгует на скачках рынка, при этом не использует никакие индикаторы.
Идея советника заключается в том, что лимитные ордера дискретно времени перемещаются на заданном расстоянии от текущей цены.
Если цена достаточно резко поползла в одну сторону, то советник просто не успевает переместить ордер и он становится рыночным. А встречный лимитный ордер закрывается.
Далее включается тралл ордера.
extern int Stoploss = 10, //стоплосс, если 0 то не изменяется
Takeprofit = 50; //тейкпрофит, если 0 то не изменяется
extern int TrailingStop = 10; //длинна тралла, если 0 то нет тралла
extern int TrailingStart = 0; //когда включать тралл, например после достижения 40 п прибыл
extern int StepTrall = 2; //шаг тралла — перемещать стоплосс не ближе чем StepTrall
extern int NoLoss = 0, //перевод в безубыток при заданном кол-ве пунктов прибыли, если 0 то нет перевода в безубыток
MinProfitNoLoss = 0; //минимальная прибыль при переводе вбезубыток
extern int Magic = 77; //магик
extern int Step = 10; //расстояние от цены
extern double Lot = 0.1;
extern int TimeModify = 30; //кол-во секунд раньше которого запрещено изменять ордер
extern int slippage = 30; //Максимально допустимое отклонение цены для рыночных ордеров (ордеров на покупку или продажу).
avatar

  5  Lotos017 Автор Сообщений: 70

  • 8 декабря 2020, 13:38
+
0
С новым годом. Написал ТЗ, получиться такое реализовать?
avatar

  5  Lotos017 Автор Сообщений: 70

  • 2 января 2021, 17:42
+
0
Это советник Владимира хлыстова.Зайдите на форекссистемс в раздел Больничка и попросите его исправить.
avatar

  20  alex30774 Сообщений: 770

  • 30 ноября 2020, 20:29
+
0
Замените в этих строчках и все
(OrderSend(Symbol(),OP_BUYSTOP,Lot,price,slippage,SL,TP,«news»,Magic,0,CLR_NONE)!=-1)--SellLimit

(OrderSend(Symbol(),OP_SELLSTOP,Lot,price,slippage,SL,TP,«news»,Magic,0,CLR_NONE)!=-1)--BuyLimit
avatar

  9  Servir Сообщений: 84

  • 3 декабря 2020, 13:06
+
0
Спасибо огромное.Заменить на Ваши строчки? Или заменить название ордера.
Редактирован: 6 декабря 2020, 18:44
avatar

  5  Lotos017 Автор Сообщений: 70

  • 6 декабря 2020, 17:49
+
0
Заменил и так и сяк, сов вообще перестал работать
avatar

  5  Lotos017 Автор Сообщений: 70

  • 7 декабря 2020, 03:54

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий