Исходный код · ID 3603
!!!9 Чудо Света.mq4
Вы автор или правообладатель?
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «!!!9 Чудо Света.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Поиск по коду файла
#property version "9.00"
#property strict
#property description "Советник для любого индикатора"
#property description "Советник работает бесплатно в тестере, на всех демо счетах и на реальных счетах с депозитом до 100 usd. На более крупные депозиты можно купить советник без ограничений."
/*1) при определенном % прибыли что бы он выставлял без убыток и тралил в % по нарастающему %?.
True/false
2) Доливал позицию на свободную освободившеюся маржу
True /false
3)Открывал по сигналу сделку и закрывал по сигналу сделку
True /false
.4)Фиксация прибыли в % ограничение потерь в %*/
enum TYPE_D
{
MULT, // геометрическая прогрессия
SUMM // арифмитическая прогрессия
};
enum type_time
{
en_time, // разрешить торговлю
dis_time // запретить торговлю
};
enum type_lot
{
balance, // баланса
profit, // профита
standard // статика
};
enum doliv_lot
{
koef, // умножать на коэффициент
fix // фиксированный лот
};
input int iMaxOneDirection = 1000; //макс. в одном направлении
extern string INDICATOR1 = "HGI_v16.09"; //индикатор буферов #1
extern int Buffer_1_BUY1 = 0; //номер буфера на покупку
extern int Buffer_1_SELL1 = 1; //номер буфера на продажу
extern int SignalBar_11 = 1; //бар на котором ждем сигнал (0- текущий 1 - прошлый)
extern string ____1 = "";//___
extern string INDICATOR2 = ""; //индикатор буферов #2
extern int Buffer_1_BUY2 = 2; //номер буфера на покупку
extern int Buffer_1_SELL2 = 3; //номер буфера на продажу
extern int SignalBar_12 = 1; //бар на котором ждем сигнал (0- текущий 1 - прошлый)
extern string ____2 = "";//___
extern string INDICATOR3 = ""; //индикатор буферов #3
extern int Buffer_1_BUY3 = 0; //номер буфера на покупку
extern int Buffer_1_SELL3 = 1; //номер буфера на продажу
extern int SignalBar_13 = 1; //бар на котором ждем сигнал (0- текущий 1 - прошлый)
extern string ____3 = "";//___
extern string INDICATOR4 = ""; //индикатор буферов #4
extern int Buffer_1_BUY4 = 0; //номер буфера на покупку
extern int Buffer_1_SELL4 = 1; //номер буфера на продажу
extern int SignalBar_14 = 1; //бар на котором ждем сигнал (0- текущий 1 - прошлый)
extern string ____4 = "";//___
extern string INDICATOR5 = ""; //индикатор буферов #5
extern int Buffer_1_BUY5 = 0; //номер буфера на покупку
extern int Buffer_1_SELL5 = 1; //номер буфера на продажу
extern int SignalBar_15 = 1; //бар на котором ждем сигнал (0- текущий 1 - прошлый)
extern string ____5 = "";//___
extern string txt_3 = "______ФИЛЬТРЫ ВРЕМЕНИ_______";//.
extern type_time time_type = en_time; // В указаные ниже периоды...
extern string hour_filtr = ""; // Периоды суток формата ЧЧ:ММ-ЧЧ:ММ (если пусто, то фильтр откл.)
extern string ____6 = "";//___
extern bool Adding = true; //Доливал позицию на свободную освободившеюся маржу
extern bool StepType = true; //Тип доливки (true - пункты, false - % от баланса)
extern int Step = 30; //шаг доливки (% от баланса)
extern int Step1 = 100; //шаг доливки ($ от прибыли)
extern TYPE_D d_type = SUMM; //тип шага доливки
extern string _____ = "";
extern type_lot lot_type = standard; //Расчет лота от ...
extern double Lot = 0.1; //лот в %
extern doliv_lot lot_doliv = koef; //Расчет лота доливки
extern double koef_lot = 0.4; //Значение для расчета лота доливки (коэфф. или фикс.)
extern string ______ = "";
extern bool CloseRevers = false ; //закрывать ордера при встречном сигнале
extern double NoLossStart = 0; //безубыток в % от Баланса (0- откл)
extern double MinProfitNoLoss = 0; //минимальная прибыль безубытка в валюте депозита
extern double ProfitTral = 0; //прибыль в % от Баланса при котором стартует трал (0- откл)
extern double TralStop = 0; //откат прибыли в % от максимальной
extern string _______ = "";
extern double ProfClose = 0; //прибыль в % от Баланса при которой закрываем все сделки (0- откл)
extern double LossClose = 0; //убыток в % от Баланса при котором закрываем все сделки (0- откл)
extern int TP = 0;
extern int SL = 0;
extern int Bezubytik_Start = 200;
extern int Trailing_Stop = 200;
extern int Trailing_Step = 10;
extern string ________ = "";
extern int slippage = 0; // проскальзывание
extern int Magic = 12345;
int Orders = 1000; //максимальное кол-во открытых позиций
extern bool AlertON = true; //алерт при появлении сигнала на открытие позиции
input string s01 = "-----"; //Отложенные ордера
input color iBuyColor = clrLime; //Цвет Buy
input color iSellColor = clrRed; //Цвет Sell
input ENUM_LINE_STYLE iLineStyle = STYLE_DASH; //Стиль линии
input int iLineWidth = 1; //Толщина
datetime TimeBar;
double STOPLEVEL;
string val;
double ProfitTrallStart=0;
bool Trall=false;
bool NoLoss=false;
int step_dolivka = 0;
int step_dolivka1 = Step1;
ushort u_sep; // код символа разделителя
string result[];
int k;
double _lot;
int CountBuy;
int CountSell;
int OnInit()
{
// код доступен только после оплаты
}
void OnTick()
{
// код доступен только после оплаты
}
Comment(txt,"\nProfit = ",DoubleToString(Profit,2)," (",DoubleToString(((Profit/AB)*100),1),"%)",
"\nBalance = ",DoubleToString(AB,2),
"\nEquity = ",DoubleToString(AccountEquity(),2),
"\nFreeMargin = ",DoubleToString(AccountFreeMargin(),2),
"\n",IntegerToString(b)," buy ",IntegerToString(s)," sell",
"\n",DoubleToStr(lot_buy,2)," lots buy",
"\n",DoubleToStr(lot_sell,2)," lots sell");
if(!IsNewOrderAllowed()) return;
if(S1!=0 && !timetrade()) {S1 = 0; TimeBar=Time[0];}
if ((S1>0 && CountBuy < iMaxOneDirection) || (Adding && ProfitB>0 && b>0))
{
if (CloseRevers && s>0)
{
if (AlertON) Alert("Закрытие SELL на обратном сигнале ");
CLOSEORDER(OP_SELL);
_lot = LOT();
step_dolivka = 0;
}
if(StepType)
{
step_dolivka1 = Step1 * OrdersTotal();
if (step_dolivka1 == 0)
step_dolivka1 = Step1;
if (b<Orders && (ProfitB)>= step_dolivka1)
{
if (AlertON) Alert(Symbol()," Сигнал на доливку BUY");
if (lot_doliv==koef) _lot*=koef_lot;
else _lot=koef_lot;
_lot = CheckVolumeValue(_lot);
if(SendOrder(OP_BUY, _lot, NormalizeDouble(Ask,Digits))) {return;}
}
}
else
if (b<Orders && (ProfitB+AB)>=calc_step(step_dolivka))
{
if (AlertON) Alert(Symbol()," Сигнал на доливку BUY");
if (lot_doliv==koef) _lot*=koef_lot;
else _lot=koef_lot;
_lot = CheckVolumeValue(_lot);
if(SendOrder(OP_BUY, _lot, NormalizeDouble(Ask,Digits))) {step_dolivka++; return;}
}
if (b<Orders && S1>0 && TimeBar!=Time[0])
{
CountBuy++;
CountSell = 0;
if (AlertON) Alert(Symbol()," Сигнал от индикатора на открытие BUY");
_lot = LOT();
TimeBar=Time[0];
if(SendOrder(OP_BUY, _lot, NormalizeDouble(Ask,Digits))) return;
}
}
if ((S1<0 && CountSell < iMaxOneDirection) || (Adding && ProfitS>0 && s>0))
{
if (CloseRevers && b>0)
{
if (AlertON) Alert("Закрытие BUY на обратном сигнале ");
CLOSEORDER(OP_BUY);
_lot = LOT();
step_dolivka = 0;
}
if(StepType)
{
step_dolivka1 = Step1 * OrdersTotal();
if (step_dolivka1 == 0)
step_dolivka1 = Step1;
if (s<Orders && (ProfitS)>=step_dolivka1)
{
if (AlertON) Alert(Symbol()," Сигнал на доливку SELL");
if (lot_doliv==koef) _lot*=koef_lot;
else _lot=koef_lot;
_lot = CheckVolumeValue(_lot);
if(SendOrder(OP_SELL, _lot, NormalizeDouble(Bid,Digits))) {return;}
}
}
else
if (s<Orders && (ProfitS+AB)>=calc_step(step_dolivka))
{
if (AlertON) Alert(Symbol()," Сигнал на доливку SELL");
if (lot_doliv==koef) _lot*=koef_lot;
else _lot=koef_lot;
_lot = CheckVolumeValue(_lot);
if(SendOrder(OP_SELL, _lot, NormalizeDouble(Bid,Digits))) {step_dolivka++; return;}
}
if (s<Orders && S1<0 && TimeBar!=Time[0])
{
CountSell++;
CountBuy = 0;
if (AlertON) Alert(Symbol()," Сигнал от индикатора на открытие SELL");
_lot = LOT();
TimeBar=Time[0];
if(SendOrder(OP_SELL, _lot, NormalizeDouble(Bid,Digits))) return;
}
}
}
double FirstOrderOpenPrice(int type, int mn, string sym)
{
datetime time=TimeCurrent();
int i;
double profit = -1;
for(i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if( OrderType() == type && OrderSymbol()==sym && OrderMagicNumber()==mn)
{
if(OrderOpenTime() < time)
{
time=OrderOpenTime();
profit= OrderOpenPrice();
}
}
}
}
return(profit);
}
bool timetrade()
{
if(k<1) return(true);
int index_hour;
datetime start_time, end_time;
for(index_hour=0; index_hour<k; index_hour++)
{
start_time = StringToTime(TimeToString(TimeCurrent(),TIME_DATE)+" "+StringSubstr(result[index_hour],0,5));
end_time = StringToTime(TimeToString(TimeCurrent(),TIME_DATE)+" "+StringSubstr(result[index_hour],6,5));
if(time_type==0) //если разрешить
{
if( TimeCurrent()>=start_time && TimeCurrent()<=end_time ) return(true); else return(false);
}
if(time_type==1) //если запретить
{
if( TimeCurrent()>=start_time && TimeCurrent()<=end_time ) return(false); else return(true);
}
}
return(false);
}
double calc_step(int st)
{
double calc = AccountBalance();
for(int i=0; i<=st; i++)
{
if(d_type==SUMM) calc+=(AccountBalance()*Step/100);
else calc+=(calc*Step/100);
}
return(NormalizeDouble(calc,2));
}
bool SendOrder(int tip, double lots, double price, double sl=0, double tp=0)
{
if (tip<2)
{
if (AccountFreeMarginCheck(Symbol(),tip,lots)<0)
{
Alert("Недостаточно средств");
return(false);
}
}
double tmp_tp = 0.0;
double tmp_sl = 0.0;
for (int i=0; i<10; i++)
{
if( SL > 0)
{
if( tip == OP_BUY )
{
tmp_sl = 0.0;
if( SL > 0 )
{
tmp_sl = FirstOrderOpenPrice( OP_BUY, Magic, Symbol());
if( tmp_sl > 0 )
tmp_sl = NormalizeDouble( tmp_sl - SL*Point, Digits);
else
tmp_sl = NormalizeDouble( Bid - SL*Point, Digits);
}
}
if( tip == OP_SELL )
{
tmp_sl = 0.0;
if( SL > 0 )
{
tmp_sl = FirstOrderOpenPrice( OP_SELL, Magic, Symbol());
if( tmp_sl > 0 )
tmp_sl = NormalizeDouble( tmp_sl + SL*Point, Digits);
else
tmp_sl = NormalizeDouble( Ask + SL*Point, Digits);
}
}
}
if (OrderSend(Symbol(),tip, lots,price,slippage,tmp_sl,0.0,NULL,Magic,0,clrNONE)!=-1) return(true);
Alert(" попытка ",i," Ошибка открытия ордера ",Strtip(tip)," <<",Error(GetLastError()),">> lot=",lots," pr=",price," sl=",sl," tp=",tp);
Sleep(500);
RefreshRates();
if (IsStopped()) return(false);
}
return(false);
}
string StrPer(int per)
{
if (per == PERIOD_CURRENT) per=Period();
if (per == PERIOD_M1) return("M1");
if (per == PERIOD_M5) return("M5");
if (per == PERIOD_M15) return("M15");
if (per == PERIOD_M30) return("M30");
if (per == PERIOD_H1) return("H1");
if (per == PERIOD_H4) return("H4");
if (per == PERIOD_D1) return("D1");
if (per == PERIOD_W1) return("W1");
if (per == PERIOD_MN1) return("MN1");
return("ошибка периода");
}
string Strtip(int tip)
{
switch(tip)
{
case OP_BUY:
return("BUY");
case OP_SELL:
return("SELL");
case OP_BUYSTOP:
return("BUYSTOP");
case OP_SELLSTOP:
return("SELLSTOP");
case OP_BUYLIMIT:
return("BUYLIMIT");
case OP_SELLLIMIT:
return("SELLLIMIT");
}
return("error");
}
bool CLOSEORDER(int ord=-1)
{
bool error=true;
int j,err,nn=0,OT,OMN;
while (!IsStopped())
{
for (j = OrdersTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS))
{
OMN = OrderMagicNumber();
if (OrderSymbol() == Symbol() && OMN == Magic)
{
OT = OrderType();
if (OT==OP_BUY && (ord == OT || ord == -1))
{
error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
}
if (OT==OP_SELL && (ord == OT || ord == -1))
{
error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
}
if (!error)
{
err = GetLastError();
if (err<2) continue;
if (err==129)
{
RefreshRates();
continue;
}
if (err==146)
{
if (IsTradeContextBusy()) Sleep(2000);
continue;
}
}
}
}
}
int n=0;
for (j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
OMN = OrderMagicNumber();
if (OrderSymbol() == Symbol() && OMN == Magic)
{
OT = OrderType();
if ((OT==OP_BUY && (ord == OT || ord == -1)) || (OT==OP_SELL && (ord == OT || ord == -1))) n++;
}
}
}
if (n==0) return(true);
nn++;
if (nn>10) {Alert(Symbol()," Не удалось закрыть все сделки, осталось еще ",n);return(false);}
Sleep(1000);
RefreshRates();
}
return(true);
}
color Color(bool P,color a,color b)
{
if (P) return(a);
else return(b);
}
void DrawLABEL(string name, string Name, int X, int Y, color clr)
{
if (ObjectFind(name)==-1)
{
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
ObjectSet(name, OBJPROP_CORNER, 1);
ObjectSet(name, OBJPROP_XDISTANCE, X);
ObjectSet(name, OBJPROP_YDISTANCE, Y);
}
ObjectSetText(name,Name,12,"Arial",clr);
}
string Error(int code)
{
switch(code)
{
case 0: return("Нет ошибок");
case 1: return("Нет ошибки, но результат неизвестен");
case 2: return("Общая ошибка");
case 3: return("Неправильные параметры");
case 4: return("Торговый сервер занят");
case 5: return("Старая версия клиентского терминала");
case 6: return("Нет связи с торговым сервером");
case 7: return("Недостаточно прав");
case 8: return("Слишком частые запросы");
case 9: return("Недопустимая операция нарушающая функционирование сервера");
case 64: return("Счет заблокирован");
case 65: return("Неправильный номер счета");
case 128: return("Истек срок ожидания совершения сделки");
case 129: return("Неправильная цена");
case 130: return("Неправильные стопы");
case 131: return("Неправильный объем");
case 132: return("Рынок закрыт");
case 133: return("Торговля запрещена");
case 134: return("Недостаточно денег для совершения операции");
case 135: return("Цена изменилась");
case 136: return("Нет цен");
case 137: return("Брокер занят");
case 138: return("Новые цены");
case 139: return("Ордер заблокирован и уже обрабатывается");
case 140: return("Разрешена только покупка");
case 141: return("Слишком много запросов");
case 145: return("Модификация запрещена, так как ордер слишком близок к рынку");
case 146: return("Подсистема торговли занята");
case 147: return("Использование даты истечения ордера запрещено брокером");
case 148: return("Количество открытых и отложенных ордеров достигло предела, установленного брокером.");
case 4000: return("Нет ошибки");
case 4001: return("Неправильный укПоказано первые 50% кода (символов: 48030)
Что вы получите после оплаты
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? Адрес передаётся вместе с заказом в магазин и сохраняется для связи заказа с оплатой. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.
Стоимость полного кода
4 803₽
≈ $56.45