#property strict
#property description "Советник выставляет сети и помогает собирать профит с любого движения"
/*Советник сетевой помощник
Кнопки советника
"Buy Stop" - открывать сеть отложенных стоп ордеров на продажу
"Sell Stop" - открывать сеть отложенных стоп ордеров на покупку
"Buy Limit"- открывать сеть отложенных лимит ордеров на продажу
"Sell Limit" - открывать сеть отложенных лимит ордеров на покупку
"Close Buy" - кнопка закрытия всей сети и всех открытых позиций на покупку
"Close Sell" - кнопка закрытия всей сети и всех открытых позиций на продажу
"Close" - кнопка закрытия всей сети и всех открытых позиций
"Tral Profit" - кнопка при нажатии которой советник будет тралить профит всех позиций начиная от TralStart
В настройках советника
MaxBuy -максимальное кол-во Buy
MaxSell -максимальное кол-во Sell
OrdersBuyStop - кол-во ордеров сети BuyStop
OrdersSellStop - кол-во ордеров сети SellStop
OrdersBuyLimit - кол-во ордеров сети BuyLimit
OrdersSellLimit - кол-во ордеров сети SellLimit
StepBuyStop - шаг ордеров сети BuyStop
StepSellStop - шаг ордеров сети SellStop
StepBuyLimit - шаг ордеров сети BuyLimit
StepSellLimit - шаг ордеров сети SellLimit
Lot - лот первого ордера от цены, далее по формуле
LotPlus - добавка к начальному лоту
K_Lot - Коэффициент увеличения
CloseProfitB - закрываем buy при достижении профита
CloseProfitS - закрываем sell при достижении профита
ProfitClose - закрываем все при достижении профита
TralStart - старт трала при достижении профита
TralClose - закрывать все после отката на
slippage - проскальзывание
Magic - магик ордеров, если -1 то подхватит все
X - смещение панели по горизонтали
Y - смещение панели по вертикали
TradeOFF - отключение торговли после взятия прибыли
Например
Lot = 0.1
LotPlus = 0.1
первый лот 0.1
второй 0.1+0.1=0.2
третий 0.2+0.1=0.3
четвёртый 0.3+0.1=0.4
---------------------
FirstLevel - Растояние от цены до первого ордера ( если 0 то открывается с уровнем стоплевел )
========================================
Фиксация прибыли 2-ва способа:
ProfitClose - прибыль в валюте депозита ( например ставим 100$при достижении общей прибыли сетки 100$ , она закроется)
TralStart - профит для старта трала в валюте депозита например 50$
TralClose - закрывается при снижении прибыли например те же 20$
Прибыль достигла 50, включился трал, прибыль продолжила расти до 60, потом откатилась на 20 и все закрылоссь при 40$ профита
отложки удаляются, выскакивает алерт с вопросом продолжить работу? При ответе О К - выставляется снова.
=========================================
Особенности закрытия ордеров
Сначала советник пытается закрыть все ордера встречно, потом закрываем рыночные, начиная с самых больших объемов а потом отложки..
extern int MaxBuy = 50; //максимальное кол-во Buy
extern int MaxSell = 50; //максимальное кол-во Sell
extern int OrdersBuyStop = 5; //кол-во ордеров сети BuyStop
extern int OrdersSellStop = 5; //кол-во ордеров сети SellStop
extern int OrdersBuyLimit = 5; //кол-во ордеров сети BuyLimit
extern int OrdersSellLimit = 5; //кол-во ордеров сети SellLimit
extern string _="";
extern int FirstLevelStop = 50; //Растояние от цены до первого Stop ордера ( если 0 то открывается с уровнем стоплевел )
extern int StepBuyStop = 100; //шаг ордеров сети BuyStop
extern int StepSellStop = 100; //шаг ордеров сети SellStop
extern int FirstLevelLimit = 110; //Растояние от цены до первого Limit ордера ( если 0 то открывается с уровнем стоплевел )
extern int StepBuyLimit = 100; //шаг ордеров сети BuyLimit
extern int StepSellLimit = 100; //шаг ордеров сети SellLimit
extern string __="";
extern double Lot = 0.10; //лот первого ордера от цены, далее по формуле
extern double LotPlus = 0.00; //добавка к начальному лоту
extern double K_Lot = 1.00; //Коэффициент увеличения
extern string ___="";
extern double CloseProfitB = 10; //закрываем buy при достижении профита
extern double CloseProfitS = 10; //закрываем sell при достижении профита
extern double ProfitClose = 10; //закрываем все при достижении профита
extern double TralStart = 10; //старт трала при достижении профита
extern double TralClose = 5; //закрывать все после отката на
extern int slippage = 5; // проскальзывание
extern int Magic = -1; //магик ордеров, если -1 то подхватит все
extern int X = 0; //смещение панели по горизонтали
extern int Y = 25; //смещение панели по вертикали
extern bool TradeOFF = true; //отключение торговли после взятия прибыли
extern bool CloseByON = true; //использовать встречное закрытие
extern bool AllSymbols = True; // Управлять всеми лимитными ордерами
extern int TrailingStop = 120; // Фиксированный размер трала
extern int TrailingStep = 20; // Шаг трала
extern bool UseSound = True; // Использовать звуковой сигнал
extern bool ShowComment = True; // Показывать комментарий
extern color clModifyBuy = Aqua; // Цвет значка модификации покупки
extern color clModifySell = Tomato; // Цвет значка модификации продажи
bool gbNoInit = False; // Флаг неудачной инициализации
string SoundSuccess = "ok.wav"; // Звук успеха
string SoundError = "timeout.wav"; // Звук ошибки
int NumberOfTry = 3; // Количество торговых попыток
#include <stdlib.mqh> // Стандартная библиотека
double STOPLEVEL;
double StopProfit=0;
string val,GV_kn_BS,GV_kn_SS,GV_kn_BL,GV_kn_SL,GV_kn_TrP,GV_kn_CBA,GV_kn_CSA,GV_kn_CA;
bool D,LANGUAGE;
int OnInit()
{
// код доступен только после оплаты
}
string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("BuyLimit");
case OP_SELLLIMIT: return("SellLimit");
case OP_BUYSTOP : return("BuyStop");
case OP_SELLSTOP : return("SellStop");
default : return("Unknown Operation");
}
}
color IIFc(bool condition, color ifTrue, color ifFalse) {
if (condition) return(ifTrue); else return(ifFalse);
}
string IIFs(bool condition, string ifTrue, string ifFalse) {
if (condition) return(ifTrue); else return(ifFalse);
}
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
bool fm;
color cl=IIFc(OrderType()==OP_BUY
|| OrderType()==OP_BUYLIMIT
|| OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell);
double op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice();
if (sl<0 ) sl=OrderStopLoss();
if (tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice() , dg);
os=NormalizeDouble(OrderStopLoss() , dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
if (pp!=op || sl!=os || tp!=ot) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
if (fm) {
if (UseSound) PlaySound(SoundSuccess); break;
} else {
er=GetLastError();
if (UseSound) PlaySound(SoundError);
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(),
" op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);
Sleep(1000*10);
}
}
}
}
void TrailingOrders() {
double di, pa, pb, pp, sl, tp;
pp=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_SELLLIMIT) {
pa=MarketInfo(OrderSymbol(), MODE_BID);
if (OrderOpenPrice()-pa>(TrailingStop+TrailingStep-1)*pp) {
di=OrderOpenPrice()-pa-TrailingStop*pp;
if (OrderStopLoss() >0) sl=OrderStopLoss() -di; else sl=0;
if (OrderTakeProfit()>0) tp=OrderTakeProfit()-di; else tp=0;
ModifyOrder(pa+TrailingStop*pp, sl, tp);
}
}
if (OrderType()==OP_BUYLIMIT) {
pb=MarketInfo(OrderSymbol(), MODE_ASK);
if (pb-OrderOpenPrice()>(TrailingStop+TrailingStep-1)*pp) {
di=pb-OrderOpenPrice()-TrailingStop*pp;
if (OrderStopLoss() >0) sl=OrderStopLoss() +di; else sl=0;
if (OrderTakeProfit()>0) tp=OrderTakeProfit()+di; else tp=0;
ModifyOrder(pb-TrailingStop*pp, sl, tp);
}
}
}
void OnTick() {
// код доступен только после оплаты
}
void OnTimer()
{
if(!IsTradeAllowed()) return;
STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
OrdersBuyStop=(int)StringToInteger(ObjectGetString(0,"cm OrdersBuyStop",OBJPROP_TEXT));
OrdersSellStop=(int)StringToInteger(ObjectGetString(0,"cm OrdersSellStop",OBJPROP_TEXT));
OrdersBuyLimit=(int)StringToInteger(ObjectGetString(0,"cm OrdersBuyLimit",OBJPROP_TEXT));
OrdersSellLimit=(int)StringToInteger(ObjectGetString(0,"cm OrdersSellLimit",OBJPROP_TEXT));
FirstLevelStop=(int)StringToInteger(ObjectGetString(0,"cm FirstLevelStop",OBJPROP_TEXT));
FirstLevelLimit=(int)StringToInteger(ObjectGetString(0,"cm FirstLevelLimit",OBJPROP_TEXT));
StepBuyStop=(int)StringToInteger(ObjectGetString(0,"cm StepBuyStop",OBJPROP_TEXT));
StepSellStop=(int)StringToInteger(ObjectGetString(0,"cm StepSellStop",OBJPROP_TEXT));
StepBuyLimit=(int)StringToInteger(ObjectGetString(0,"cm StepBuyLimit",OBJPROP_TEXT));
StepSellLimit=(int)StringToInteger(ObjectGetString(0,"cm StepSellLimit",OBJPROP_TEXT));
CloseProfitB=StringToDouble(ObjectGetString(0,"cm CloseProfitB",OBJPROP_TEXT));
CloseProfitS=StringToDouble(ObjectGetString(0,"cm CloseProfitS",OBJPROP_TEXT));
ProfitClose=StringToDouble(ObjectGetString(0,"cm ProfitClose",OBJPROP_TEXT));
TralStart=StringToDouble(ObjectGetString(0,"cm TralStart",OBJPROP_TEXT));
TralClose=StringToDouble(ObjectGetString(0,"cm TralClose",OBJPROP_TEXT));
Lot=StringToDouble(ObjectGetString(0,"cm Lot",OBJPROP_TEXT));
LotPlus=StringToDouble(ObjectGetString(0,"cm LotPlus",OBJPROP_TEXT));
K_Lot=StringToDouble(ObjectGetString(0,"cm K_Lot",OBJPROP_TEXT));
TradeOFF=ObjectGetInteger(0,"cm off",OBJPROP_STATE);
double OL,OOP,Profit=0,ProfitB=0,ProfitS=0;
double OOPBS=0,OOPSS=0,OOPBL=0,OOPSL=0,OLBS=0,OLSS=0,OLBL=0,OLSL=0;
int OTBS=0,OTSS=0,OTBL=0,OTSL=0;
int Ticket,i,b=0,s=0,bs=0,ss=0,bl=0,sl=0,tip;
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
{
tip = OrderType();
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Profit=OrderProfit()+OrderSwap()+OrderCommission();
Ticket=OrderTicket();
OL=OrderLots();
if(tip==OP_BUY)
{
ProfitB+=Profit;
b++;
}
if(tip==OP_SELL)
{
ProfitS+=Profit;
s++;
}
if(tip==OP_BUYSTOP)
{
if(OOPBS<OOP) {OOPBS=OOP;OTBS=Ticket;OLBS=OL;}
bs++;
}
if(tip==OP_SELLSTOP)
{
if(OOPSS>OOP || OOPSS==0) {OOPSS=OOP;OTSS=Ticket;OLSS=OL;}
ss++;
}
if(tip==OP_BUYLIMIT)
{
if(OOPBL>OOP || OOPBL==0) {OOPBL=OOP;OTBL=Ticket;OLBL=OL;}
bl++;
}
if(tip==OP_SELLLIMIT)
{
if(OOPSL<OOP) {OOPSL=OOP;OTSL=Ticket;OLSL=OL;}
sl++;
}
}
}
}
Profit=ProfitB+ProfitS;
ObjectSetString(0,"cm Close Buy",OBJPROP_TEXT,StringConcatenate("CloseBuy ",DoubleToStr(ProfitB,2)));
ObjectSetString(0,"cm Close Sell",OBJPROP_TEXT,StringConcatenate("CloseSell ",DoubleToStr(ProfitS,2)));
ObjectSetString(0,"cm Close",OBJPROP_TEXT,StringConcatenate("Close ",DoubleToStr(Profit,2)));
ObjectSetInteger(0,"cm Close Buy",OBJPROP_COLOR,Color(ProfitB));
ObjectSetInteger(0,"cm Close Sell",OBJPROP_COLOR,Color(ProfitS));
ObjectSetInteger(0,"cm Close",OBJPROP_COLOR,Color(Profit));
ObjectSetString(0,"cm Buy Stop",OBJPROP_TEXT,StringConcatenate("BuyStop ",bs));
ObjectSetString(0,"cm Sell Stop",OBJPROP_TEXT,StringConcatenate("SellStop ",ss));
ObjectSetString(0,"cm Buy Limit",OBJPROP_TEXT,StringConcatenate("BuyLimit ",bl));
ObjectSetString(0,"cm Sell Limit",OBJPROP_TEXT,StringConcatenate("SellLimit ",sl));
if(ObjectGetInteger(0,"cm Clear",OBJPROP_STATE))
{
ObjectsDeleteAll(0,OBJ_TEXT);
ObjectsDeleteAll(0,"#");
ObjectsDeleteAll(0,OBJ_ARROW);
ObjectsDeleteAll(0,OBJ_TREND);
ObjectSetInteger(0,"cm Clear",OBJPROP_STATE,false);
}
if(ObjectGetInteger(0,"cm Close Buy A",OBJPROP_STATE))
{
GlobalVariableSet(GV_kn_CBA,1);
ObjectSetInteger(0,"cm CloseProfitB",OBJPROP_COLOR,clrRed);
if(b!=0 && ProfitB>=CloseProfitB) ObjectSetInteger(0,"cm Close Buy",OBJPROP_STATE,true);
}
else {ObjectSetInteger(0,"cm CloseProfitB",OBJPROP_COLOR,clrLightGray);GlobalVariableDel(GV_kn_CBA);}
if(ObjectGetInteger(0,"cm Close Buy",OBJPROP_STATE))
{
if(b!=0) if(!CloseAll(OP_BUY)) Print("Error Order Close ",GetLastError());
else
{
if(TradeOFF) ObjectSetInteger(0,"cm Buy Stop",OBJPROP_STATE,false);
if(TradeOFF) ObjectSetInteger(0,"cm Buy Limit",OBJPROP_STATE,false);
ObjectSetInteger(0,"cm Close Buy",OBJPROP_STATE,false);
}
}
if(ObjectGetInteger(0,"cm Close Sell A",OBJPROP_STATE))
{
GlobalVariableSet(GV_kn_CSA,1);
ObjectSetInteger(0,"cm CloseProfitS",OBJPROP_COLOR,clrRed);
if(s!=0 && ProfitS>=CloseProfitS) ObjectSetInteger(0,"cm Close Sell",OBJPROP_STATE,true);
}
else {ObjectSetInteger(0,"cm CloseProfitS",OBJPROP_COLOR,clrLightGray);GlobalVariableDel(GV_kn_CSA);}
if(ObjectGetInteger(0,"cm Close Sell",OBJPROP_STATE))
{
if(s!=0) if(!CloseAll(OP_SELL)) Print("Error Order Close ",GetLastError());
else
{
if(TradeOFF) ObjectSetInteger(0,"cm Sell Stop",OBJPROP_STATE,false);
if(TradeOFF) ObjectSetInteger(0,"cm Sell Limit",OBJPROP_STATE,false);
ObjectSetInteger(0,"cm Close Sell",OBJPROP_STATE,false);
}
}
if(ObjectGetInteger(0,"cm Close A",OBJPROP_STATE))
{
GlobalVariableSet(GV_kn_CA,1);
ObjectSetInteger(0,"cm ProfitClose",OBJPROP_COLOR,clrRed);
if(b+s!=0 && Profit>=ProfitClose) ObjectSetInteger(0,"cm Close",OBJPROP_STATE,true);
}
else {ObjectSetInteger(0,"cm ProfitClose",OBJPROP_COLOR,clrLightGray);GlobalVariableDel(GV_kn_CA);}
if(ObjectGetInteger(0,"cm Close",OBJPROP_STATE))
{
if(s+b!=0) if(!CloseByOrders()) Print("Error Order Close By ",GetLastError());
else
{
if(TradeOFF) ObjectSetInteger(0,"cm Buy Stop",OBJPROP_STATE,false);
if(TradeOFF) ObjectSetInteger(0,"cm Buy Limit",OBJPROP_STATE,false);
if(TradeOFF) ObjectSetInteger(0,"cm Sell Stop",OBJPROP_STATE,false);
if(TradeOFF) ObjectSetInteger(0,"cm Sell Limit",OBJPROP_STATE,falПоказано первые 50% кода (символов: 31782)
Введите ваш email и нажмите кнопку, чтобы перейти к оплате.