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

champion.mq5

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

ea robofibo source v.11.2.mq4MetaTrader 4 · 1 общих теговᴇɴᴛʀʏ.txtTradingView · 1 общих теговzonestrategy.mqhMetaTrader 5 · 1 общих теговxauusd_simple_strategy7.mq4MetaTrader 4 · 1 общих теговxauusd_grok_presisi_scalper_v1.4 - anti detach.mq5MetaTrader 5 · 1 общих теговxauusd_gold_perfect.mq4MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Champion — торговый советник для MetaTrader 5, работающий на основе индикатора RSI. Советник анализирует текущее состояние рынка и выставляет отложенные ордера при достижении RSI заданных уровней. При наличии открытых позиций автоматически корректирует стоп-лосс и тейк-профит для защиты прибыли и ограничения убытков. Также советник отслеживает и при необходимости модифицирует активные отложенные ордера, поддерживая их на адекватном расстоянии от текущей цены. Все операции выполняются через стандартные торговые API MetaTrader 5 с предварительной проверкой корректности запросов.

Настройки программы

НастройкаОписание
Take Profit (TP) Тейк-профит — Уровень фиксации прибыли в пунктах для выставляемых и модифицируемых ордеров
Stop Loss (SL) Стоп-лосс — Уровень ограничения убытков в пунктах для выставляемых и модифицируемых ордеров
?????? RSI (RSIPeriod) Период RSI — Период расчёта индикатора RSI, используемого для определения условий входа
??????? RSI (RSILevel) Уровень RSI — Пороговое значение RSI, при достижении которого советник формирует сигналы для выставления отложенных ордеров
Получить полный код

Поиск по коду файла

#property version   "1.07"

input int TP        = 150;   // Take Profit
input int SL        = 50;    // Stop Loss
input int RSIPeriod = 14;    // ?????? RSI
input int RSILevel  = 30;    // ??????? RSI

MqlTradeRequest request;
MqlTradeResult result;
MqlTradeCheckResult check;
int rsiHandle;
double rsiVal[3];
double Ask,Bid,sl;
int i,Spread;
double Lots;
ulong StopLevel;

double volume()
  {
   Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/2000;
   Lots=MathMin(15,MathMax(0.1,Lots));
   Lots=NormalizeDouble(Lots,2);
   return(Lots);
  }

int OnInit()
  {
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
  {
  }

void OnTick()
  {
      // код доступен только после оплаты
   }

   CopyBuffer(rsiHandle,0,0,3,rsiVal);
   ArraySetAsSeries(rsiVal,true);

   Ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   Bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   Spread=int(SymbolInfoInteger(_Symbol,SYMBOL_SPREAD));
   StopLevel=SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);

   Comment(StringFormat("\n\n\nAsk = %G\nBid = %G\nSpread = %G\nStopLevel = %G",Ask,Bid,Spread,StopLevel));

   if(PositionsTotal()<1 && OrdersTotal()<1)
     {
      if(rsiVal[1]<RSILevel)
        {
         request.action = TRADE_ACTION_PENDING;
         request.symbol = _Symbol;
         request.volume = NormalizeDouble(volume()/3,2);
         request.price=NormalizeDouble(Ask+StopLevel*_Point,_Digits);
         request.sl = NormalizeDouble(request.price - SL*_Point,_Digits);
         request.tp = NormalizeDouble(request.price + TP*_Point,_Digits);
         request.deviation=0;
         request.type=ORDER_TYPE_BUY_STOP;
         request.type_filling=ORDER_FILLING_FOK;
         for(i=0;i<3;i++)
            {
             if(OrderCheck(request,check))
               {
                OrderSend(request,result);
                Print("?????????? ????? BuyStop");
               }
             Print(ResultRetcodeDescription(result.retcode));
            }        
        }

      if(rsiVal[1]>100-RSILevel)
        {
         request.action = TRADE_ACTION_PENDING;
         request.symbol = _Symbol;
         request.volume = NormalizeDouble(volume()/3,2);
         request.price=NormalizeDouble(Bid-StopLevel*_Point,_Digits);
         request.sl = NormalizeDouble(request.price + SL*_Point,_Digits);
         request.tp = NormalizeDouble(request.price - TP*_Point,_Digits);
         request.deviation=0;
         request.type=ORDER_TYPE_SELL_STOP;
         request.type_filling=ORDER_FILLING_FOK;
         for(i=0;i<3;i++)
            {
             if(OrderCheck(request,check))
               {
                OrderSend(request,result);
                Print("?????????? ????? SellStop");
               }
             Print(ResultRetcodeDescription(result.retcode));
            }                                
         }     

     }

   for(i=0;i<PositionsTotal();i++)
     {
      if(Symbol()==PositionGetSymbol(i))
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            sl=MathMax(PositionGetDouble(POSITION_PRICE_OPEN)+Spread*_Point,Bid-SL*_Point);

            if(sl>PositionGetDouble(POSITION_SL) && (Bid-StopLevel*_Point-Spread*_Point)>PositionGetDouble(POSITION_PRICE_OPEN))
              {
               request.action = TRADE_ACTION_SLTP;
               request.symbol = _Symbol;
               request.sl = NormalizeDouble(sl,_Digits);
               request.tp = PositionGetDouble(POSITION_TP);
               if(OrderCheck(request,check))
                 {
                  OrderSend(request,result);
                  Print("??????? ???? ????? ??????? Buy #",request.order);
                 } 
               else
                 {
                  Print(ResultRetcodeDescription(result.retcode));
                  return;
                 }
               return;
              }
           }

         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            sl=MathMin(PositionGetDouble(POSITION_PRICE_OPEN)-Spread*_Point,Ask+SL*_Point);

            if(sl<PositionGetDouble(POSITION_SL) && (PositionGetDouble(POSITION_PRICE_OPEN)-StopLevel*_Point-Spread*_Point)>Ask)
              {
               request.action = TRADE_ACTION_SLTP;
               request.symbol = _Symbol;
               request.sl = NormalizeDouble(sl,_Digits);
               request.tp = PositionGetDouble(POSITION_TP);
               if(OrderCheck(request,check))
                 {
                  OrderSend(request,result);
                  Print("??????? ???? ????? ??????? Sell #",request.order);
                 }   
               else
                 {
                  Print(ResultRetcodeDescription(result.retcode));
                  return;
                 }
               return;
              }
           }
        }
     }

   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      ulong order_ticket=OrderGetTicket(pos);
      if(OrderGetString(ORDER_S

Показано первые 50% кода (символов: 6571)

Что вы получите после оплаты

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода: 657 ₽