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

my_first_adviser.mq4

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

ares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 1 общих тегов! cycle-identifier.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 1 общих теговprecisionflowea.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Данный продукт представляет собой торгового советника (Expert Advisor) для платформы MetaTrader 4 на языке MQL4. Советник автоматически анализирует ценовые данные, используя индикаторы RSI, скользящую среду (MA) и Bollinger Bands, и на основании полученных сигналов управляет торговыми позициями.

Продукт поддерживает открытие и закрытие ордеров, модификацию стоп-лоссов, а также расчёт оптимального объёма позиции с учётом настроенного параметра риска. Все торговые операции выполняются через стандартные торговые API MetaTrader 4.

Советник работает в рамках одного символа и использует магический номер для идентификации своих ордеров. Внутренняя логика содержит механизм защиты от одновременного наличия противоположных позиций.

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

НастройкаОписание
?????? ?????????? ??? RSI (RSI_Per) Период RSI — Период расчёта индикатора RSI
?????? ?????????? ??? MA (MA_Per) Период скользящей средней — Период расчёта скользящей средней
?????? ?????????? ??? Bollinger Bands (Bands_Per) Период Bollinger Bands — Период расчёта индикатора Bollinger Bands
????? ???????????????/??????????????? (Band_Range) Диапазон Bollinger Bands — Параметр, задающий диапазон/границу для Bollinger Bands
??? ??????????? 0..3 (SmoothType) Тип сглаживания — Тип сглаживания в диапазоне от 0 до 3
??????? ????? 0..1 (MaximumRisk) Максимальный риск — Параметр риска в диапазоне от 0 до 1, влияющий на расчёт размера лота
Получить полный код

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

#include <stderror.mqh>
#include <stdlib.mqh>
#define MAGICMA  20070722

extern int RSI_Per = 16;           //?????? ?????????? ??? RSI
extern int MA_Per = 6;             //?????? ?????????? ??? MA
extern int Bands_Per = 60;         //?????? ?????????? ??? Bollinger Bands
extern int Band_Range = 33;        //????? ???????????????/??????????????? 
extern int SmoothType = 2;         //??? ??????????? 0..3
extern double MaximumRisk =0.777;  //??????? ????? 0..1

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

int deinit()
  {
   return(0);
  }

int GetErrorDescription()
   {
      int err=GetLastError();
      Print("error(",err,"): ",ErrorDescription(err));
      return(0);
   }

int CalculateCurrentOrders()
  {
   int buys=0,sells=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
   return (buys-sells);
}

double LotsOptimized(double Price)
{
 double LotValue = MarketInfo(Symbol(),MODE_LOTSIZE);   //????????? 1-?? ????
 double FreeMargin = AccountFreeMargin();               //????????? ???????? ?? ?????
 double Leverage = AccountLeverage();                   //?????
 double MinLot = MarketInfo(Symbol(),MODE_MINLOT);      //??????????? ?????? ????
 double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);      //???????????? ?????? ????
 double Res = (FreeMargin*Leverage*MaximumRisk)/(Price*LotValue);
 if (NormalizeDouble(MinLot,1) > NormalizeDouble(Res,1)) Res=0;
 if (NormalizeDouble(MaxLot,1) < NormalizeDouble(Res,1)) Res=MaxLot;
 return (NormalizeDouble(Res,1));
}

double Culculate_SL(int Type, double Price, double Delta)
{
double StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);      //?????????? ?????????? ???????
double Spred = MarketInfo(Symbol(),MODE_SPREAD);             //??????? ????? ????? ??????? ? ???????  
double StopLossMin = Price - Type*(Spred+StopLevel)*Point;   //?????????? ?????????? ????-???? ?? ???? 
double StopLossCur = Price*(1-Type*Delta/2000);
StopLossMin = NormalizeDouble(StopLossMin,Digits);
StopLossCur = NormalizeDouble(StopLossCur,Digits);
if (StopLossMin<StopLossCur && Type==1)
   StopLossCur = StopLossMin;
if (StopLossMin>StopLossCur && Type==-1)
   StopLossCur=StopLossMin;         
return (StopLossCur);
}

void OpenOrders(int Type, double Price, color ArrowColor, double Delta)
{
   if (CalculateCurrentOrders()!=0) return;
   double StopLoss = Culculate_SL(Type,Price,Delta);
   int TypeOrder;
   if (Type==1) TypeOrder = OP_BUY; else TypeOrder = OP_SELL;
   double Lots = LotsOptimized(Price);
   if (Lots>0)
      {
 

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

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

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

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

Стоимость полного кода
423,60₽ ≈ $5.18