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

Liquidex

liquidex_v1@lifeindreamsworld.mq4
Вы автор или правообладатель?

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

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

О программе

Исходный файл представляет собой советник для MetaTrader 4, написанный на языке MQL4. В коде объявлены функции init() и start(), а также вспомогательные функции PrintLineLine(), DrawLine(), GetHLineValue() и strtf(). Советник использует стандартные библиотечные функции MQL4, такие как iMA(), OrderSend(), OrderModify(), MarketInfo() и другие. В коде присутствуют внешние параметры (extern), которые задают настройки торговли: фильтр диапазона, магический номер, комментарий к сделкам, стоп-лосс, минимальный и максимальный лот, риск, максимальный спред с комиссией, параметры трейлинга, период и метод скользящей средней, комиссия по умолчанию и текстовые примечания. Логика советника включает расчёт скользящей средней, анализ диапазона свечи, выставление отложенных ордеров и управление позициями. Также отображается информационное сообщение на графике. Точные алгоритмы и условия не раскрываются.

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

НастройкаОписание
RangeFilter Фильтр диапазона — Порог диапазона свечи (в пунктах), используемый для фильтрации сигналов.
MagicNumber Магический номер — Уникальный идентификатор (магический номер) для распознавания ордеров советника.
TradeComment Комментарий к сделке — Текстовый комментарий, добавляемый к торговым ордерам.
StopLoss Стоп-лосс (пункты) — Размер стоп-лосса в пунктах.
MinLots Минимальный лот — Минимальный размер торгового лота.
MaxLots Максимальный лот — Максимальный размер торгового лота.
Risk Риск (%) — Уровень риска в процентах, используемый для расчёта размера лота.
MaxSpreadWithCommission Максимальный спред с комиссией — Максимально допустимый спред с учётом комиссии (в пунктах), при превышении которого торговля приостанавливается.
TrailingLimit Лимит трейлинга — Лимит трейлинга в пунктах, используемый для корректировки отложенных ордеров.
TrailingDistance Дистанция трейлинга — Расстояние трейлинг-стопа в пунктах.
MAPeriod Период скользящей средней — Период скользящей средней, используемой для анализа.
MAShift Сдвиг скользящей средней — Сдвиг скользящей средней относительно текущего бара.
MAMethod Метод скользящей средней — Метод сглаживания скользящей средней: 0 — SMA, 1 — EMA, 2 — SMMA, 3 — LWMA.
DefaultCommisionPoints Комиссия по умолчанию (пункты) — Значение комиссии в пунктах, используемое по умолчанию, если не удалось определить из истории сделок.
RangeFilterNote Примечание к фильтру диапазона — Текстовая подсказка с рекомендуемыми значениями фильтра диапазона для разных режимов.
MAMethodNote Примечание к методу MA — Текстовая подсказка с расшифровкой значений параметра MAMethod.
Получить полный код

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

#property show_inputs

#include <stdlib.mqh>

extern int RangeFilter = 20;
extern int MagicNumber = 293875;
extern string TradeComment = "Liquidex";
extern int StopLoss = 30;
extern double MinLots = 0.01;
extern double MaxLots = 100000.0;
extern double Risk = 25.0;
extern double MaxSpreadWithCommission = 15.0;
extern int TrailingLimit = 15;
extern int TrailingDistance = 15;
extern int MAPeriod = 3;
extern int MAShift = 0;
extern int MAMethod = MODE_LWMA;
extern double DefaultCommisionPoints = 0;

extern string RangeFilterNote = "H-S 0-0: 250 0-1: 300 1-0: 80 1-1: 250";
extern string MAMethodNote = "SMA: 0 EMA: 1 SMMA: 2 LWMA 3";

int digits = 0;
double point = 0.0;
int lotsDigits;
double minLots;
double maxLots;

double risk;
double maxSpreadWithCommission;
double trailingLimit;
double trailingDistance;
double rangeFilter;

int slippage = 3;
bool gotCommissionPointsFromTrade;
double commissionPoints;
double spreadHistory[30];
int spreadHistoryCount = 0;
double last_history_check;

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

int start()
{
      // код доступен только после оплаты
   }
   int errorCode;
   string errorMessage;

   int ticket;
   double openPrice;
   bool modified;
   double orderOpenPrice;
   double orderStopLoss;
   double orderTakeProfit;
   double stopLoss;
   double high = iHigh(NULL, 0, 0);
   double low = iLow(NULL, 0, 0);
   double open = iOpen(NULL, 0, 0);

   double ma = iMA(NULL, 0, MAPeriod, MAShift, MAMethod, PRICE_CLOSE, 0);

   if (!gotCommissionPointsFromTrade)
   {
      for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
      {
         if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
         {
            continue;
         }

         if (OrderProfit() == 0.0)
         {
            continue;
         }
         if (OrderClosePrice() == OrderOpenPrice())
         {
            continue;
         }
         if (OrderSymbol() != Symbol())
         {
            continue;
         }

         gotCommissionPointsFromTrade = true;
         double pipRate = MathAbs(OrderProfit() / (OrderClosePrice() - OrderOpenPrice()));
         commissionPoints = (-OrderCommission()) / pipRate;
         Print("CommissionPoints: " + DoubleToStr(commissionPoints, digits));

         break;
      }
   }
   double spread = Ask - Bid;
   ArrayCopy(spreadHistory, spreadHistory, 0, 1, 29);
   spreadHistory[29] = spread;
   if (spreadHistoryCount < 30)
   {
      spreadHistoryCount++;
   }
   double spreadHistorySum = 0;
   i = 29;
   for (int count_8 = 0; count_8 < spreadHistoryCount; count_8++)
   {
      spreadHistorySum += spreadHistory[i];
      i--;
   }
   double spreadAverage = spreadHistorySum / spreadHistoryCount;
   double askWithCommission = NormalizeDouble(Ask + commissionPoints, digits);
   double bidWithCommission = NormalizeDouble(Bid - commissionPoints, digits);
   double spreadAverageWithCommission = NormalizeDouble(spreadAverage + commissionPoints, digits + 1);

   double range = high - low;

   if (range > rangeFilter)
   { 
      if (Bid < ma && open>Bid)
      {
         int direction = +1; // SELL
      }
      else if (Bid > ma && open<Bid)
      {
         direction = -1; // BUY
      }
   }    

   for(i=OrdersHistoryTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==True)
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() ==MagicNumber && OrderType()<=1)
         {
            last_history_check=GetHLineValue("last_history_check_"+Symbol()+strtf(Period())+"_"+MagicNumber);
            if(OrderCloseTime()<last_history_check) break;    
            else if(OrderCloseTime()>last_history_check)
            {
               int tck;
               double money2 = (AccountBalance() * AccountLeverage()) * risk;
               double lots2 = NormalizeDouble(money2 / MarketInfo(Symbol(), MODE_LOTSIZE), lotsDigits);
               lots2 = MathMax(minLots, lots2);
               lots2 = MathMin(maxLots, lots2);
               if(direction<0 && range > rangeFilter && Bid > ma && open<Bid) //BUYSTOP
               {
                  openPrice = NormalizeDouble(Ask + trailingLimit, digits);
                  stopLoss = NormalizeDouble(openPrice - StopLoss * Point, digits);
                  tck = OrderSend(Symbol(), OP_BUYSTOP, lots2, openPrice, slippage, stopLoss, 0, TradeComment, MagicNumber, 0, Lime);
                  if (tck <= 0)
                  {
                     errorCode = GetLastError();
                     errorMessage = ErrorDescription(errorCode);

                     Print("BUY Send Error Code: " + errorCode + " Message: " + errorMessage + " LT: " + DoubleToStr(lots2, lotsDigits) + " OP: " + DoubleToStr(openPrice, digits) + " SL: "  + DoubleToStr(stopLoss, digits) + " Bid: " + DoubleToStr(Bid, digits) + " Ask: " + DoubleToStr(Ask, digits));
                  }
               }
               else if(direction>0 && range > rangeFilter && Bid < ma && open>Bid) //SELLSTOP
               {
                  openPrice = NormalizeDouble(Bid - trailingLimit, digits);
                  stopLoss = NormalizeDouble(openPrice + StopLoss * Point, digits);
                  tck = OrderSend(Symbol(), OP_SELLSTOP, lots2, openPrice, slippage, stopLoss, 0, TradeComment, MagicNumber, 0, Orange);
                  if (tck <= 0)
                  {
                     errorCode = GetLastError();
                     errorMessage = ErrorDescription(errorCode);

                     Print("SELL Send Error Code: " + errorCode + " Message: " + errorMessage + " LT: " + DoubleToStr(lots2, lotsDigits) + " OP: " + DoubleToStr(openPrice, digits) + " SL: "  + DoubleToStr(stopLoss, digits) + " Bid: " + DoubleToStr(Bid, digits) + " Ask: " + DoubleToStr(Ask, digits));
                  }
               }
               DrawLine("last_history_check_"+Symbol()+strtf(Period())+"_"+MagicNumber,TimeCurrent());
            }
         }           
      }
   }

   int openTrades = 0;
   for (i = 0; i < OrdersTotal(); i++)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         continue;
      }

      if (OrderMagicNumber() != MagicNumber)
      {
         continue;
      }

      int type = OrderType();
      if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
      {
         continue;
      }

      if (OrderSymbol() != Symbol())
      {
         continue;
      }

      openTrades++;

      switch (type)
      {
      case OP_BUY:
         if (TrailingDistance >= 0)
         {
         

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

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

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

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

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

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

Стоимость полного кода
1 070,10₽ ≈ $13.08