← К каталогу
Исходный код · ID 1563

2Symbols

2symbols1.0.mq5

Похожие материалы по тегам

! macd+.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!macd_adx.mq4MQL4 / MetaTrader 4 · 1 общих теговxauusd_gold_perfect.mq4MQL4 / MetaTrader 4 · 1 общих теговtm sniper pro.pineTradingView · 1 общих теговsource code of grid with 100 pips stop loss.mq4MQL4 / MetaTrader 4 · 1 общих теговsniper pro.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Этот советник для 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 и перейдите к оплате.

Стоимость полного кода
1 226,40₽ ≈ $14.99