2Symbols
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «2symbols1.0.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Этот советник для MetaTrader 5 работает одновременно с двумя валютными парами, заданными в настройках. Он использует индикатор MACD для формирования сигналов на покупку и продажу, а также отслеживает открытые позиции по каждой паре отдельно. Советник может управлять позициями, закрывая их при достижении определённых условий по прибыли или убытку, и открывать новые сделки в зависимости от выбранного режима торговли.
Основная логика включает три режима торговли, которые влияют на закрытие и открытие позиций. Советник также контролирует общую прибыль по обеим парам и может закрыть все позиции при достижении заданного уровня прибыли или при достижении целевого значения эквити. Управление объёмом позиций осуществляется с учётом максимального лота и множителя для каждой пары.
Советник не гарантирует прибыль и предназначен для использования на реальных счетах с осторожностью. Все параметры настраиваются через входные переменные, что позволяет адаптировать его под различные торговые стратегии и условия рынка.
Настройки программы
| Настройка | Описание |
|---|---|
| Expert_Title | Название эксперта — Название советника, отображаемое в терминале. |
| TradeMode1 | Режим торговли 1 — Разрешает закрытие позиции по текущему символу при усреднении. |
| TradeMode2 | Режим торговли 2 — Разрешает закрытие позиции по противоположному символу при усреднении, если по нему есть прибыль. |
| TradeMode3 | Режим торговли 3 — Включает дополнительное условие для закрытия позиций по прибыли. |
| Symbol1 | Символ 1 — Название первого торгового инструмента. |
| Symbol2 | Символ 2 — Название второго торгового инструмента. |
| StopLoss1 | Стоп-лосс 1 — Уровень стоп-лосса в пунктах для первой валютной пары (0 — не используется). |
| StopLoss2 | Стоп-лосс 2 — Уровень стоп-лосса в пунктах для второй валютной пары (0 — не используется). |
| TakeProfit1 | Тейк-профит 1 — Уровень тейк-профита в пунктах для первой валютной пары (0 — не используется). |
| TakeProfit2 | Тейк-профит 2 — Уровень тейк-профита в пунктах для второй валютной пары (0 — не используется). |
| Maxlot1 | Максимальный лот 1 — Максимально допустимый объём позиции для первой валютной пары. |
| Maxlot2 | Максимальный лот 2 — Максимально допустимый объём позиции для второй валютной пары. |
| Step1 | Шаг 1 — Шаг в пунктах для усреднения позиции по первой валютной паре. |
| Step2 | Шаг 2 — Шаг в пунктах для усреднения позиции по второй валютной паре. |
| Proffactor1 | Фактор прибыли 1 — Коэффициент для определения уровня прибыли при закрытии позиции по первой паре. |
| Proffactor2 | Фактор прибыли 2 — Коэффициент для определения уровня прибыли при закрытии позиции по второй паре. |
| ProfitAll | Общая прибыль — Общая прибыль по обеим парам, при достижении которой все позиции закрываются. |
| Lots1 | Лот 1 — Начальный объём лота для первой валютной пары. |
| Lots2 | Лот 2 — Начальный объём лота для второй валютной пары. |
| Mult1 | Множитель 1 — Множитель объёма для усреднения позиции по первой валютной паре. |
| Mult2 | Множитель 2 — Множитель объёма для усреднения позиции по второй валютной паре. |
| Delta | Дельта — Коэффициент для сравнения текущего эквити с балансом при включённом третьем режиме торговли. |
| Magic1 | Магическое число 1 — Уникальный идентификатор (магическое число) для позиций первой валютной пары. |
| Magic2 | Магическое число 2 — Уникальный идентификатор (магическое число) для позиций второй валютной пары. |
| TargetEquity | Целевое эквити — Целевое значение эквити, при достижении которого закрываются все позиции. |
| Fast | Быстрый период — Период быстрой скользящей средней для индикатора MACD. |
| Slow | Медленный период — Период медленной скользящей средней для индикатора MACD. |
| Sign | Сигнальный период — Период сигнальной линии для индикатора MACD. |
Поиск по коду файла
#property version "1.00"
input string Expert_Title ="2Symbols";
input bool TradeMode1 =true;
input bool TradeMode2 =true;
input bool TradeMode3 =true;
input string Symbol1 ="EURUSD";
input string Symbol2 ="USDCHF";
input double StopLoss1 =0;
input double StopLoss2 =0;
input double TakeProfit1 =0;
input double TakeProfit2 =0;
input int Maxlot1 =5;
input int Maxlot2 =5;
input int Step1 =400;
input int Step2 =800;
input double Proffactor1 =1150;
input double Proffactor2 =810;
input double ProfitAll =210;
input double Lots1 =3.7;
input double Lots2 =4.8;
input double Mult1 =2.0;
input double Mult2 =2.2;
input double Delta =1.1;
input long Magic1 =555;
input long Magic2 =556;
input int TargetEquity =400;
input int Fast=65;
input int Slow=143;
input int Sign=5;
double Target=0;
double openprice1,openprice2;
int MACD;
int dig1,dig2;
void OnInit()
{
// код доступен только после оплаты
}
bool MACDSignal(bool &SetBuy,bool &SetSell)
{
if(Bars(Symbol1,0)<100) return(false);
static int Recount;
if(IsNewBar() || Recount)
{
double Ind[2],Sig[3];
SetSell=false;
SetBuy=false;
Recount=false;
if(CopyBuffer(MACD,0,1,2,Ind)<0) Recount=true;
if(CopyBuffer(MACD,1,1,3,Sig)<0) Recount=true;
if(Recount==true) return(false);
if(Ind[0]>0 && Ind[1]<0) SetSell=true;
if(Ind[0]<0 && Ind[1]>0) SetBuy=true;
if(Ind[1]<0 && Sig[0]<Sig[1] && Sig[1]>Sig[2]) SetSell=true;
if(Ind[1]>0 && Sig[0]>Sig[1] && Sig[1]<Sig[2]) SetBuy=true;
return(true);
}
return(false);
}
bool IsNewBar()
{
static datetime Told;
datetime Tnew[1];
CopyTime(Symbol1,PERIOD_CURRENT,0,1,Tnew);
if(Tnew[0]!=Told)
{
Told=Tnew[0];
return(true);
}
return(false);
}
void OnTick()
{
// код доступен только после оплаты
}
static bool SetBuy,SetSell;
MACDSignal (SetBuy,SetSell);
double Bal=AccountInfoDouble(ACCOUNT_BALANCE);
double Equity=AccountInfoDouble(ACCOUNT_EQUITY);
double profit1=0;double profit2=0;
double minLot1 = SymbolInfoDouble(Symbol1,SYMBOL_VOLUME_MIN);
double maxLot1 = SymbolInfoDouble(Symbol1,SYMBOL_VOLUME_LIMIT);
double minLot2 = SymbolInfoDouble(Symbol2,SYMBOL_VOLUME_MIN);
double maxLot2 = SymbolInfoDouble(Symbol2,SYMBOL_VOLUME_LIMIT);
if (minLot1==0.01) dig1=2;
if (minLot1==0.1) dig1=1;
if (minLot2==0.01) dig2=2;
if (minLot2==0.1) dig2=1;
if (PositionsTotal()<1) Target=AccountInfoDouble(ACCOUNT_EQUITY)+TargetEquity;
if (Target==0) Target=AccountInfoDouble(ACCOUNT_BALANCE)+TargetEquity;
for (int cnt=0;cnt<PositionsTotal();cnt++)
{
if (PositionGetSymbol(cnt) == Symbol1 && PositionGetInteger(POSITION_MAGIC) == Magic1)
profit1 = PositionGetDouble(POSITION_PROFIT) ;
if (PositionGetSymbol(cnt) == Symbol2 && PositionGetInteger(POSITION_MAGIC) == Magic2)
profit2 = PositionGetDouble(POSITION_PROFIT);
}
if (PositionsTotal()>0)
{
if (AccountInfoDouble(ACCOUNT_EQUITY)+(profit1+profit2)>=Target)
{
ClosePosition(Magic1, Symbol1);
ClosePosition(Magic2, Symbol2);
Target=AccountInfoDouble(ACCOUNT_EQUITY)+TargetEquity;
}
if ((profit1+profit2)>=ProfitAll) {ClosePosition(Magic1, Symbol1);ClosePosition(Magic2, Symbol2);}
if ((TradeMode3==false && (profit1+profit2)>0) || (TradeMode3 && Equity>=Bal*Delta))
{
if (profit1>0 && SymbolInfoDouble(Symbol1,SYMBOL_BID)<=openprice1-Proffactor1*_Point && SetBuy==true) {ClosePosition(Magic1, Symbol1);}
if (profit1>0 && SymbolInfoDouble(Symbol1,SYMBOL_ASK)>=openprice1+Proffactor1*_Point && SetSell==true) {ClosePosition(Magic1, Symbol1);}
if (profit2>0 && SymbolInfoDouble(Symbol2,SYMBOL_BID)<=openprice2-Proffactor2*_Point && SetBuy==true) {ClosePosition(Magic2, Symbol2);}
if (profit2>0 && SymbolInfoDouble(Symbol2,SYMBOL_ASK)>=openprice2+Proffactor2*_Point && SetSell==true) {ClosePosition(Magic2, Symbol2);}
}
}
if (PositionsTotal()==2)
{
for (int i=0;i<PositionsTotal();i++)
{
if (PositionGetSymbol(i)==Symbol1)
{
PositionSelect(Symbol1);
if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && Mult1>0
&& SymbolInfoDouble(Symbol1,SYMBOL_ASK)<=(openprice1-Step1*_Point)
&& SetBuy && PositionGetDouble(POSITION_VOLUME)<Maxlot1)
{
if (TradeMode1) ClosePosition(Magic1, Symbol1);
if (TradeMode2 && profit2>0) ClosePosition(Magic2, Symbol2);
PositionSelect(Symbol1);
MqlTradeRequest request={0};
request.action=TRADE_ACTION_DEAL;
request.magic=Magic1;
request.symbol=Symbol1;
if (NormalizeDouble(PositionGetDouble(POSITION_VOLUME)+Mult1,dig1)<=Maxlot1)
request.volume=NormalizeDouble(Mult1,dig1);
if (NormalizeDouble(PositionGetDouble(POSITION_VOLUME)+Mult1,dig1)>Maxlot1)
request.volume=NormalizeDouble(Maxlot1-PositionGetDouble(POSITION_VOLUME),dig1);
request.type_filling=ORDER_FILLING_FOK;
if( StopLoss1 == 0 ) request.sl = 0 ; else request.sl=SymbolInfoDouble(Symbol1,SYMBOL_ASK) - StopLoss1 * _Point;
if( TakeProfit1 == 0 ) request.tp = 0 ; else request.tp=SymbolInfoDouble(Symbol1,SYMBOL_ASK) + TakeProfit1 * _Point;
request.type=ORDER_TYPE_BUY;
request.price=SymbolInfoDouble(Symbol1,SYMBOL_ASK);
MqlTradeResult result={0};
OrderSend(request,result);
openprice1=SymbolInfoDouble(Symbol1,SYMBOL_ASK);
}
if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && Mult1>0
&& SymbolInfoDouble(Symbol1,SYMBOL_BID)>=(openprice1+Step1*_Point)
&& SetSell && PositionGetDouble(POSITION_VOLUME)<Maxlot1)
{
if (TradeMode1) ClosePosition(Magic1, Symbol1);
if (TradeMode2 && profit2>0) ClosePosition(Magic2, Symbol2);
PositionSelect(Symbol1);
MqlTradeRequest request={0};
request.action=TRADE_ACTION_DEAL;
request.magic=Magic1;
request.symbol=Symbol1;
if (NormalizeDouble(PositionGetDouble(POSITION_VOLUME)+Mult1,dig1)<=Maxlot1)
request.volume=NormalizeDouble(Mult1,dig1);
if (NormalizeDouble(PositionGetDouble(POSITION_VOLUME)+Mult1,dig1)>Maxlot1)
request.volume=NormalizeDouble(Maxlot1-PositionGetDouble(POSITION_VOLUME),dig1);
request.type_filling=ORDER_FILLING_FOK;
if( StopLoss1 == 0 ) request.sl = 0 ; else request.sl=SymbolInfoDouble(Symbol1,SYMBOL_BID) - StopLoss1 * _Point;
if( TakeProfit1 == 0 ) request.tp = 0 ; else request.tp=SymbolInfoDouble(Symbol1,SYMBOL_BID) + TakeProfit1 * _Point;
request.type=ORDER_TYPE_SELL;
request.price=SymbolInfoDouble(Symbol1,SYMBOL_BID);
MqlTradeResult result={0};
OrderSend(request,result);
openprice1=SymbolInfoDouble(Symbol1,SYMBOL_BID);
}
}
if (PositionGetSymbol(i)==Symbol2)
{
PositionSelect(Symbol2);
if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && Mult2>0
&& SymbolInfoDouble(Symbol2,SYMBOL_ASK)<=(openprice2-Step2*_Point)
&& SetBuy && PositionGetDouble(POSITION_VOLUME)<Maxlot2)
{
if (TradeMode1) ClosePosition(Magic2, Symbol2);
if (TradeMode2 && profit1>0) ClosePosition(Magic1, Symbol1);
PositionSelect(Symbol2);
MqlTradeRequest request={0};
request.action=TRADE_ACTION_DEAL;
request.magic=Magic2;
request.symbol=Symbol2;
if (NormalizeDouble(PositionGetDouble(POSITION_VOLUME)+Mult2,dig2)<=Maxlot2)
request.volume=NormalizeDouble(Mult2,dig2);
if (NormalizeDouble(PositionGetDouble(POSITION_VOLUME)+Mult2,dig2)>Maxlot2)
Показано первые 50% кода (символов: 12264)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.