sma_multihdege2.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «sma_multihdege2.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
SMA MultiHedge — советник для MetaTrader 4, который анализирует направление тренда базового инструмента по скользящей средней SMA и открывает позиции на базовом символе в направлении тренда. Советник также рассчитывает корреляцию между базовым инструментом и до трёх хедж-символов, открывая противоположные или совпадающие позиции при выполнении заданных условий корреляции. Лот рассчитывается автоматически на основе заданного риска от размера счёта или устанавливается вручную. При достижении целевой прибыли хедж-позиции закрываются. Советник поддерживает звуковые уведомления и отображение текущего состояния на графике.
Настройки программы
| Настройка | Описание |
|---|---|
| TradeAllowed | Разрешить торговлю — Разрешение на совершение торговых операций. При значении false советник не открывает и не закрывает позиции |
| periodSMA | Период SMA — Период простой скользящей средней SMA, используемой для определения направления тренда базового символа |
| cPeriod | Период корреляции — Период расчёта скользящей средней, используемой для определения корреляции между символами |
| BaseSymbol | Базовый символ — Базовый торговый символ, по которому анализируется тренд и открываются основные позиции |
| AutoLot | Авто лот — Автоматический расчёт размера лота на основе заданного риска от базового капитала счёта |
| MMBase | Основание управления капиталом — Основание для расчёта размера позиции: 1 — баланс, 2 — эквити, 3 — свободный маржинал |
| 10% by default (MaxRisk) | Максимальный риск — Максимальный риск в процентах от выбранного основания капитала при автоматическом расчёте лота |
| HedgeH1 | Хедж 1 — Включение или отключение первой хедж-сессии с соответствующим символом |
| HedgeH2 | Хедж 2 — Включение или отключение второй хедж-сессии с соответствующим символом |
| HedgeH3 | Хедж 3 — Включение или отключение третьей хедж-сессии с соответствующим символом |
| MagicNo | Магический номер — Уникальный номер магического идентификатора ордеров для группировки позиций советника |
| ShowStatus | Показывать статус — Отображение текущего баланса, эквити и информации о хедж-позициях в комментарии на графике |
| PlayAudio | Воспроизведение звука — Воспроизведение звуковых уведомлений при открытии и закрытии позиций |
Поиск по коду файла
#include <stdlib.mqh>
extern bool TradeAllowed = false;
extern string _........SMA.Zone.........="________________________________";
extern int periodSMA = 20;
extern string _........CorRelation.......="________________________________";
extern int cPeriod = 20;
extern string _........................._="________________________________";
extern string BaseSymbol = "GBPUSD";
extern bool AutoLot = false;
extern int MMBase = 3;
extern double MaxRisk = 0.1;// 10% by default
extern double Not.AutoLot.LotSize = 0.1;
extern string _........Hedge.Symbol......="________________________________";
extern bool HedgeH1 = true;
extern string H1.Symbol = "EURUSD";
extern bool H1.followBase = false;
extern double H1.LotsRatio = 2;
extern double H1.Expect.CorRelation = 0.88;
extern string _._._._._._._._._._._._._._="________________________________";
extern bool HedgeH2 = true;
extern string H2.Symbol = "USDCHF";
extern bool H2.followBase = true;
extern double H2.LotsRatio = 1.5;
extern double H2.Expect.CorRelation = -0.90;
extern string _.._.._.._.._.._.._.._.._.._="________________________________";
extern bool HedgeH3 = false;
extern string H3.Symbol = "USDJPY";
extern bool H3.followBase = true;
extern double H3.LotsRatio = 2;
extern double H3.Expect.CorRelation = -0.90;
extern string _.__.__.__.__.__.__.__.__.__="________________________________";
extern double Expect.Profit = 30;
extern int MagicNo = 111;
extern bool ShowStatus = true;
extern bool PlayAudio = false;
int BaseSP,
H1.SP,
H2.SP,
H3.SP,
BaseOP = -1,
H1.OP = -1,
H2.OP = -1,
H3.OP = -1,
up;
double Lot,
BaseOpen,
H1.Open, H2.Open, H3.Open,
BaseLots,
H1.Lots, H2.Lots, H3.Lots,
Baseswapshort,
Baseswaplong,
H1.swapshort, H2.swapshort, H3.swapshort,
H1.swaplong, H2.swaplong, H3.swaplong,
H1.Correlation,
H2.Correlation,
H3.Correlation,
LotSize,
TP2Close;
bool SResult = false, BResult = false, H1.profitswap, H2.profitswap, H3.profitswap;
bool SwapMode = true;
string H1.string = "", H2.string = "", H3.string = "", OrdComment = "";
int init()
{
// код доступен только после оплаты
}
int start()
{
// код доступен только после оплаты
}
LotSize = Not.AutoLot.LotSize;
TP2Close = Expect.Profit;
if(SMA(0) > SMA(1) && SMA(1) > SMA(2))
up = 1;
else
if(SMA(0) < SMA(1) && SMA(1) < SMA(2))
up = -1;
else
up= 0;
if(AutoLot)
{
BaseLots = Lots(BaseSymbol, MaxRisk) ;
H1.Lots = Lots(H1.Symbol, MaxRisk*H1.LotsRatio);
H2.Lots = Lots(H2.Symbol, MaxRisk*H2.LotsRatio);
H3.Lots = Lots(H3.Symbol, MaxRisk*H3.LotsRatio);
}
else
{
BaseLots = LotSize;
H1.Lots = NormalizeDouble(LotSize*H1.LotsRatio, 1);
H2.Lots = NormalizeDouble(LotSize*H2.LotsRatio, 1);
H3.Lots = NormalizeDouble(LotSize*H3.LotsRatio, 1);
}
BaseSP = MarketInfo(BaseSymbol, MODE_SPREAD);
if(BaseSP == 0)
BaseSP = MathRound((MarketInfo(BaseSymbol, MODE_ASK) -
MarketInfo(BaseSymbol, MODE_BID)) /
MarketInfo(BaseSymbol, MODE_POINT));
if(up == 1)
{
BaseOP = OP_BUY;
BaseOpen = MarketInfo(BaseSymbol, MODE_ASK);
}
if(up == -1)
{
BaseOP = OP_SELL;
BaseOpen = MarketInfo(BaseSymbol, MODE_BID);
}
if(H1.Symbol != "" && HedgeH1)
{
H1.Correlation = Cor(BaseSymbol, H1.Symbol);
H1.SP = MarketInfo(H1.Symbol, MODE_SPREAD);
if(H1.SP == 0)
H1.SP = MathRound((MarketInfo(H1.Symbol, MODE_ASK) -
MarketInfo(H1.Symbol, MODE_BID)) /
MarketInfo(H1.Symbol, MODE_POINT));
if(H1.Expect.CorRelation > 0 && H1.Correlation >= H1.Expect.CorRelation)
bool H1.meetCor = true;
else
if(H1.Expect.CorRelation < 0 && H1.Correlation <= H1.Expect.CorRelation)
H1.meetCor = true;
else
H1.meetCor = false;
if(up == 1)// base long
{
if(H1.followBase) // H.long
{
H1.OP = OP_BUY;
H1.Open = MarketInfo(H1.Symbol, MODE_ASK);
H1.profitswap = (((Baseswaplong*BaseLots) + (H1.swaplong*H1.Lots)) > 0);
}
else // H.short
{
H1.OP = OP_SELL;
H1.Open = MarketInfo(H1.Symbol, MODE_BID);
H1.profitswap = (((Baseswaplong*BaseLots) + (H1.swapshort*H1.Lots)) > 0);
}
}
if(up == -1) // base short
{
if(H1.followBase) // H.short
{
H1.OP = OP_SELL;
H1.Open = MarketInfo(H1.Symbol, MODE_BID);
H1.profitswap = (((Baseswaplong*BaseLots) + (H1.swapshort*H1.Lots)) > 0);
}
else //H.long
{
H1.OP = OP_BUY;
H1.Open = MarketInfo(H1.Symbol, MODE_ASK);
H1.profitswap = (((Baseswaplong*BaseLots) + (H1.swaplong*H1.Lots)) > 0);
}
}
H1.string = "\n--------------------------------"
+ "\n" + BaseSymbol + "->" + Val2String(BaseOP)
+ " ~ " + H1.Symbol + "->" + Val2String(H1.OP)
+ "\n" + BaseSymbol + "->" + DoubleToStr(BaseLots, 2)
+ " ~ " + H1.Symbol + "->" + DoubleToStr(H1.Lots, 2)
+ "\nFollow Base : " + bool2string(H1.followBase)
+ "\nRaito : " + DoubleToStr(H1.LotsRatio, 2)
+ "\nMagic No. : " + MagicNo
+ "\nCur Correlation : " + DoubleToStr(H1.Correlation, 2)
+ "\n" + "Expected Correlation : " + DoubleToStr(H1.Expect.CorRelation, 2)
+ "\nOverAllProfit : " + DoubleToStr(TotalSwapnProfit(MagicNo), 2)
+ "\nExpected : $" + DoubleToStr(TP2Close, 2);
}
else
H1.string = "";
if(H2.Symbol != "" && HedgeH2)
{
H2.Correlation = Cor(BaseSymbol, H2.Symbol);
H2.SP = MarketInfo(H2.Symbol, MODE_SPREAD);
if(H2.SP == 0)
H2.SP = MathRound((MarketInfo(H2.Symbol, MODE_ASK) -
MarketInfo(H2.Symbol, MODE_BID)) /
MarketInfo(H2.Symbol, MODE_POINT));
if(H2.Expect.CorRelation > 0 && H2.Correlation >= H2.Expect.CorRelation)
bool H2.meetCor = true;
else
if(H2.Expect.CorRelation < 0 && H2.Correlation <= H2.Expect.CorRelation)
H2.meetCor = true;
else
H2.meetCor = false;
if(up == 1) // base long
{
if(H2.followBase) // H.long
{
H2.OP = OP_BUY;
H2.Open = MarketInfo(H2.Symbol, MODE_ASK);
H2.profitswap = (((Baseswaplong*BaseLots) + (H2.swaplong*H2.Lots)) > 0);
}
else // H.short
{
H2.OP = OP_SELL;
H2.Open = MarketInfo(H2.Symbol, MODE_BID);
H2.profitswap = (((Baseswaplong*BaseLots) + (H2.swapshort*H2.Lots)) > 0);
}
}
if(up == -1) // base short
{
if(H2.followBase) // H.short
{
H2.OP = OP_SELL;
H2.Open = MarketInfo(H2.Symbol, MODE_BID);
H2.profitswap = (((Baseswaplong*BaseLots) + (H2.swapshort*H2.Lots)) > 0);
}
else // H.long
{
H2.OP = OP_BUY;
H2.Open = MarketInfo(H2.Symbol, MODE_ASK);
H2.profitswap = (((Baseswaplong*BaseLots) + (H2.swaplong*H2.Lots)) > 0);
}
}
H2.string = "\n--------------------------------"
+ "\n" + BaseSymbol + "->" + Val2String(BaseOP)
+ " ~ " + H2.Symbol+"->" + Val2String(H2.OP)
+ "\n" + BaseSymbol+"->" + DoubleToStr(BaseLots, 2)
+ " ~ " + H2.Symbol + "->" + DoubleToStr(H2.Lots, 2)
+ "\nFollow Base : " + bool2string(H2.followBase)
+ "\nRaito : " + DoubleToStr(H2.LotsRatio, 2)
+ "\nMagic No. : " + DoubleToStr(MagicNo+1, 0)
+ "\nCur Correlation : " + DoubleToStr(H2.Correlation, 2)
+ "\n" + "Expected Correlation : " + DoubleToStr(H2.Expect.CorRelation, 2)
+ "\nOverAllProfit : " + DoubleToStr(TotalSwapnProfit(MagicNo + 1), 2)
+ "\nExpected : $" + DoubleToStr(TP2Close, 2);
}
else
{
H2.string = "";
}
if(H3.Symbol != "" && HedgeH3)
{
H3.Correlation = Cor(BaseSymbol, H3.Symbol);
H3.SP = MarketInfo(H3.Symbol, MODE_SPREAD);
if(H3.SP == 0)
H3.SP = MathRound((MarketInfo(H3.Symbol, MODE_ASK) -
MarketInfo(H3.Symbol, MODE_BID)) /
MarketInfo(H3.Symbol, MODE_POINT));
if(H3.Expect.CorRelation > 0 && H3.Correlation >= H3.Expect.CorRelation)
bool H3.meetCor = true;
else
if(H3.Expect.CorRelation < 0 && H3.Correlation <= H3.Expect.CorRelation)
H3.meetCor = true;
else
H3.meetCor = false;
if(up == 1) // base long
{
if(H3.followBase) // H.long
{
H3.OP = OP_BUY;
H3.Open = MarketInfo(H3.Symbol, MODE_ASK);
H3.profitswap = (((Baseswaplong*BaseLots) + (H3.swaplong*H3.Lots)) > 0);
}
else // H.short
{
H3.OP = OP_SELL;
H3.Open = MarketInfo(H3.Symbol, MODE_BID);
H3.profitswap = (((Baseswaplong*BaseLots) + (H3.swapshort*H3.Lots)) > 0);
}
}
if(up == -1) // base short
{
if(H3.followBase) // H.short
{
H3.OP = OP_SELL;
H3.Open = MarketInfo(H3.Symbol, MODE_BID);
H3.profitswap = (((Baseswaplong*BaseLots) + (H3.swapshort*H3.Lots)) > 0);
}
else // H.long
{
H3.OP = OP_BUY;
H3.Open = MarketInfo(H3.Symbol, MODE_ASK);
H3.profitswap = (((Baseswaplong*BaseLots) + (H3.swaplong*H3.Lots)) > 0);
}
}
H3.string = "\n--------------------------------"
Показано первые 50% кода (символов: 13170)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.