MovingUp
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ma_v_1_3_3.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MovingUp v1.3.3 — торговый советник для MetaTrader 4, основанный на пересечении двух скользящих средних (быстрой и медленной). При пересечении линий MA вверх советник открывает покупку, вниз — продажу, при этом поддерживается фильтр расстояния между линиями. Доступен прямой режим торговли и режим Turn с использованием отложенных ордеров (BuyStop/SellStop).
Советник предоставляет полный набор управленческих инструментов: стоп-лосс, тейк-профит, трейлинг-стоп, а также наращивание лотов по шагам (Step Up / Step Down). Есть возможность ограничить торговлю по времени суток и задать магический номер для идентификации ордеров. В тестере стратегий отображается таблица с информацией о прибыли и балансе.
Расчёт лотов поддерживает как фиксированный размер, так и расчёт по проценту от депозита. Доступны два варианта усреднения цен при расчёте тейк-профита. Советник обрабатывает ошибки торгового сервера и проверяет свободную маржу перед открытием позиций.
Настройки программы
| Настройка | Описание |
|---|---|
| _0_ | Заголовок группы 1 — Заголовочный текст первой группы настроек. |
| TradeMode | Режим торговли — Режим торговли: 1 — работа в одном направлении, 2 — работа в обоих направлениях одновременно. |
| _1_ | Заголовок группы быстрой MA — Заголовочный текст группы настроек быстрой скользящей средней. |
| Method_MA_ | Метод быстрой MA — Метод расчёта быстрой скользящей средней (SMA, EMA, SMMA, LWMA). |
| Apply_to_ | Применение быстрой MA — Тип цены, к которому применяется быстрая скользящая средняя (например, Close, Open, High, Low и др.). |
| _2_ | Заголовок группы медленной MA — Заголовочный текст группы настроек медленной скользящей средней. |
| Method_MA__ | Метод медленной MA — Метод расчёта медленной скользящей средней (SMA, EMA, SMMA, LWMA). |
| Apply_to__ | Применение медленной MA — Тип цены, к которому применяется медленная скользящая средняя (например, Close, Open, High, Low и др.). |
| LotConst_or_not | Фиксированный лот — Переключатель режима расчёта лота: true — фиксированный лот (Lot), false — расчёт по проценту риска от баланса или минимальный лот. |
| _3_2_ | Заголовок группы лотов — Заголовочный текст группы настроек лотов. |
| FirstLotMultiplicator | Множитель первого лота — Множитель для расчёта лота при наращивании на основе лота предыдущей позиции. |
| First_LotSize | Начальный размер лота — Пороговый размер лота, при достижении которого применяется отдельное значение тейк-профита. |
| First_LotSize_TakeProfit | Тейк-профит для начального лота — Значение тейк-профита в пунктах, используемое при достижении лотом порога First_LotSize. |
| First_MaxLotSize | Максимальный начальный лот — Максимальный допустимый размер лота для начальных позиций. Если рассчитанный лот превышает это значение, используется стандартный расчёт. |
| _4_ | Заголовок группы расстояния — Заголовочный текст группы настроек расстояния между MA. |
| Use_Distance | Использовать расстояние — Переключатель фильтрации сигналов по расстоянию между линиями скользящих средних. |
| Distance | Расстояние между MA — Минимальное расстояние между быстрой и медленной скользящими средними в пунктах для открытия позиции. |
| _5_ | Заголовок группы тейк-профита — Заголовочный текст группы настроек тейк-профита. |
| Use_TakeProfit | Использовать тейк-профит — Переключатель активации тейк-профита для позиций. |
| TakeProfit | Тейк-профит — Значение тейк-профита в пунктах для фиксации прибыли по позициям. |
| _6_ | Заголовок группы варианта — Заголовочный текст группы настроек варианта усреднения. |
| Varyant | Вариант усреднения — Вариант расчёта усреднённой цены для тейк-профита: 1 — простое среднее, 2 — средневзвешенное по лотам. |
| _7_ | Заголовок группы стоп-лосса — Заголовочный текст группы настроек стоп-лосса. |
| Use_StopLoss | Использовать стоп-лосс — Переключатель активации стоп-лосса для позиций. |
| StopLoss | Стоп-лосс — Значение стоп-лосса в пунктах для защиты позиций от убытков. |
| _8_ | Заголовок группы Step Up — Заголовочный текст группы настроек Step Up. |
| Use_Step_Up | Использовать Step Up — Переключатель активации режима Step Up — открытия дополнительных позиций при достижении определённого расстояния. |
| Step_Up | Шаг апа — Расстояние в пунктах, при котором открываются дополнительные позиции с увеличенным лотом (Step Up). |
| _8_1_ | Заголовок группы трейлинг-стопа — Заголовочный текст группы настроек трейлинг-стопа. |
| Use_TrailingStop | Использовать трейлинг-стоп — Переключатель активации трейлинг-стопа для открытых позиций. |
| TrailingStop | Трейлинг-стоп — Расстояние в пунктах для трейлинг-стопа, который перемещает стоп-лосс вслед за ценой. |
| _9_ | Заголовок группы Step Down — Заголовочный текст группы настроек Step Down. |
| Use_Step_Down | Использовать Step Down — Переключатель активации режима Step Down — уменьшения количества позиций при достижении определённого расстояния. |
| Step_Down | Шаг дауна — Расстояние в пунктах, при котором происходит уменьшение количества позиций и фиксация тейк-профита (Step Down). |
| _10_ | Заголовок группы магического номера — Заголовочный текст группы настроек магического номера. |
| Magic | Магический номер — Магический номер для идентификации ордеров, управляемых данным советником. |
| _11_ | Заголовок группы таблицы — Заголовочный текст группы настроек отображения таблицы. |
| ShowTableOnTesting | Показать таблицу в тестере — Переключатель отображения таблицы с информацией о прибыли и балансе в тестере стратегий. |
| _12_ | Заголовок группы таймфрейма — Заголовочный текст группы настроек таймфрейма. |
| Tf | Таймфрейм — Таймфрейм, на котором рассчитываются скользящие средние (current, M1, M5, M15, M30, H1, H4, D1, W1, MN1). |
| _13_ | Заголовок группы времени торговли — Заголовочный текст группы настроек времени торговли. |
| Use_trade_time | Использовать время торговли — Переключатель ограничения торговли по времени суток (открытие и закрытие сессий). |
| Open_trade | Время открытия торговли — Время открытия торговой сессии в формате ЧЧ:ММ:СС или ЧЧ:ММ. |
| Close_trade | Время закрытия торговли — Время закрытия торговой сессии в формате ЧЧ:ММ:СС или ЧЧ:ММ. |
| _14_ | Заголовок группы Turn — Заголовочный текст группы настроек Turn. |
| Use_Turn | Использовать Turn — Переключатель режима Turn — использование отложенных ордеров (BuyStop/SellStop) вместо рыночных. |
| Turn | Расстояние Turn — Расстояние в пунктах до уровня установки отложенного ордера в режиме Turn. |
| LotMultiplicator | Множитель лота для Turn — Множитель увеличения лота в режиме Turn (отложенные ордера). |
| Turn_TakeProfit | Тейк-профит для Turn — Значение тейк-профита в пунктах для отложенных ордеров в режиме Turn. |
| Turn_LotSize | Размер лота для Turn — Пороговый размер лота в режиме Turn, при достижении которого применяется отдельное значение тейк-профита. |
| Turn_LotSize_TakeProfit | Тейк-профит для Turn лота — Значение тейк-профита в пунктах, используемое при достижении лотом порога Turn_LotSize в режиме Turn. |
| Turn_MaxLotSize | Максимальный лот для Turn — Максимальный допустимый размер лота в режиме Turn. |
Поиск по коду файла
/*------------------------------------------------------------------------------------------------------------------------------- specification ---//
enum ENUM_TF { current=0,M1=1,M5=5,M15=15,M30=30,H1=60,H4=240,D1=1440,W1=10080,MN1=43200 };
extern string _0_="___ ????? ?????? ___";
extern int TradeMode=1;
extern string _1_="___ ????????? Fast MA ___";
extern int Period_=13,
Shift_=0;
extern ENUM_MA_METHOD Method_MA_=MODE_SMA;
extern ENUM_APPLIED_PRICE Apply_to_=PRICE_CLOSE;
extern string _2_="___ ????????? Slow MA ___";
extern int Period__=21,
Shift__=0;
extern ENUM_MA_METHOD Method_MA__=MODE_SMA;
extern ENUM_APPLIED_PRICE Apply_to__=PRICE_CLOSE;
extern string _3_="___ ????????? ??? ___",
_3_1_="___ true - ??????????, false - ?? ??????? ___";
extern bool LotConst_or_not=true;
extern double Lot=0.1,
RiskPercent=1.0;
extern string _3_2_="___ ?????????? ???? ___";
extern double FirstLotMultiplicator=1.65;
extern double First_LotSize=1.0;
extern double First_LotSize_TakeProfit=650.0;
extern double First_MaxLotSize=2.5;
extern string _4_="___ ????????? ?????????? ????? Fast MA ? Slow MA ___";
extern bool Use_Distance=false;
extern double Distance=100.0;
extern string _5_="___ ??????? ? ??????? - TP ___";
extern bool Use_TakeProfit=true;
extern double TakeProfit=500.0;
extern string _6_="___ ?????? ?????????? ___";
extern int Varyant=1;
extern string _7_="___ ???? ? ??????? - SL ___";
extern bool Use_StopLoss=true;
extern double StopLoss=250.0;
extern string _8_="___ ?????????? ????? ???????? (Step Up) ___";
extern bool Use_Step_Up=true;
extern double Step_Up=100.0;
extern string _8_1_="___ Trailing stop ___";
extern bool Use_TrailingStop=true;
extern double TrailingStop=250.0;
extern string _9_="___ ?????????? ????? ???????? (Step Down) ___";
extern bool Use_Step_Down=true;
extern double Step_Down=150.0;
extern string _10_="___ ????????????? ??????? ????????? ___";
extern int Magic=135;
extern string _11_="___ ??????? ? ????? ?????? (true - ???????? ??? false - ?????????) ___";
extern bool ShowTableOnTesting=false;
extern string _12_="___ ??????? ????-????? ????????, ???? current - ????-????? ???????? ??????? ___";
extern ENUM_TF Tf=current;
extern string _13_="___ Trade time ___";
extern bool Use_trade_time=false;
extern string Open_trade="08:00:00";
extern string Close_trade="21:30:00";
extern string _14_="___ Turn ___";
extern bool Use_Turn=true;
extern double Turn=250.0;
extern double LotMultiplicator=1.65;
extern double Turn_TakeProfit=500.0;
extern double Turn_LotSize=1.0;
extern double Turn_LotSize_TakeProfit=650.0;
extern double Turn_MaxLotSize=2.5;
double TickSize,TickValue,Spread,StopLevel,MinLot,MaxLot,LotStep,Pnt,
TP;
int order_type,T,
sumBO,sumSO,sumBS,sumSS,sumBL,sumSL,sumO,sumS,sumL,_sumBO,_sumSO,_sumBS,_sumSS,_sumBL,_sumSL,_sumO,_sumS,_sumL,
NumbUp,NumbDn,Numb,
PrevFirstTicket;
bool Ans,_Ans,Activate,FatalError,FreeMarginAlert,IsTester,IsVisual;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
Comment("");
if(!IsTester)
{
if(IsVisual && ShowTableOnTesting) Obj_Del();
switch(UninitializeReason())
{
case 0: if(Use_Turn) GVD("Numb"); else { GVD("NumbUp"); GVD("NumbDn"); GVD("PrevFirstTicket"); } break;
case 1: if(Use_Turn) GVD("Numb"); else { GVD("NumbUp"); GVD("NumbDn"); GVD("PrevFirstTicket"); } break;
} // switch
}
return(0);
}
int start()
{
// код доступен только после оплаты
}
void Trade()
{
double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0),ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0),lot=0.0;
if(sumBO==0 && (TradeMode==1 || (TradeMode==2 && sumSO==0)) &&
ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))
{
if(!TradeTime()) return;
lot=_GetLot();
if(First_MaxLotSize>0.0 && NL(lot)>=First_MaxLotSize) lot=GetLot();
if(First_LotSize>0.0 && NL(lot)>=First_LotSize) TP=First_LotSize_TakeProfit; else TP=TakeProfit;
if(sumSO>0 && !ClosePos(OP_SELL)) return;
if(MO(OP_BUY,lot,GetComment())==-1) return;
if(!ModifyByTicket(T)) return;
NumbUp=0; NumbDn=0; PrevFirstTicket=T;
}
else
if(sumSO==0 && (TradeMode==1 || (TradeMode==2 && sumBO==0)) &&
ma_fast<ma_slow && (!Use_Distance || (Use_Distance && ND(ma_slow-ma_fast)>Distance*Pnt)))
{
if(!TradeTime()) return;
lot=_GetLot();
if(First_MaxLotSize>0.0 && NL(lot)>=First_MaxLotSize) lot=GetLot();
if(First_LotSize>0.0 && NL(lot)>=First_LotSize) TP=First_LotSize_TakeProfit; else TP=TakeProfit;
if(sumBO>0 && !ClosePos(OP_BUY)) return;
if(MO(OP_SELL,lot,GetComment())==-1) return;
if(!ModifyByTicket(T)) return;
NumbUp=0; NumbDn=0; PrevFirstTicket=T;
}
else
if(sumBO>0)
{
lot=GetOrdDouble("lot",PrevFirstTicket);
if(First_LotSize>0.0 && NL(lot)>=First_LotSize) TP=First_LotSize_TakeProfit; else TP=TakeProfit;
if(Use_Step_Up && ND(Ask-ExtrLevOrd("BuyMax"))>=Step_Up*Pnt)
{
if(MO(OP_BUY,GetLot(),GetComment(NumbUp+1))==-1) return;
if(!ModifyByTicket(T)) return;
NumbUp++;
}
else
if(Use_Step_Down && ND(ExtrLevOrd("BuyMin")-Ask)>=Step_Down*Pnt)
{
if(MO(OP_BUY,GetLot(),GetComment(NumbDn-1))==-1) return;
if(Use_StopLoss) { if(!ModifyByTicket(T)) return; }
if(Use_TakeProfit) { if(!Modify_TP(Get_TP(TP,OP_BUY),OP_BUY)) return; }
NumbDn--;
}
}
else
if(sumSO>0)
{
lot=GetOrdDouble("lot",PrevFirstTicket);
if(First_LotSize>0.0 && NL(lot)>=First_LotSize) TP=First_LotSize_TakeProfit; else TP=TakeProfit;
if(Use_Step_Up && ND(ExtrLevOrd("SellMin")-Bid)>=Step_Up*Pnt)
{
if(MO(OP_SELL,GetLot(),GetComment(NumbUp+1))==-1) return;
if(!ModifyByTicket(T)) return;
NumbUp++;
}
else
if(Use_Step_Down && ND(Bid-ExtrLevOrd("SellMax"))>=Step_Down*Pnt)
{
if(MO(OP_SELL,GetLot(),GetComment(NumbDn-1))==-1) return;
if(Use_StopLoss) { if(!ModifyByTicket(T)) return; }
if(Use_TakeProfit) { if(!Modify_TP(Get_TP(TP,OP_SELL),OP_SELL)) return; }
NumbDn--;
}
}
}
void Trade2()
{
double lot=0.0,tp=0.0,lev_inst=0.0,ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0),ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);
if(sumO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))
{
if(sumS>0 && !DelOrd()) return;
if(!TradeTime()) return;
if(sumSO>0 && !ClosePos(OP_SELL)) return;
if(MO(OP_BUY,GetLot(),GetComment())==-1) return;
if(!ModifyByTicket(T)) { Numb=1; return; }
lev_inst=GetOrdDouble("sl",T);
lot=GetOrdDouble("lot",T);
if(Turn_MaxLotSize>0.0 && NL(LotMultiplicator*lot)>=Turn_MaxLotSize) { Numb=1; return; }
if(Turn_LotSize>0.0 && NL(LotMultiplicator*lot)>=Turn_LotSize) tp=Turn_LotSize_TakeProfit; else tp=Turn_TakeProfit;
if(PO(OP_SELLSTOP,lev_inst,lev_inst+Turn*Pnt,lev_inst-tp*Pnt,LotMultiplicator*lot,GetComment(1))==-1) { Numb=1; return; }
Numb=1;
}
else
if(sumO==0 && ma_fast<ma_slow && (!Use_Distance || (Use_Distance && ND(ma_slow-ma_fast)>Distance*Pnt)))
{
if(sumS>0 && !DelOrd()) return;
if(!TradeTime()) return;
if(sumBO>0 && !ClosePos(OP_BUY)) return;
if(MO(OP_SELL,GetLot(),GetComment())==-1) return;
if(!ModifyByTicket(T)) { Numb=1; return; }
lev_inst=GetOrdDouble("sl",T);
lot=GetOrdDouble("lot",T);
if(Turn_MaxLotSize>0.0 && NL(LotMultiplicator*lot)>=Turn_MaxLotSize) { Numb=1; return; }
if(Turn_LotSize>0.0 && NL(LotMultiplicator*lot)>=Turn_LotSize) tp=Turn_LotSize_TakeProfit; else tp=Turn_TakeProfit;
if(PO(OP_BUYSTOP,lev_inst,lev_inst-Turn*Pnt,lev_inst+tp*Pnt,LotMultiplicator*lot,GetComment(1))==-1) { Numb=1; return; }
Numb=1;
}
else
if(sumBO>0 && sumSS==0)
{
T=GetTicket("market","last","trade"); if(T==-1) return;
lev_inst=GetOrdDouble("sl",T);
lot=GetOrdDouble("lot",T);
if(lev_inst==0.0)
{
if(!ModifyByTicket(T)) return;
lev_inst=GetOrdDouble("sl",T);
}
if(Turn_MaxLotSize>0.0 && NL(LotMultiplicator*lot)>=Turn_MaxLotSize) return;
if(Turn_LotSize>0.0 && NL(LotMultiplicator*lot)>=Turn_LotSize) tp=Turn_LotSize_TakeProfit; else tp=Turn_TakeProfit;
if(PO(OP_SELLSTOP,lev_inst,lev_inst+Turn*Pnt,lev_inst-tp*Pnt,LotMultiplicator*lot,GetComment(Numb+1))==-1) return;
Numb++;
}
else
if(sumSO>0 && sumBS==0)
{
T=GetTicket("market","last","trade"); if(T==-1) return;
lev_inst=GetOrdDouble("sl",T);
lot=GetOrdDouble("lot",T);
if(lev_inst==0.0)
{
if(!ModifyByTicket(T)) return;
lev_inst=GetOrdDouble("sl",T);
}
if(Turn_MaxLotSize>0.0 && NL(LotMultiplicator*lot)>=Turn_MaxLotSize) return;
if(Turn_LotSize>0.0 && NL(LotMultiplicator*lot)>=Turn_LotSize) tp=Turn_LotSize_TakeProfit; else tp=Turn_TakeProfit;
if(PO(OP_BUYSTOP,lev_inst,lev_inst-Turn*Pnt,lev_inst+tp*Pnt,LotMultiplicator*lot,GetComment(Numb+1))==-1) return;
Numb++;
}
else
if(sumO==0 && sumS>0)
{
if(!DelOrd()) return;
}
}
int GetTicket(string type="",string position="last",string list="trade")
{
int pos=0,i=0,ticket=0,ticket_prev=-1;
if(list=="trade")
{
for(pos=OrdersTotal()-1; pos>=0; pos--)
{
if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) || OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if((type=="" && OrderType()>5) || (type=="market" && OrderType()>1) || (type=="buy" && OrderType()!=0) || (type=="sell" && OrderType()!=1)) continue;
ticket=OrderTicket();
if((position=="first" && (ticket_prev==-1 || ticket_prev>ticket)) || (position=="last" && (ticket_prev==-1 || ticket_prev<ticket)))
ticket_prev=ticket;
}
/*for*/
}
else
if(list=="history")
{
for(pos=OrdersHistoryTotal()-1; pos>=0; pos--)
{
if(!OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY) || OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if((type=="" && OrderType()>5) || (type=="market" && OrderType()>1) || (type=="buy" && OrderType()!=0) || (type=="sell" && OrderType()!=1)) continue;
ticket=OrderTicket();
if((position=="first" && (ticket_prev==-1 || ticket_prev>ticket)) || (position=="last" && (ticket_prev==-1 || ticket_prev<ticket)))
ticket_prev=ticket;
i++; if(i==100) break;
}
/*for*/
}
return(ticket_prev);
}
double GetOrdDouble(string value,int ticket)
{
if(!OrderSelect(ticket,SELECT_BY_TICKET)) return(0.0);
if(value=="op") return(OrderOpenPrice()); else
if(value=="lot") return(OrderLots()); else
if(value=="sl") return(OrderStopLoss()); else
if(value=="tp") return(OrderTakeProfit()); else
if(value=="cp") return(OrderClosePrice()); else
if(value=="result") return(OrderProfit()); else
if(value=="swap") return(OrderSwap()); else
if(value=="commission") return(OrderCommission());
return(0.0);
}
int GetOrdInt(string value,int ticket)
{
if(!OrderSelect(ticket,SELECT_BY_TICKET)) return(-1);
if(value=="type") return(OrderType()); else
if(value=="id") return(OrderMagicNumber()); else
if(value=="ot") return(OrderOpenTime()); else
if(value=="ct") return(OrderCloseTime());
return(-1);
}
void Trail()
{
if(Use_Turn || !Use_TrailingStop || sumO==0) return;
double op,tp,sl,sl_lev;
int i;
for(int pos=OrdersTotal()-1; pos>=0; pos--)
{
if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) || OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic || OrderType()>1) continue;
op=OrderOpenPrice(); sl=OrderStopLoss(); tp=OrderTakeProfit();
Ans=false;
if(OrderType()==OP_BUY)
{
if(ND(Bid-op)<=TrailingStop*Pnt) continue;
if(sl!=0.0 && ND(Bid-sl)<=TrailingStop*Pnt) continue;
sl_lev=Bid-TrailingStop*Pnt;
if(ND(Bid-sl_lev)<StopLevel) continue;
}
else if(OrderType()==OP_SELL)
{
if(ND(op-Ask)<=TrailingStop*Pnt) continue;
if(sl!=0.0 && ND(sl-Ask)<=TrailingStop*Pnt) continue;
sl_lev=Ask+TrailingStop*Pnt;
if(ND(sl_lev-Ask)<StopLevel) continue;
}
i=0;
while(!Ans && i<5)
{
Ans=OrderModify(OrderTicket(),ND(op),ND(sl_lev),ND(tp),NULL,clrYellow);
if(!Ans) { if(!Errors(GetLastError())) break; } i++;
}
/*while*/
}
/*for*/
}
bool TradeTime()
{
if(!Use_trade_time) return(true);
datetime time_now=TimeCurrent(),time_start,time_end;
int sec=86400,day=DayOfWeek();
if(StПоказано первые 50% кода (символов: 22605)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.