MultiHedgeEA
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «multihedgeea_v1[1].3.temp.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
MultiHedgeEA — торговый советник для MetaTrader 4, позволяющий одновременно управлять позициями на четырёх валютных парах. Советник открывает и отслеживает ордера на выбранных символах с возможностью настройки направления (лонг/шорт) и соотношения лотов для каждой пары отдельно.
Внутренний механизм включает расчёт корреляции между парами, оценку диапазонов ценовых движений через скользящие средние, а также учёт свопов и профита в пунктах или долларах. Советник отображает информацию об открытых позициях на графике и поддерживает email-уведомления.
Управление рисками включает настройку максимального убытка, целевого профита, автоматическое закрытие позиций при достижении условий, а также модуль управления денежными средствами с расчётом лотов на основе свободного маржинального баланса.
Настройки программы
| Настройка | Описание |
|---|---|
| Expert Name and first part of comment line (eaname) | Имя советника — Имя советника и начало строки комментария |
| Magic Number ( 0 - for All positions) (Magic) | Магический номер — Магический номер для идентификации позиций советника; 0 — для всех позиций |
| Set to false to prevent an entry after an exit (Autotrade) | Автотрейд — При значении false блокирует вход в сделку после выхода |
| Symbol1 | Символ 1 — Название первой валютной пары |
| Set to true to put long orders on the second pair (Symbol1isLong) | Направление 1 — При значении true устанавливает направление ордера на покупку для первой пары |
| Ratio1 | Соотношение лотов 1 — Соотношение лотов для первой валютной пары |
| Symbol2 | Символ 2 — Название второй валютной пары |
| Set to true to put long orders on the second pair (Symbol2isLong) | Направление 2 — При значении true устанавливает направление ордера на покупку для второй пары |
| Ratio2 | Соотношение лотов 2 — Соотношение лотов для второй валютной пары |
| Symbol3 | Символ 3 — Название третьей валютной пары |
| Set to true to put long orders on the second pair (Symbol3isLong) | Направление 3 — При значении true устанавливает направление ордера на покупку для третьей пары |
| Ratio3 | Соотношение лотов 3 — Соотношение лотов для третьей валютной пары |
| Symbol4 | Символ 4 — Название четвёртой валютной пары |
| Set to true to put long orders on the second pair (Symbol4isLong) | Направление 4 — При значении true устанавливает направление ордера на покупку для четвёртой пары |
| Ratio4 | Соотношение лотов 4 — Соотношение лотов для четвёртой валютной пары |
| Slippage | Проскальзывание — Допустимое проскальзывание в пунктах |
| Lotsizes | Размер лотов — Текстовый параметр с подсказкой по настройке соотношения лотов |
| Lots for first pair if MM is turned off (Lots) | Лоты — Количество лотов для первой пары при отключённом управлении денежными средствами |
| UseAutoRatio | Автоматическое соотношение лотов — При значении true автоматически рассчитывает соотношение лотов на основе диапазонов пар |
| SMA_Value_for_Range | Период скользящей средней для диапазона — Период скользящей средней для расчёта диапазона ценовых движений |
| Data | Данные — Текстовый параметр для пользовательских данных |
| Stop of Manage Account switch(Close All Trades) (StopManageAcc) | Остановка управления счётом — При значении true принудительно закрывает все сделки |
| Maximum total loss in pips or USD (MaxLoss) | Максимальный убыток — Максимальный совокупный убыток в пунктах или долларах США |
| If the correlation is used to check before put new Orders (cPeriod) | Период корреляции — Период для проверки корреляции перед открытием новых ордеров |
| Data4 | Данные свопов — Текстовый параметр для настроек свопов |
| Select true if you want to use swap on profit calculation (UseSwap) | Учёт свопов — При значении true учитывает свопы при расчёте прибыли |
| Data5 | Данные управления риском — Текстовый параметр для настроек управления денежными средствами |
| Profit target in pips or U (ProfitTarget) | Целевой профит — Целевой профит в пунктах или долларах США |
| MoneyManagement | Управление денежными средствами — Включает или отключает модуль управления денежными средствами |
| Risk (Risk) | Риск — Коэффициент риска, используемый при расчёте размера позиций |
| When the price of Bolliner pair passes the Upper Bollinger close all trades (AutoProfit) | Автоматический профит — При достижении цены верхней полосы Боллинджера на одной из пар закрывает все сделки |
| AutoProfitRatio | Коэффициент автопрофита — Числовой коэффициент, используемый при расчёте целевого профита для автоматического закрытия |
| EmailReport | Email-отчёт — При значении true отправляет email-отчёт при закрытии позиций |
Поиск по коду файла
#include <stdlib.mqh>
extern string eaname = "MH-V1.3"; // Expert Name and first part of comment line
extern int Magic = 6464; // Magic Number ( 0 - for All positions)
extern bool Autotrade = true; // Set to false to prevent an entry after an exit
extern string Symbol1 = "USDCHF";
extern bool Symbol1isLong = false; // Set to true to put long orders on the second pair
extern double Ratio1 = 1;
extern string Symbol2 = "USDJPY";
extern bool Symbol2isLong = false; // Set to true to put long orders on the second pair
extern double Ratio2 = 1;
extern string Symbol3 = "EURUSD";
extern bool Symbol3isLong = false; // Set to true to put long orders on the second pair
extern double Ratio3 = 1;
extern string Symbol4 = "GBPUSD";
extern bool Symbol4isLong = false; // Set to true to put long orders on the second pair
extern double Ratio4 = 1;
extern double Slippage = 3;
extern string Lotsizes = "Set Ratio to 1 to use equal";
extern double Lots = 1; // Lots for first pair if MM is turned off
extern bool UseAutoRatio = true;
extern double SMA_Value_for_Range = 200;
extern string Data = " Input Data ";
extern bool StopManageAcc = false; // Stop of Manage Account switch(Close All Trades)
extern double MaxLoss = 0; // Maximum total loss in pips or USD
extern int cPeriod = 20; // If the correlation is used to check before put new Orders
extern string Data4 = "SWAP Settings";
extern bool UseSwap = true; // Select true if you want to use swap on profit calculation
extern string Data5 = "Money Management";
bool AccountIsMicro = false; // Set true if you use a micro account
extern double ProfitTarget = 50; // Profit target in pips or U
bool UsePips = false;
extern bool MoneyManagement = true;
extern double Risk = 20; // Risk
extern bool AutoProfit = true; // When the price of Bolliner pair passes the Upper Bollinger close all trades
extern double AutoProfitRatio = 1;
extern bool EmailReport = false;
string comment = "";
string eBody = "";
string eSubject = "";
string TradeSymbol ="";
int totalPips=0;
double totalProfits=0;
double BandsLower = 0;
double BandsUpper = 0;
bool CloseSignal=false;
bool signal1=true;
bool signal2=true;
double valueswap = 0;
double Correlation;
double Bands;
double OrderLots1,OrderLots2,OrderLots3,OrderLots4;
double AccountSize;
double Total_Lots;
int ticket1=0
,ticket2=0
,Symbol1SP
,Symbol2SP
,Order1=0
,Order2=0
,Order3=0
,Order4=0
,c1=0
,c2=0
,Symbol1OP
,Symbol2OP
,Symbol3OP
,Symbol4OP
,Symbol1Mode
,Symbol2Mode
,Symbol3Mode
,Symbol4Mode
,numords=0
;
string USD = "USD"; // Added so that PipCost could handle InterbankFx Mini accounts
int init()
{
// код доступен только после оплаты
}
int ScanOpenTrades()
{
Order1=0;Order2=0;Order3=0;Order4=0;
int total = OrdersTotal();
int numords = 0;
for(int cnt=0; cnt<=total-1; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(Magic > 0) if(OrderMagicNumber() == Magic) numords++;
{
if(OrderType()==OP_SELL && OrderMagicNumber() == Magic && OrderSymbol()==Symbol1)Order1 += 1;
if(OrderType()==OP_SELL && OrderMagicNumber() == Magic && OrderSymbol()==Symbol2)Order2 += 1;
if(OrderType()==OP_SELL && OrderMagicNumber() == Magic && OrderSymbol()==Symbol3)Order3 += 1;
if(OrderType()==OP_SELL && OrderMagicNumber() == Magic && OrderSymbol()==Symbol4)Order4 += 1;
if(OrderType()==OP_BUY && OrderMagicNumber() == Magic && OrderSymbol()==Symbol1)Order1 += 1;
if(OrderType()==OP_BUY && OrderMagicNumber() == Magic && OrderSymbol()==Symbol2)Order2 += 1;
if(OrderType()==OP_BUY && OrderMagicNumber() == Magic && OrderSymbol()==Symbol3)Order3 += 1;
if(OrderType()==OP_BUY && OrderMagicNumber() == Magic && OrderSymbol()==Symbol4)Order4 += 1;
}
}
return(numords);
}
double PipCost (string TradeSymbol) {
double Base, Cost;
string TS_13, TS_46, TS_4L;
TS_13 = StringSubstr (TradeSymbol, 0, 3);
TS_46 = StringSubstr (TradeSymbol, 3, 3);
TS_4L = StringSubstr (TradeSymbol, 3, StringLen(TradeSymbol)-3);
Base = MarketInfo (TradeSymbol, MODE_LOTSIZE) * MarketInfo (TradeSymbol,
MODE_POINT);
if ( TS_46 == "USD" )
Cost = Base;
else if ( TS_13 == "USD" )
Cost = Base / MarketInfo (TradeSymbol, MODE_BID);
else if ( PairExists ("USD"+TS_4L) )
Cost = Base / MarketInfo ("USD"+TS_4L, MODE_BID);
else
Cost = Base * MarketInfo (TS_46+"USD" , MODE_BID);
return(Cost) ;
}
bool PairExists (string TradeSymbol) {
return ( MarketInfo (TradeSymbol, MODE_LOTSIZE) > 0 );
}
string GenerateComment(string eaname, int Magic)
{
return (StringConcatenate(eaname, "-", Magic));
}
void OpenOrdClose()
{
int total=OrdersTotal();
for (int cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
int mode=OrderType();
bool res = false;
bool condition = false;
if ( Magic>0 && OrderMagicNumber()==Magic ) condition = true;
else if ( Magic==0 ) condition = true;
if (condition && ( mode==OP_BUY || mode==OP_SELL ))
{
if (EmailReport) SendMail(eSubject,eBody);
if(mode==OP_BUY)
{
res = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,Yellow);
if( !res )
{
Print(" BUY: OrderClose failed with error #",GetLastError());
Print(" Ticket=",OrderTicket());
Sleep(3000);
}
break;
}
else
if( mode == OP_SELL)
{
res = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),3,White);
if( !res )
{
Print(" SELL: OrderClose failed with error #",GetLastError());
Print(" Ticket=",OrderTicket());
Sleep(3000);
}
break;
}
}
}
}
void TotalProfit()
{
int total=OrdersTotal();
totalPips = 0;
totalProfits = 0;
for (int cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
int mode=OrderType();
bool condition = false;
iПоказано первые 50% кода (символов: 11448)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.