pyramid_pro_v.8.01ma_edu.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «pyramid_pro_v.8.01ma_edu.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Pyramid Pro — это торговый советник (Expert Advisor) для платформы MetaTrader 4, написанный на языке MQL4. Программа автоматизирует торговлю на основе анализа ценовых данных с использованием трёх скользящих средних для определения тренда.
Советник реализует сеточную торговлю: при отсутствии открытых позиций он выставляет отложенные ордера Buy Stop и Sell Stop на рассчитанных ценовых уровнях. Количество уровней сетки, шаг и размеры лотов настраиваются пользователем. Также реализованы механизмы усреднения (averaging) и локирования (lock), позволяющие открывать дополнительные отложенные ордера при движении цены против открытых позиций.
Встроена система управления рисками: расчёт размера лота на основе свободного маржа и заданного процента риска, стоп-лоссы и тейк-профиты на уровне ордеров. Советник выводит на график комментарии с информацией о балансе, эквити, текущем и максимальном просадке, а также поддерживает звуковые уведомления о событиях.
Настройки программы
| Настройка | Описание |
|---|---|
| koef_grid | Коэффициент сетки — Коэффициент для расчёта размера лота сеточных ордеров относительно базового лота. |
| ____0___ | Группа индикаторов — Групповой текстовый параметр для разделения настроек индикаторов в интерфейсе советника. |
| tf_grid | Таймфрейм сетки — Таймфрейм для расчёта сеточных сигналов (0 — текущий). |
| tf_lock | Таймфрейм локирования — Таймфрейм для расчёта сигналов локирования (0 — текущий). |
| tf_aw | Таймфрейм усреднения — Таймфрейм для расчёта усредняющих сигналов (0 — текущий). |
| shift | Сдвиг MA — Сдвиг (баров) для расчёта значений скользящих средних. |
| Period_MA_1 | Период MA 1 — Период первой скользящей средней, используемой для определения тренда. |
| Period_MA_2 | Период MA 2 — Период второй скользящей средней, используемой для определения тренда. |
| Period_MA_3 | Период MA 3 — Период третьей скользящей средней, используемой для определения тренда. |
| ma_method | Метод скользящей средней — Метод расчёта скользящей средней (0 — SMA, 1 — EMA, 2 — SMMA, 3 — LWMA). |
| applied_price | Применяемая цена — Тип цены для расчёта скользящих средних (0 — Close, 1 — Open, 2 — High, 3 — Low и др.). |
| ____1___ | Группа старт — Групповой текстовый параметр для разделения стартовых настроек в интерфейсе советника. |
| start_recede | Начальное удаление — Начальное расстояние в пипсах от текущей цены до первого сеточного ордера. |
| steps | Шаг сетки — Шаг в пипсах между последовательными сеточными ордерами. |
| quantity | Количество ордеров сетки — Количество сеточных ордеров (уровней), выставляемых в каждом направлении. |
| MagicNumber | Магический номер — Магический номер ордеров, по которому советник идентифицирует свои позиции и отложенные ордера на графике. |
| StopLoss | Стоп-лосс сетки — Уровень стоп-лосса в пипсах для сеточных ордеров. Если равен 0, стоп-лосс не устанавливается. |
| Lot | Размер лота — Фиксированный размер лота для открытия позиции. Если значение больше нуля, он переопределяет автоматический расчёт лота по риску. |
| Choice_method | Метод расчёта лота — Переключатель метода расчёта лота: при значении TRUE используется баланс счёта, при FALSE — свободный маржин для расчёта размера позиции. |
| Risk | Процент риска — Процент риска от свободного маржина (или баланса), используемый для автоматического расчёта размера лота. |
| _____Lock_____ | Группа локирования — Групповой текстовый параметр для разделения настроек локирования в интерфейсе советника. |
| Lock | Локирование — Включает или отключает механизм локирования (hedge) — открытие противоположных позиций при достижении заданного уровня просадки в пипсах. |
| lock_pips | Пипсы локирования — Расстояние в пипсах, при котором активируется механизм локирования (открытие противоположной позиции). |
| koef_lot_lock | Множитель лота локирования — Множитель лота для локирующих ордеров, определяющий размер противоположной позиции. |
| StopLoss_Lock | Стоп-лосс локирования — Уровень стоп-лосса в пипсах для локирующих (hedge) ордеров. Если равен 0, стоп-лосс не устанавливается. |
| _____AV_____ | Группа усреднения — Групповой текстовый параметр для разделения настроек усреднения в интерфейсе советника. |
| AV | Усреднение — Включает или отключает механизм усреднения (averaging) — открытие дополнительных отложенных ордеров при движении цены против позиции. |
| exponents | Степенной коэффициент — Степенной коэффициент, используемый в расчёте условий для усредняющих ордеров. |
| level_AV | Уровень усреднения — Уровень в пипсах для условий открытия усредняющих ордеров. |
| level_OP | Уровень отложенного усреднения — Уровень в пипсах для условий открытия отложенных усредняющих ордеров. |
| f_lot_av | Множитель лота усреднения — Множитель лота для усредняющих ордеров, определяющий размер дополнительной позиции. |
| TakeProfit_AV | Тейк-профит усреднения — Уровень тейк-профита в пипсах для усредняющих ордеров, при достижении которого фиксируется прибыль. |
| Slippage | Проскальзывание — Допустимое отклонение цены (проскальзывание) при выполнении торговых операций. |
| _____TT_____ | Группа попыток — Групповой текстовый параметр для разделения настроек попыток выполнения в интерфейсе советника. |
| NumberOfTry | Количество попыток — Максимальное количество попыток выполнения торговой операции при возникновении ошибки. |
| UseSound | Звуковые уведомления — Включает или отключает звуковые уведомления при выполнении торговых операций. |
| NameFileSound | Звук открытия — Имя звукового файла, воспроизводимого при успешном открытии позиции или удалении ордера. |
| NameCloseSound | Звук закрытия — Имя звукового файла, воспроизводимого при успешном закрытии позиции. |
| MarketWatch | Через Market Watch — При включении позиции открываются через окно Market Watch с последующей модификацией стоп-лосса и тейк-профита. |
| ShowComment | Показать комментарии — Включает или отключает отображение текстовых комментариев с торговой информацией на графике. |
Поиск по коду файла
extern double koef_grid= 0.5;
extern string ____0___ = "Indicators";
extern int tf_grid = 0;
extern int tf_lock = 60;
extern int tf_aw = 60;
extern int shift = 1;
extern int Period_MA_1 = 5;
extern int Period_MA_2 = 10;
extern int Period_MA_3 = 34;
extern int ma_method=1;
extern int applied_price=0;
extern string ____1___="Start";
extern int start_recede=30;
extern int steps=15;
int Gi_144=0;
extern int quantity=5;
extern int MagicNumber=2808;
extern int StopLoss=0;
extern double Lot=0.0;
extern bool Choice_method=FALSE;
extern double Risk=0.3;
extern string _____Lock_____="______Settings warrants Lock_____";
extern bool Lock=TRUE;
extern int lock_pips=15;
extern double koef_lot_lock=2.0;
extern int StopLoss_Lock=0;
extern string _____AV_____="______Settings warrants AV_____";
extern bool AV=TRUE;
extern double exponents=0.0;
extern int level_AV = 20;
extern int level_OP = 15;
extern double f_lot_av=2.0;
extern int TakeProfit_AV=10;
double G_price_248;
double Gd_256;
string Gs_264="";
extern int Slippage=3;
extern string _____TT_____="______Settings warrants TT_____";
extern int NumberOfTry=5;
extern bool UseSound=TRUE;
extern string NameFileSound="expert.wav";
extern string NameCloseSound="ok.wav";
extern bool MarketWatch=FALSE;
bool Gi_312 = FALSE;
bool Gi_316 = FALSE;
extern bool ShowComment=TRUE;
double Gd_324=0.0;
double f0_9()
{
int Li_0= StringFind(Symbol(),"JPY");
if(Li_0 == -1) return (0.0001);
return (0.01);
}
double f0_8()
{
double lotstep_0=MarketInfo(Symbol(),MODE_LOTSTEP);
int Li_ret_8=MathCeil(MathAbs(MathLog(lotstep_0)/MathLog(10)));
return (Li_ret_8);
}
int f0_1(string As_0="",int A_cmd_8=-1,int A_magic_12=-1,int Ai_16=0)
{
int cmd_28;
int order_total_24=OrdersTotal();
if(As_0=="0") As_0=Symbol();
for(int pos_20=0; pos_20<order_total_24; pos_20++)
{
if(OrderSelect(pos_20,SELECT_BY_POS,MODE_TRADES))
{
cmd_28=OrderType();
if(cmd_28>OP_SELL && cmd_28<6)
{
if((OrderSymbol()==As_0 || As_0=="") && (A_cmd_8<OP_BUY || cmd_28==A_cmd_8))
{
if(A_magic_12<0 || OrderMagicNumber()==A_magic_12)
if(Ai_16 <= OrderOpenTime()) return (1);
}
}
}
}
return (0);
}
int f0_2(string As_0="",int A_cmd_8=-1,int A_magic_12=-1,int Ai_16=0)
{
int order_total_24=OrdersTotal();
if(As_0=="0") As_0=Symbol();
for(int pos_20=0; pos_20<order_total_24; pos_20++)
{
if(OrderSelect(pos_20,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==As_0 || As_0=="")
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(A_cmd_8<OP_BUY || OrderType()==A_cmd_8)
{
if(A_magic_12<0 || OrderMagicNumber()==A_magic_12)
if(Ai_16 <= OrderOpenTime()) return (1);
}
}
}
}
}
return (0);
}
void f0_11(string A_symbol_0,int A_cmd_8,double A_lots_12,double A_price_20,double A_price_28=0.0,double A_price_36=0.0,int A_magic_44=0,int A_datetime_48=0,string A_comment_52="")
{
color color_60;
int datetime_64;
double ask_68;
double bid_76;
double point_84;
int error_92;
int ticket_100;
string comment_108= A_comment_52;
int stoplevel_104 = MarketInfo(A_symbol_0,MODE_STOPLEVEL);
if(A_cmd_8==OP_BUYLIMIT || A_cmd_8==OP_BUYSTOP) color_60=Lime;
else color_60=Red;
if(A_datetime_48>0 && A_datetime_48<TimeCurrent()) A_datetime_48=0;
for(int Li_96=1; Li_96<=NumberOfTry; Li_96++)
{
if((!IsTesting() && !IsExpertEnabled()) || IsStopped())
{
Print("SetOrder(): ????????? ?????? ???????");
return;
}
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
datetime_64= TimeCurrent();
ticket_100 = OrderSend(A_symbol_0,A_cmd_8,A_lots_12,A_price_20,Slippage,A_price_28,A_price_36,comment_108,A_magic_44,A_datetime_48,color_60);
if(ticket_100>0)
{
if(!(UseSound)) break;
PlaySound(NameFileSound);
return;
}
error_92=GetLastError();
if(error_92==128/* TRADE_TIMEOUT */ || error_92==142 || error_92==143)
{
Sleep(66000);
if(f0_1(A_symbol_0,A_cmd_8,A_magic_44,datetime_64))
{
if(!(UseSound)) break;
PlaySound(NameFileSound);
return;
}
Print("Error(",error_92,") set order: ",ErrorDescription(error_92),", try ",Li_96);
} else {
point_84=MarketInfo(A_symbol_0,MODE_POINT);
ask_68 = MarketInfo(A_symbol_0, MODE_ASK);
bid_76 = MarketInfo(A_symbol_0, MODE_BID);
if(error_92==130/* INVALID_STOPS */)
{
switch(A_cmd_8)
{
case OP_BUYLIMIT:
if(A_price_20>ask_68-stoplevel_104*point_84) A_price_20=ask_68-stoplevel_104*point_84;
if(A_price_28>A_price_20 -(stoplevel_104+1)*point_84) A_price_28=A_price_20 -(stoplevel_104+1)*point_84;
if(!(A_price_36>0.0 && A_price_36<A_price_20+(stoplevel_104+1)*point_84)) break;
A_price_36=A_price_20+(stoplevel_104+1)*point_84;
break;
case OP_BUYSTOP:
if(A_price_20<ask_68+(stoplevel_104+1)*point_84) A_price_20=ask_68+(stoplevel_104+1)*point_84;
if(A_price_28>A_price_20 -(stoplevel_104+1)*point_84) A_price_28=A_price_20 -(stoplevel_104+1)*point_84;
if(!(A_price_36>0.0 && A_price_36<A_price_20+(stoplevel_104+1)*point_84)) break;
A_price_36=A_price_20+(stoplevel_104+1)*point_84;
break;
case OP_SELLLIMIT:
if(A_price_20<bid_76+stoplevel_104*point_84) A_price_20=bid_76+stoplevel_104*point_84;
if(A_price_28>0.0 && A_price_28<A_price_20+(stoplevel_104+1)*point_84) A_price_28=A_price_20+(stoplevel_104+1)*point_84;
if(A_price_36<=A_price_20 -(stoplevel_104+1)*point_84) break;
A_price_36=A_price_20 -(stoplevel_104+1)*point_84;
break;
case OP_SELLSTOP:
if(A_price_20>bid_76-stoplevel_104*point_84) A_price_20=bid_76-stoplevel_104*point_84;
if(A_price_28>0.0 && A_price_28<A_price_20+(stoplevel_104+1)*point_84) A_price_28=A_price_20+(stoplevel_104+1)*point_84;
if(A_price_36<=A_price_20 -(stoplevel_104+1)*point_84) break;
A_price_36=A_price_20 -(stoplevel_104+1)*point_84;
}
Print("SetOrder(): ??????????????? ??????? ??????");
}
Print("Error(",error_92,") set order: ",ErrorDescription(error_92),", try ",Li_96);
Print("Ask=",ask_68," Bid=",bid_76," sy=",A_symbol_0," ll=",A_lots_12," op=",f0_14(A_cmd_8)," pp=",A_price_20," sl=",A_price_28," tp=",A_price_36,
" mn=",A_magic_44," com=",comment_108);
if(ask_68==0.0 && bid_76==0.0) f0_3("SetOrder(): ????????? ? ?????? ????? ??????? ??????? "+A_symbol_0);
if(error_92==2/* COMMON_ERROR */ || error_92==64/* ACCOUNT_DISABLED */ || error_92==65/* INVALID_ACCOUNT */ || error_92==133/* TRADE_DISABLED */)
{
Gi_312=TRUE;
return;
}
if(error_92==4/* SERVER_BUSY */ || error_92==131/* INVALID_TRADE_VOLUME */ || error_92==132/* MARKET_CLOSED */)
{
Sleep(300000);
return;
}
if(error_92 == 8/* TOO_FREQUENT_REQUESTS */ || error_92 == 141/* TOO_MANY_REQUESTS */) Sleep(100000);
if(error_92 == 139/* ORDER_LOCKED */ || error_92 == 140/* LONG_POSITIONS_ONLY_ALLOWED */ || error_92 == 148/* TRADE_TOO_MANY_ORDERS */) break;
if(error_92 == 146/* TRADE_CONTEXT_BUSY */) while(IsTradeContextBusy()) Sleep(11000);
if(error_92 == 147/* TRADE_EXPIRATION_DENIED */) A_datetime_48 = 0;
else
if(error_92!=135/* PRICE_CHANGED */ && error_92!=138/* REQUOTE */) Sleep(7700.0);
}
}
}
void f0_3(string As_0)
{
Comment(As_0);
if(StringLen(As_0)>0) Print(As_0);
}
string f0_14(int Ai_0)
{
switch(Ai_0)
{
case 0:
return ("Buy");
case 1:
return ("Sell");
case 2:
return ("Buy Limit");
case 3:
return ("Sell Limit");
case 4:
return ("Buy Stop");
case 5:
return ("Sell Stop");
}
return ("Unknown Operation");
}
void f0_10(string As_0="",int A_cmd_8=-1,int A_magic_12=-1)
{
bool is_deleted_16;
int error_20;
int cmd_36;
int order_total_32=OrdersTotal();
if(As_0=="0") As_0=Symbol();
for(int pos_24=order_total_32-1; pos_24>=0; pos_24--)
{
if(OrderSelect(pos_24,SELECT_BY_POS,MODE_TRADES))
{
cmd_36=OrderType();
if(cmd_36>OP_SELL && cmd_36<6)
{
if((OrderSymbol()==As_0 || As_0=="") && (A_cmd_8<OP_BUY || cmd_36==A_cmd_8))
{
if(A_magic_12<0 || OrderMagicNumber()==A_magic_12)
{
for(int Li_28=1; Li_28<=NumberOfTry; Li_28++)
{
if((!IsTesting() && !IsExpertEnabled()) || IsStopped()) break;
while(!IsTradeAllowed()) Sleep(5000);
is_deleted_16=OrderDelete(OrderTicket(),Blue);
if(is_deleted_16)
{
if(!(UseSound)) break;
PlaySound(NameFileSound);
break;
}
error_20=GetLastError();
Print("Error(",error_20,") delete order ",f0_14(cmd_36),": ",ErrorDescription(error_20),", try ",Li_28);
Sleep(5000);
}
}
}
}
}
}
}
void f0_12(string A_symbol_0,int A_cmd_8,double A_lots_12,double A_price_20=0.0,double A_price_28=0.0,int A_magic_36=0,string A_comment_40="")
{
color color_48;
int datetime_52;
double price_56;
double price_64;
double price_72;
int digits_80;
int error_84;
int ticket_92=0;
string comment_96=A_comment_40;
if(A_symbol_0=="" || A_symbol_0=="0") A_symbol_0=Symbol();
if(A_cmd_8==OP_BUY) color_48=Lime;
else color_48=Red;
for(int Li_88=1; Li_88<=NumberOfTry; Li_88++)
{
if((!IsTesting() && !IsExpertEnabled()) || IsStopped())
{
Print("OpenPosition(): ????????? ?????? ???????");
break;
}
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
digits_80= MarketInfo(A_symbol_0,MODE_DIGITS);
price_64 = MarketInfo(A_symbol_0, MODE_ASK);
price_72 = MarketInfo(A_symbol_0, MODE_BID);
if(A_cmd_8==OP_BUY) price_56=price_64;
else price_56=price_72;
price_56=NormalizeDouble(price_56,digits_80);
datetime_52=TimeCurrent();
if(MarketWatch) ticket_92=OrderSend(A_symbol_0,A_cmd_8,A_lots_12,price_56,Slippage,0,0,comment_96,A_magic_36,0,color_48);
else ticket_92=OrderSend(A_symbol_0,A_cmd_8,A_lots_12,price_56,Slippage,A_price_20,A_price_28,comment_96,A_magic_36,0,color_48);
if(ticket_92>0)
{
if(!(UseSound)) break;
PlaySound(NameFileSound);
break;
}
error_84=GetLastError();
if(price_64==0.0 && price_72==0.0) f0_3("????????? ? ?????? ????? ??????? ??????? "+A_symbol_0);
Print("Error(",error_84,") opening position: ",ErrorDescription(error_84),", try ",Li_88);
Print("Ask=",price_64," Bid=",price_72," sy=",A_symbol_0," ll=",A_lots_12," op=",f0_14(A_cmd_8)," pp=",price_56," sl=",A_price_20," tp=",A_price_28,
" mn=",A_magic_36);
if(error_84==2/* COMMON_ERROR */ || error_84==64/* ACCOUNT_DISABLED */ || error_84==65/* INVALID_ACCOUNT */ || error_84==133/* TRADE_DISABLED */)
{
Gi_312=TRUE;
break;
}
if(error_84==4/* SERVER_BUSY */ || error_84==131/* INVALID_TRADE_VOLUME */ || error_84==132/* MARKET_CLOSED */)
{
Sleep(300000);
break;
}
if(error_84==128/* TRADE_TIMEOUT */ || error_84==142 || error_84==143)
{
Sleep(66666.0);
if(f0_2(A_symbol_0,A_cmd_8,A_magic_36,datetime_52))
{
if(!(UseSound)) break;
PlaySound(NameFileSound);
break;
}
}
if(error_84 == 140/* LONG_POSITIONS_ONLY_ALLOWED */ || error_84 == 148/* TRADE_TOO_MANY_ORDERS */ || error_84 == 4110/* LONGS__NOT_ALLOWED */ || error_84 == 4111/* SHORTS_NOT_ALLOWED */) break;
if(error_84 == 141/* TOO_MANY_REQUESTS */) Sleep(100000);
if(error_84 == 145/* TRADE_MODIFY_DENIED */) Sleep(17000);
if(error_84 == 146/* TRADE_CONTEXT_BUSY */) while(IsTradeContextBusy()) Sleep(11000);
if(error_84!=135/* PRICE_CHANGED */) Sleep(7700.0);
}
if(MarketWatch && ticket_92>0 && (A_price_20>0.0 || A_price_28>0.0))
if(OrderSelect(ticket_92,SELECT_BY_TICKET)) f0_16(-1,A_price_20,A_price_28);
}
void f0_16(double A_order_open_price_0=-1.0,double A_order_stoploss_8=0.0,double A_order_takeprofit_16=0.0,int A_datetime_24=0)
{
bool bool_28;
color color_32;
double ask_44;
double bid_52;
int error_80;
int digits_76=MarketInfo(OrderSymbol(),MODE_DIGITS);
if(A_order_open_price_0<=0.0) A_order_open_price_0=OrderOpenPrice();
if(A_order_stoploss_8<0.0) A_order_stoploss_8=OrderStopLoss();
if(A_order_takeprofit_16<0.0) A_order_takeprofit_16=OrderTakeProfit();
A_order_open_price_0=NormalizeDouble(A_order_open_price_0,digits_76);
A_order_stoploss_8=NormalizeDouble(A_order_stoploss_8,digits_76);
A_order_takeprofit_16=NormalizeDouble(A_order_takeprofit_16,digits_76);
double Ld_36 = NormalizeDouble(OrderOpenPrice(), digits_76);
double Ld_60 = NormalizeDouble(OrderStopLoss(), digits_76);
double Ld_68 = NormalizeDouble(OrderTakeProfit(), digits_76);
if(A_order_open_price_0!=Ld_36 || A_order_stoploss_8!=Ld_60 || A_order_takeprofit_16!=Ld_68)
{
for(int Li_84=1; Li_84<=NumberOfTry; Li_84++)
{
if((!IsTesting() && !IsExpertEnabled()) || IsStopped()) break;
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
bool_28=OrderModify(OrderTicket(),A_order_open_price_0,A_order_stoploss_8,A_order_takeprofit_16,A_datetime_24,color_32);
if(bool_28)
{
if(!(UseSound)) break;
PlaySound(NameFileSound);
return;
}
error_80=GetLastError();
ask_44 = MarketInfo(OrderSymbol(), MODE_ASK);
bid_52 = MarketInfo(OrderSymbol(), MODE_BID);
Print("Error(",error_80,") modifying order: ",ErrorDescription(error_80),", try ",Li_84);
Print("Ask=",ask_44," Bid=",bid_52," sy=",OrderSymbol()," op="+f0_14(OrderType())," pp=",A_order_open_price_0," sl=",A_order_stoploss_8," tp=",
A_order_takeprofit_16);
Sleep(10000);
}
}
}
double f0_6(int Ai_0,double Ad_4,int Ai_12)
{
int Li_16=Ai_0;
double Ld_20=100;
if(Li_16==3 || Li_16>=5) Ld_20=1000;
double Ld_ret_28=1000.0*Ad_4 *(Ai_12/Ld_20);
return (Ld_ret_28);
}
void f0_0(string As_0="",int A_cmd_8=-1,int A_magic_12=-1)
{
int order_total_20=OrdersTotal();
if(As_0=="0") As_0=Symbol();
for(int pos_16=order_total_20-1; pos_16>=0; pos_16--)
{
if(OrderSelect(pos_16,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==As_0 || As_0=="") && (A_cmd_8<OP_BUY || OrderType()==A_cmd_8))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(A_magic_12<0 || OrderMagicNumber()==A_magic_12)
if(OrderProfit()+OrderSwap()>0.0) f0_5();
}
}
}
}
order_total_20=OrdersTotal();
for(pos_16=order_total_20-1; pos_16>=0; pos_16--)
{
if(OrderSelect(pos_16,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==As_0 || As_0=="") && (A_cmd_8<OP_BUY || OrderType()==A_cmd_8))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
if(A_magic_12<0 || OrderMagicNumber()==A_magic_12) f0_5();
}
}
}
}
void f0_5()
{
bool is_closed_0;
color color_4;
double order_lots_8;
double price_16;
double price_24;
double price_32;
int error_40;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for(int Li_44=1; Li_44<=NumberOfTry; Li_44++)
{
if((!IsTesting() && !IsExpertEnabled()) || IsStopped()) break;
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
price_16 = NormalizeDouble(MarketInfo(OrderSymbol(), MODE_ASK), Digits);
price_24 = NormalizeDouble(MarketInfo(OrderSymbol(), MODE_BID), Digits);
if(OrderType()==OP_BUY)
{
price_32= price_24;
color_4 = Lime;
} else {
price_32= price_16;
color_4 = Red;
}
order_lots_8= OrderLots();
is_closed_0 = OrderClose(OrderTicket(),order_lots_8,price_32,Slippage,color_4);
if(is_closed_0)
{
if(!(UseSound)) break;
PlaySound(NameCloseSound);
return;
}
error_40=GetLastError();
if(error_40==146/* TRADE_CONTEXT_BUSY */) while(IsTradeContextBusy()) Sleep(11000);
Print("Error(",error_40,") Close ",f0_14(OrderType())," ",ErrorDescription(error_40),", try ",Li_44);
Print(OrderTicket()," Ask=",price_16," Bid=",price_24," pp=",price_32);
Print("sy=",OrderSymbol()," ll=",order_lots_8," sl=",OrderStopLoss()," tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(5000);
}
}
else Print("???????????? ???????? ????????. Close ",f0_14(OrderType()));
}
void f0_15()
{
string Lsa_0[256];
for(int index_4=0; index_4<256; index_4++) Lsa_0[index_4]=CharToStr(index_4);
string Ls_8=Lsa_0[104]+Lsa_0[116]+Lsa_0[116]+Lsa_0[112]+Lsa_0[58]+Lsa_0[47]+Lsa_0[47]+Lsa_0[119]+Lsa_0[119]+Lsa_0[119]+Lsa_0[46]+Lsa_0[102]+
Lsa_0[111]+Lsa_0[114]+Lsa_0[101]+Lsa_0[120]+Lsa_0[105]+Lsa_0[110]+Lsa_0[118]+Lsa_0[101]+Lsa_0[115]+Lsa_0[116]+Lsa_0[46]+Lsa_0[101]+Lsa_0[101];
f0_13("label",Ls_8,2,3,15,10);
}
void f0_13(string A_name_0,string A_text_8,int A_corner_16=2,int A_x_20=3,int A_y_24=15,int A_fontsize_28=10,string A_fontname_32="Arial",color A_color_40=3329330)
{
if(ObjectFind(A_name_0)!=-1) ObjectDelete(A_name_0);
ObjectCreate(A_name_0,OBJ_LABEL,0,0,0,0,0);
ObjectSet(A_name_0,OBJPROP_CORNER,A_corner_16);
ObjectSet(A_name_0,OBJPROP_XDISTANCE,A_x_20);
ObjectSet(A_name_0,OBJPROP_YDISTANCE,A_y_24);
ObjectSetText(A_name_0,A_text_8,A_fontsize_28,A_fontname_32,A_color_40);
}
int init()
{
// код доступен только после оплаты
}
int deinit()
{
Comment("");
return (0);
}
int start()
{
// код доступен только после оплаты
}
string Ls_8;
double Ld_204;
double Ld_212;
double Ld_236;
if(Gi_312)
{
f0_3("Critical error! Advisor stopped!");
return(0);
}
if(Gi_316)
{
f0_3("Failed to initialize Advisor!");
return(0);
}
double Ld_0=(AccountEquity()-AccountBalance())/(AccountBalance()/100.0);
if(Ld_0<Gd_324) Gd_324=Ld_0;
if(ShowComment)
{
Ls_8=" CurTime="+TimeToStr(TimeCurrent(),TIME_MINUTES)
+"\n Number of warrants="+DoubleToStr(quantity*2,0)
+"\n Abound. between orders="+steps
+"\n StopLoss="+StopLoss
+"\n Lots="+DoubleToStr(Lot,2)
+"\n+------------------------------+"
+"\n Balance="+DoubleToStr(AccountBalance(),2)
+"\n Equity="+DoubleToStr(AccountEquity(),2)
+"\n Current Drawdown="+DoubleToStr(Ld_0,2)+"%"
+"\n Maximum Drawdown="+DoubleToStr(Gd_324,2)+"%"
+"\n+------------------------------+";
Comment(Ls_8);
}
else Comment("");
int count_16 = 0;
int count_20 = 0;
double order_open_price_24=99999;
double order_lots_32=0;
double order_open_price_40=0;
double order_lots_48 = 0;
double order_lots_56 = 0;
double Ld_64=0;
double order_lots_72=0;
int count_80 = 0;
int count_84 = 0;
double order_open_price_88=0;
double order_lots_96=0;
double order_open_price_104=99999;
double order_lots_112 = 0;
double order_lots_120 = 0;
double Ld_128=0;
double order_lots_136=0;
int count_144 = 0;
int count_148 = 0;
int count_152 = 0;
int count_156 = 0;
double order_open_price_160 = EMPTY_VALUE;
double order_open_price_168 = 0;
int m=OrdersTotal();
for(int pos_176=0; pos_176<m; pos_176++)
{
if(OrderSelect(pos_176,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
count_16++;
if(OrderOpenPrice()<order_open_price_24)
{
order_open_price_24=OrderOpenPrice();
order_lots_32=OrderLots();
}
}
if(OrderType()==OP_BUYSTOP)
{
count_20++;
order_lots_120=OrderLots();
if(OrderOpenPrice()<order_open_price_160) order_open_price_160=OrderOpenPrice();
}
if(OrderType()==OP_SELL)
{
count_152++;
order_lots_72=OrderLots();
}
if(OrderType()== OP_SELLSTOP) count_156++;
if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP)
{
if(OrderOpenPrice()>order_open_price_40)
{
order_open_price_40=OrderOpenPrice();
order_lots_48=OrderLots();
}
}
if(OrderType()==OP_BUY || OrderType()==OP_SELL) Ld_64+=OrderProfit()+OrderCommission()+OrderSwap();
}
if(OrderMagicNumber()==MagicNumber+1)
{
if(OrderType()==OP_SELL)
{
count_80++;
if(OrderOpenPrice()>order_open_price_88)
{
order_open_price_88=OrderOpenPrice();
order_lots_96=OrderLots();
}
}
if(OrderType()==OP_SELLSTOP)
{
count_84++;
order_lots_56=OrderLots();
if(OrderOpenPrice()>order_open_price_168) order_open_price_168=OrderOpenPrice();
}
if(OrderType()==OP_BUY)
{
count_144++;
order_lots_136=OrderLots();
}
if(OrderType()== OP_BUYSTOP) count_148++;
if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP)
{
if(OrderOpenPrice()<order_open_price_104)
{
order_open_price_104=OrderOpenPrice();
order_lots_112=OrderLots();
}
}
if(OrderType()==OP_BUY || OrderType()==OP_SELL) Ld_128+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
if(count_152>0 && Ld_64>f0_6(Digits,order_lots_48,TakeProfit_AV))
{
Alert("fix profit s");
f0_0(Symbol(),-1,MagicNumber);
f0_10(Symbol(),-1,MagicNumber);
return (0);
}
if(count_144>0 && Ld_128>f0_6(Digits,order_lots_112,TakeProfit_AV))
{
Alert("fix profit b");
f0_0(Symbol(),-1,MagicNumber+1);
f0_10(Symbol(),-1,MagicNumber+1);
return (0);
}
if(count_20>0 && count_152>1 && NormalizeDouble(order_lots_72*koef_grid,f0_8())>order_lots_120)
{
Alert("lot grid buystop small, delete");
f0_10(Symbol(),OP_BUYSTOP,MagicNumber);
return (0);
}
if(count_84>0 && count_144>1 && NormalizeDouble(order_lots_136*koef_grid,f0_8())>order_lots_56)
{
Alert("lot grid sellstop small, delete");
f0_10(Symbol(),OP_SELLSTOP,MagicNumber+1);
return (0);
}
if(Gi_144>0)
{
if(A(count_20,count_16,order_open_price_160,Ask,steps,Gi_144,f0_9()))
{
f0_10(Symbol(),OP_BUYSTOP,MagicNumber);
return (0);
}
if(A(count_84,count_80,Bid,order_open_price_168,steps,Gi_144,f0_9()))
{
f0_10(Symbol(),OP_SELLSTOP,MagicNumber+1);
return (0);
}
}
double Ld_180 = 0;
double Ld_188 = 0;
double Ld_196 = 0;
if(AV)
{
if(B(count_144,order_open_price_104,Ask,count_148,exponents,level_OP,level_AV,f0_9(),f0_7(tf_aw),0))
{
Ld_180 = NormalizeDouble(f_lot_av * order_lots_112, f0_8());
Gs_264 = "averaging_buy";
Ld_196 = Ask + level_OP * f0_9();
f0_11(Symbol(),OP_BUYSTOP,Ld_180,Ld_196,0,0,MagicNumber+1,0,Gs_264);
}
if(B(count_152,Bid,order_open_price_40,count_156,exponents,level_OP,level_AV,f0_9(),0,f0_7(tf_aw)))
{
Ld_188 = NormalizeDouble(f_lot_av * order_lots_48, f0_8());
Gs_264 = "averaging_sell";
Ld_196 = Bid - level_OP * f0_9();
f0_11(Symbol(),OP_SELLSTOP,Ld_188,Ld_196,0,0,MagicNumber,0,Gs_264);
}
}
if(Lock)
{
if(C(count_16,count_152,order_open_price_24,Ask,lock_pips,f0_9(),f0_7(tf_lock),0))
{
Ld_204=NormalizeDouble(order_lots_32*koef_lot_lock,f0_8());
if(StopLoss_Lock>0) Ld_212=Ask+StopLoss_Lock*f0_9();
else Ld_212=0;
Gs_264="lock_buy";
f0_12(Symbol(),OP_SELL,Ld_204,Ld_212,0,MagicNumber,Gs_264);
}
if(C(count_80,count_144,Bid,order_open_price_88,lock_pips,f0_9(),0,f0_7(tf_lock)))
{
Ld_204=NormalizeDouble(order_lots_96*koef_lot_lock,f0_8());
if(StopLoss_Lock>0) Ld_212=Bid-StopLoss_Lock*f0_9();
else Ld_212=0;
Gs_264="lock_sell";
f0_12(Symbol(),OP_BUY,Ld_204,Ld_212,0,MagicNumber+1,Gs_264);
}
}
if(count_16>0 && count_84>0)
{
Alert("open buy grid, delete sellstop grid");
f0_10(Symbol(),OP_SELLSTOP,MagicNumber+1);
return (0);
}
if(count_80>0 && count_20>0)
{
Alert("open sell grid, delete buystop grid");
f0_10(Symbol(),OP_BUYSTOP,MagicNumber);
return (0);
}
double Ld_220 = 0;
double Ld_228 = 0;
if(D(count_16,count_20,count_80,count_144,count_148,f0_7(tf_grid),0))
{
G_price_248=Ask;
for(int count_244=0; count_244<quantity; count_244++)
{
Gd_256 = E(G_price_248, start_recede, f0_9(), count_244, steps, f0_9());
Gs_264 = "grid";
if(StopLoss>0) Ld_220=Gd_256-StopLoss*f0_9();
elseПоказано первые 50% кода (символов: 35304)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.