Hans123 Expert Advisor
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «hans123trader_v8m1_1_r.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник Hans123 Expert Advisor для платформы MetaTrader 4 предназначен для автоматической торговли на валютном рынке. Он работает в рамках двух заданных торговых сессий и размещает отложенные ордера типа BUYSTOP и SELLSTOP на основе анализа ценовых уровней за прошедший период сессии. Каждая сессия имеет собственные параметры начала и длительности, задаваемые пользователем.
Советник управляет открытыми позициями: закрывает устаревшие ордера предыдущих дней при активированной соответствующей настройке, модифицирует стоп-лосс по выбранному методу расчёта трейлинг-стопа. Доступны три варианта расчёта трейлинг-стопа — фиксированный отступ в пунктах, на основе индикатора ATR и на основе диапазона баров. Также реализована защита инвестиций с возможностью фиксации цены открытия при достижении определённого уровня прибыли.
Для каждого торгового инструмента советник использует индивидуальные параметры входа в позицию, уровня стоп-лосса и тейк-профита, которые задаются внутренне в зависимости от торговой пары. Ордера идентифицируются уникальными магическими числами, что позволяет советнику различать свои позиции на счёте. Перед размещением новых ордеров проверяется доступный свободный маржинал.
Настройки программы
| Настройка | Описание |
|---|---|
| BeginSession1 | Начало первой сессии — Час начала первой торговой сессии для размещения отложенных ордеров |
| LengthSession1 | Длительность первой сессии — Длительность первой торговой сессии в часах, используемая для определения ценового диапазона |
| BeginSession2 | Начало второй сессии — Час начала второй торговой сессии для размещения отложенных ордеров |
| LengthSession2 | Длительность второй сессии — Длительность второй торговой сессии в часах, используемая для определения ценового диапазона |
| Lots | Объём лотов — Размер позиции в лотах для каждой сделки |
| LocalTimeZone | Локальный часовой пояс — Часовой пояс локального сервера, используемый для расчёта времени валидности ордеров |
| DestTimeZone | Часовой пояс назначения — Часовой пояс целевого рынка, используемый для сдвига времени торговых сессий |
| ClsOnlUnprTX | Закрытие нереализованных ордеров — Флаг автоматического закрытия нереализованных ордеров предыдущих торговых дней |
| ProtectYourInvestments | Защита инвестиций — Флаг включения защиты при модификации стоп-лосса: фиксация цены открытия при достижении прибыли |
| Type_TS_Calc | Тип расчёта трейлинг-стопа — Выбор метода расчёта уровня трейлинг-стопа |
| FactorTSCalculation | Множитель расчёта трейлинг-стопа — Коэффициент, используемый в методах расчёта трейлинг-стопа на основе ATR или диапазона баров |
Поиск по коду файла
#include <stdlib.mqh>
extern int BeginSession1= 5;
extern int LengthSession1= 4;
extern int BeginSession2= 9;
extern int LengthSession2= 4;
extern double Lots = 1;
extern int LocalTimeZone= 1;
extern int DestTimeZone= 1;
extern int ClsOnlUnprTX=1;
extern int ProtectYourInvestments= 1;
extern int Type_TS_Calc= 1;
extern double FactorTSCalculation = 0.5;
datetime bartime = 0;
double Slippage= 3;
int OrderInterval = 10000;
int start()
{
// код доступен только после оплаты
}
int cnt, ticket, err, i, j;
int MagicNumber;
double ts, tp, sl, LowestPrice, HighestPrice, Price;
bool Order[5];
string setup;
datetime Validity=0;
double TrailingStop;
double TakeProfit;
double InitialStopLoss;
int PipsForEntry;
int TimeZoneDiff= LocalTimeZone - DestTimeZone;
MagicNumber = func_Symbol2Val(Symbol());
setup="H123v8.1_" + Symbol();
if (Symbol()=="GBPUSD")
{
PipsForEntry= 13;
TrailingStop = 32;
TakeProfit = 62;
InitialStopLoss=52;
}
else if (Symbol()=="EURUSD")
{
PipsForEntry= 13;
TrailingStop = 30;
TakeProfit = 52;
InitialStopLoss=42;
}
else if (Symbol()=="USDCHF")
{
PipsForEntry= 13;
TrailingStop = 30;
TakeProfit = 62;
InitialStopLoss=52;
}
else
{
PipsForEntry= 13;
TrailingStop = 32;
TakeProfit = 52;
InitialStopLoss=42;
}
if (bartime == Time[0])
{
return(0);
}
else
{
bartime = Time[0];
}
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
err = GetLastError();
if (err>1) { Print("Error selecting order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber()==(MagicNumber+1) || OrderMagicNumber()==(MagicNumber+3))) {
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
if (ClsOnlUnprTX==1) {
if(Bid-OrderOpenPrice()<Point*TrailingStop) {
OrderClose(OrderTicket(), Lots, Bid, 3, Red);
}
} else {
OrderClose(OrderTicket(), Lots, Bid, 3, Red);
}
err = GetLastError();
if (err>1) { Print("Error closing buy order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {
if (ProtectYourInvestments==1 && Bid-OrderOpenPrice()>Point*TrailingStop) {
ts = OrderOpenPrice();
} else {
if (Type_TS_Calc==1) {
ts = Bid-(Point*TrailingStop);
} else if (Type_TS_Calc==2) {
ts = Low[0] - FactorTSCalculation * iATR(NULL,0,14,0);
} else if (Type_TS_Calc==3) {
ts = Low[0] - (FactorTSCalculation *(High[0]-Low[0]));
}
}
if (OrderStopLoss()<ts && Bid-OrderOpenPrice()>Point*TrailingStop) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
err = GetLastError();
if (err>1) { Print("Error modifying buy order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
}
} else if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber()==(MagicNumber+2) || OrderMagicNumber()==(MagicNumber+4))) {
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) {
if (ClsOnlUnprTX==1) {
if((OrderOpenPrice()-Ask)<(Point*TrailingStop)) {
OrderClose(OrderTicket(), Lots, Ask, 3, Red);
}
} else {
OrderClose(OrderTicket(), Lots, Ask, 3, Red);
}
err = GetLastError();
if (err>1) { Print("Error closing Sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {
if (ProtectYourInvestments==1 && (OrderOpenPrice()-Ask)>(Point*TrailingStop)) {
ts = OrderOpenPrice();
} else {
if (Type_TS_Calc==1) {
ts = Ask+(Point*TrailingStop);
} else if (Type_TS_Calc==2) {
ts = High[0] + FactorTSCalculation * iATR(NULL,0,14,0);
} else if (Type_TS_Calc==3) {
ts = High[0] + (FactorTSCalculation *(High[0]-Low[0]));
}
}
if (OrderStopLoss()>ts && (OrderOpenPrice()-Ask)>(Point*TrailingStop)) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
err = GetLastError();
if (err>1) { Print("Error modifyin sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
}
}
}
}
if(AccountFreeMargin()<(1000*Lots)) return(0);
Validity=StrToTime(TimeYear(Time[0]) + "." + TimeMonth(Time[0]) + "." + TimeDay(Time[0]) + " 23:59")+(TimeZoneDiff*3600);
for(i=1;i<5;i++) { Order[i]=false; }
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
err = GetLastError();
if(OrderSymbol()==Symbol() && OrderMagicNumber()==(MagicNumber+1))
{
Order[1]=true;
}
else if (OrderSymbol()==Symbol() && OrderMagicNumber()==(MagicNumber+2))
{
Order[2]=true;
}
else if (OrderSymbol()=Показано первые 50% кода (символов: 8067)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.