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

myfirstea.mq4

Вы автор или правообладатель?

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

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

О программе

MyFirstEA.mq4 — торговый советник для MetaTrader 4, написанный на языке MQL4. Советник анализирует пересечение двух экспоненциальных скользящих сред (EMA) с разными периодами и формирует торговые сигналы на их пересечении. Основная торговая логика реализована в обработчике OnTick, который отслеживает появление новых свечей и рыночные события.

При обнаружении новой свечи советник определяет сигнал на покупку или продажу по пересечению быстрой и медленной EMA. Открытие позиций и управление существующими ордерами происходит в рамках одного тика: советник проверяет текущие открытые ордера с заданным магическим номером, рассчитывает расстояние до текущей цены и при достижении определённого порога открывает дополнительные ордера с увеличенным объёмом.

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

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

НастройкаОписание
IN_PeriodMAFast Период быстрой экспоненциальной скользящей средней (EMA), используемой для определения торговых сигналов на пересечении с медленной EMA. Должен быть меньше значения IN_PeriodMASlow, иначе инициализация советника не произойдёт.
IN_PeriodMASlow Период медленной экспоненциальной скользящей средней (EMA), используемой для определения торговых сигналов на пересечении с быстрой EMA.
IN_Vol Начальный объём позиции (лот) для расчёта размера новых ордеров. Реальный объём каждого последующего ордера вычисляется как начальный объём, умноженный на множитель IN_LotX в степени от номера текущей позиции.
IN_LotX Множитель, используемый при расчёте объёма дополнительных ордеров. Значение умножается в степени от количества открытых позиций определённого типа, обеспечивая экспоненциальное увеличение лота при повторных открытиях.
Получить полный код

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

#property version   "1.00"
#property strict

input int IN_PeriodMAFast = 5;   //MA Fast
input int IN_PeriodMASlow = 20;  //MA Slow

input double IN_Vol  = 0.01;  //Lot Size (awal)
input double IN_LotX = 1.5;   //Multiplier

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

void OnDeinit(const int reason)
{

}

int getSignalMACross(){
   int signal = -1;

   double maFast2 = iMA(NULL, 0, IN_PeriodMAFast, 0, MODE_EMA, PRICE_CLOSE, 2 );
   double maFast1 = iMA(NULL, 0, IN_PeriodMAFast, 0, MODE_EMA, PRICE_CLOSE, 1 );

   double maSlow2 = iMA(NULL, 0, IN_PeriodMASlow, 0, MODE_EMA, PRICE_CLOSE, 2 );
   double maSlow1 = iMA(NULL, 0, IN_PeriodMASlow, 0, MODE_EMA, PRICE_CLOSE, 1 );

   if (maSlow2 < maFast2 && maSlow1 >= maFast1){
      signal = OP_BUY;
   }else if (maSlow2 > maFast2 && maSlow1 <= maFast1){
      signal = OP_SELL;
   }

   return (signal);

}

void OpenOrder(int orderType){

   if (orderType == OP_BUY || orderType == OP_SELL){

   }
}

bool IsNewCandle(){
   bool isNewCS  = false;
   static datetime prevTime   = TimeCurrent();
   string pair = Symbol();
   if (prevTime < iTime(pair, 0, 0)){
      isNewCS  = true;
      prevTime = iTime(pair, 0, 0);
   }
   return isNewCS;
}

double getVolume(int tOrderType){
   double vol = 0.0;
   vol   = IN_Vol * MathPow(IN_LotX, tOrderType);
   vol = NormalizeDouble(vol, 2);
   return (vol);
}

void UpdateTPSL(){
   int MN = 123;
   double hargaBTB = 99999.0, hargaSTA = 0.0;
   int tOrderBuy = 0, tOrderSell = 0;

   int tOrders = OrdersTotal();
   for (int i=tOrders-1; i>=0; i--){
      bool hsl = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderMagicNumber() == MN  && OrderSymbol() == Symbol()){
         if (OrderType() == OP_BUY){
            tOrderBuy++;
            if (hargaBTB > OrderOpenPrice()){
               hargaBTB = OrderOpenPrice();
            }
         }

         if (OrderType() == OP_SELL){
            tOrderSell++;
            if (hargaSTA < OrderOpenPrice()){
               hargaSTA = OrderOpenPrice();
            }
         }
      }
   }

   double myPoint = 0.0;
   myPoint = MarketInfo(Symbol(), MODE_POINT);

   double TPBuy = 0.0;
   double TPSell = 

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

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

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

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

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

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

Стоимость полного кода
317,50₽ ≈ $3.88