Перейти к содержанию

Доработка советников: общая тема


Рекомендуемые сообщения

Доработка советников: общая тема Опубликовано
9 часов назад, sasha_shy сказал:

вот файл, спасибо!

image.png.448ede6929cc5862bb66c8184d4676ca.png
Не загружает
Попробуйте отправить в телеграмм (@andrijmix)

Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 2,5k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Версия с правками. Я немного свернул код, чтобы не перебирались ордера попусту и чтобы проверка красной/синей зоны делалась в одном месте. Прогнал в тесте с настройками по умолчанию. Ожидаемо лье

Перейти

Нате 1_2_3 _Fraktal.mq4

Перейти

Система маятника, или попрыгунчика, или фиг ее знает как ее еще назвать не намного младше сетки мартингейла. Мы в далеком 2017 писали по ней сов с индикатором на вход: https://tlap.com/forum/labo

Перейти
Доработка советников: общая тема Опубликовано
В 18.06.2024 в 18:28, ademen сказал:

image.png.448ede6929cc5862bb66c8184d4676ca.png
Не загружает
Попробуйте отправить в телеграмм (@andrijmix)

может так получится ян.диск: 

 

Изменено пользователем sasha_shy
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
9 минут назад, sasha_shy сказал:

может так получится ян.диск: https://disk.yandex.ru/d/gVZ8obdQJvn-xw

советник.mq4

Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано

Добрый день. Прошу помощи. 

Планирую советника на основе индикатора JokerFilter.

Показывает направление тренда цветными гистограммами.

Где в коде финальное определение каким цветом красить столбец?

 

 

image.png.931e399df86b8ef19dfc21d1a7e0f3bd.png

Индикатор JokerFilter.mq4

Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано

Привет Маркетмейкеры!;)
Может кто помочь? У меня есть простой сеточник. К нему нужно пришить пару параметров.
1. закрывать все ордера по торгуемой паре в профит или убыток в процентах от депозита.
2. открывать ордера с изменением лотности. К примеру что бы с ростом депозита увеличивался лот открываемого ордера в определенном проценте. При уменьшении депо соответственно уменьшалось лотность открываемых файлов.

Если это не трудно конечно...

Forex Graphic Interactive Display.ex4 Forex Graphic Interactive Display.mq4

Ссылка на сообщение
Поделиться на другие сайты

  • 3 weeks later...
Доработка советников: общая тема Опубликовано
27 минут назад, Sofya сказал:

Подскажите, где найти прогера проверенного, чтобы отвязать советник от счета? 

@nixxer

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 03.07.2024 в 09:17, Mordvin сказал:

Добрый день. Прошу помощи. 

Планирую советника на основе индикатора JokerFilter.

Показывает направление тренда цветными гистограммами.

Где в коде финальное определение каким цветом красить столбец?

 

 

image.png.931e399df86b8ef19dfc21d1a7e0f3bd.png

Индикатор JokerFilter.mq4 7.81 \u043a\u0411 · 7 загрузок

Этот индикатор на языке MQL4 работает в отдельном окне и использует два буфера для отображения гистограммы. Он называется "JokerFilter" и выдает сигналы на покупку и продажу в зависимости от условий на основе скользящего среднего. Вот принцип его работы и сигналы, которые он выдает:

Принцип работы:
Настройки индикатора:

TimeFrame — временной интервал, на котором будет рассчитываться индикатор.
SmoothPeriod — период сглаживания.
SmoothPhase — фаза сглаживания.
Настройки для включения/выключения различных типов оповещений (alertsOn, alertsOnCurrent, alertsMessage, alertsSound, alertsEmail).
Инициализация:

Инициализируются буферы для хранения значений индикатора (g_ibuf_112, g_ibuf_116, g_ibuf_120).
Определяется временной интервал для расчета.
Устанавливаются стили отображения гистограммы.
Расчет значений индикатора:

Основные вычисления происходят в функции start().
Рассчитываются значения скользящих средних (ld_0, ld_8, ld_16) для High, Low и Close цен.
На основе этих значений определяются сигналы на покупку или продажу:
Если ld_16 (сглаженное значение закрытия) больше ld_0 (сглаженное значение максимума), то в g_ibuf_120 записывается -1 (сигнал на продажу).
Если ld_16 меньше ld_8 (сглаженное значение минимума), то в g_ibuf_120 записывается 1 (сигнал на покупку).
Эти значения отображаются в соответствующих буферах (g_ibuf_112, g_ibuf_116).
Оповещения:

Если включены оповещения (alertsOn), то при изменении сигнала индикатор может отправлять сообщение, звук или email с помощью функции f0_6().
Сигналы индикатора:
Сигнал на покупку:

Генерируется, когда сглаженное значение закрытия (ld_16) меньше сглаженного значения минимума (ld_8).
В этом случае g_ibuf_120 записывается значение 1, и гистограмма окрашивается в цвет, определенный для покупок (DarkOrange).
Сигнал на продажу:

Генерируется, когда сглаженное значение закрытия (ld_16) больше сглаженного значения максимума (ld_0).
В этом случае g_ibuf_120 записывается значение -1, и гистограмма окрашивается в цвет, определенный для продаж (LimeGreen).
Вспомогательные функции:
f0_3() — функция, которая выполняет основные вычисления для сглаживания данных.
f0_6() — функция для обработки оповещений.
f0_5() и f0_1() — функции для работы с временными интервалами.
Заключение:
Индикатор "JokerFilter" используется для определения моментов входа и выхода из рынка на основе анализа сглаженных значений ценовых данных. Он выдает сигналы на покупку и продажу, отображаемые в виде гистограммы, и поддерживает различные виды оповещений для удобства пользователя.

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

cmea manual gird.mq4 Здравствуйте уважаемые программисты!  Может кто помочь?

Есть такая функция закрытие встречных ордеров 

bool CloseByOrders()
  {
   bool error=true;
   int tip=0, b=0,s=0,TicketApponent=0,Ticket,OT,j,LaslApp=-1;
   int closeby=0;
   while(!IsStopped())
     {
      if(CloseByON)
        {
         for(j=OrdersTotal()-1; j>=0; j--)
           {
            if(OrderSelect(j,SELECT_BY_POS))
              {
               if(OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
                 {
                  OT=OrderType();
                  Ticket=OrderTicket();
                  if(OT>1) {error=OrderDelete(Ticket);continue;}
                  if(TicketApponent==0) {TicketApponent=Ticket;LaslApp=OT;}
                  else
                    {
                     if(LaslApp==OT) continue;
                     if(OrderCloseBy(Ticket,TicketApponent,Green)) TicketApponent=0;
                     else {closeby++;Print("Ошибка ",GetLastError()," закрытия ордера N ",Ticket," <-> ",TicketApponent);}
                    }
                 }
              }
           }
         if(closeby>5) break;
         b=0;s=0;
         for(j=OrdersTotal()-1; j>=0; j--)
           {
            if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
              {
               if(OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
                 {
                  OT=OrderType();
                  if(tip==OP_BUY && (OT==OP_BUYLIMIT || OT==OP_BUYSTOP)) error=OrderDelete(Ticket=0);
                   if(tip==OP_SELL && (OT==OP_SELLLIMIT || OT==OP_SELLSTOP)) error=OrderDelete(Ticket=0);
                 }
              }
           }
         if(b==0 || s==0) break;
        }
     }
   CloseAll(-1);
   return(true);
  }

Может кто поправить так, чтобы закрывалась в профит регулируемый, а не просто. Заранее спасибо 

Ссылка на сообщение
Поделиться на другие сайты

  • 3 weeks later...
Доработка советников: общая тема Опубликовано

Добрый вечер. Помагите изменить код советника на основе индикатора Ultrafilter. Чтобы после смены цвета стрелки закрывал сделку и открывал противоположную, и так далее. То есть красная стрелка появляется - продаем, как появилась синяя стрелка закрываем продажи и сразу идем в покупки и так по кругу. Могу финансово отблагодарить)

UltraFilters v1.1.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
20 часов назад, denfotik13 сказал:

Добрый вечер. Помагите изменить код советника на основе индикатора Ultrafilter. Чтобы после смены цвета стрелки закрывал сделку и открывал противоположную, и так далее. То есть красная стрелка появляется - продаем, как появилась синяя стрелка закрываем продажи и сразу идем в покупки и так по кругу. Могу финансово отблагодарить)

UltraFilters v1.1.mq4 29.3 \u043a\u0411 · 2 загрузки

Либо возможен двойной вариант тейка - количество в пунктах или  смена стрелки, что первое выполнится, при количестве пунктов ноль остается условие только по перевороту на стрелке.

Ссылка на сообщение
Поделиться на другие сайты

  • 1 month later...
Доработка советников: общая тема Опубликовано

Привет
Я работаю над простым кодом мартингейла, но по какой-то причине размер умноженного лота не учитывается. Сделки всегда одного и того же размера.

 

//--- Global Variables (Editable inputs)
input double initialLotSize = 0.01;   // Initial lot size (editable)
input double maxLotSize = 3.2;        // Max lot size (editable)
input double takeProfitPips = 10;     // Take profit in pips (editable)
input double stopLossPips = 10;       // Stop loss in pips (editable)
input int emaPeriod = 20;             // EMA period (editable)
input int MAGIC_NUMBER = 123456;      // Unique identifier for this EA's trades (editable)
input double lotMultiplier = 2.0;     // Multiplier for lot size after a loss (editable)

//--- Other Variables
double lotSize;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   lotSize = initialLotSize;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   // Get the current price and the EMA
   double price = iClose(Symbol(), 0, 0);
   double ema = iMA(Symbol(), 0, emaPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
   
   // Check if there are no open positions
   if (OrdersTotal() == 0)
   {
      // Buy Condition: Price is above EMA
      if (price > ema)
      {
         OpenBuyOrder();
      }
      // Sell Condition: Price is below EMA
      else if (price < ema)
      {
         OpenSellOrder();
      }
   }
  }
//+------------------------------------------------------------------+
//| Function to open a buy order                                     |
//+------------------------------------------------------------------+
void OpenBuyOrder()
  {
   double sl = NormalizeDouble(Bid - stopLossPips * Point, Digits);
   double tp = NormalizeDouble(Bid + takeProfitPips * Point, Digits);

   if (lotSize <= maxLotSize)
   {
      int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, sl, tp, "Buy Order", MAGIC_NUMBER, 0, Green);
      if (ticket < 0)
      {
         Print("Error opening buy order: ", GetLastError());
      }
   }
  }
//+------------------------------------------------------------------+
//| Function to open a sell order                                    |
//+------------------------------------------------------------------+
void OpenSellOrder()
  {
   double sl = NormalizeDouble(Ask + stopLossPips * Point, Digits);
   double tp = NormalizeDouble(Ask - takeProfitPips * Point, Digits);

   if (lotSize <= maxLotSize)
   {
      int ticket = OrderSend(Symbol(), OP_SELL, lotSize, Bid, 3, sl, tp, "Sell Order", MAGIC_NUMBER, 0, Red);
      if (ticket < 0)
      {
         Print("Error opening sell order: ", GetLastError());
      }
   }
  }
//+------------------------------------------------------------------+
//| Function to check the last closed trade                          |
//+------------------------------------------------------------------+
void CheckLastTrade()
  {
   // Check if the last trade was a loss
   if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() < 0)
      {
         // Increase lot size according to the Martingale strategy with multiplier
         lotSize *= lotMultiplier;
         if (lotSize > maxLotSize)
         {
            lotSize = maxLotSize;
         }
      }
      else
      {
         // Reset to initial lot size after a win
         lotSize = initialLotSize;
      }
   }
  }

 

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

чат GPT  в помощь.Он тебе и код напишет и разъяснит все

Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано
   HideTestIndicators(true);
   double wpr= iWPR(Symbol(),0,4,0);
   double ao = iAO(Symbol(),0,0);
   HideTestIndicators(false);

   double level=NormalizeDouble(data[pos][1],Digits);
   ObjectDelete("level");
   MakeLine(level);

   if(data[pos][1]>Open[0])
      Comment("BUY - ", data[pos][1]);
   if(data[pos][1]<Open[0])
      Comment("SELL - ", data[pos][1]);

   if(MarketInfo(Symbol(),MODE_SPREAD)>150)
      return;

   int TB=0,TS=0;
   for(i=0; i<OrdersTotal(); i++)
     {
      xx=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicID)
        {
         continue;
        }
      if(OrderType()==0)
        {
         TB++;
        }
      if(OrderType()==1)
        {
         TS++;
        }
     }

Здравствуйте уважаемые программисты, могли бы вы мне помочь изменить код из формата mq4 в формат mq5.  вот сам советник

CITY-ScalperX2 EA.mq4

 

15 часов назад, Lexa000 сказал:
   HideTestIndicators(true);
   double wpr= iWPR(Symbol(),0,4,0);
   double ao = iAO(Symbol(),0,0);
   HideTestIndicators(false);

   double level=NormalizeDouble(data[pos][1],Digits);
   ObjectDelete("level");
   MakeLine(level);

   if(data[pos][1]>Open[0])
      Comment("BUY - ", data[pos][1]);
   if(data[pos][1]<Open[0])
      Comment("SELL - ", data[pos][1]);

   if(MarketInfo(Symbol(),MODE_SPREAD)>150)
      return;

   int TB=0,TS=0;
   for(i=0; i<OrdersTotal(); i++)
     {
      xx=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicID)
        {
         continue;
        }
      if(OrderType()==0)
        {
         TB++;
        }
      if(OrderType()==1)
        {
         TS++;
        }
     }

Здравствуйте уважаемые программисты, могли бы вы мне помочь изменить код из формата mq4 в формат mq5.  вот сам советник

CITY-ScalperX2 EA.mq4 61.51 \u043a\u0411 · 0 загрузок

//********************************
   TesterHideIndicators(true);
   double wpr= iWPR(Symbol(),0,14,0);
   double ao = iAO(Symbol(),0,0);
  /* double iwpr_72 = iWPR(NULL, PERIOD_M1, 14, 0);
   double iwpr_80 = iWPR(NULL, PERIOD_M1, 14, 1);
   double iwpr_88 = iWPR(NULL, PERIOD_M5, 14, 0);
   double iwpr_96 = iWPR(NULL, PERIOD_M5, 14, 1);
   double iwpr_104 = iWPR(NULL, PERIOD_M15, 14, 0);
   double iwpr_112 = iWPR(NULL, PERIOD_M15, 14, 1);
   double iwpr_120 = iWPR(NULL, PERIOD_M30, 14, 0);
   double iwpr_128 = iWPR(NULL, PERIOD_M30, 14, 1);
   double iwpr_152 = iWPR(NULL, PERIOD_H1, 14, 0);
   double iwpr_160 = iWPR(NULL, PERIOD_H1, 14, 1);
   double iwpr_168 = iWPR(NULL, PERIOD_H4, 14, 0);
   double iwpr_176 = iWPR(NULL, PERIOD_H4, 14, 1);
   double iwpr_136 = iWPR(NULL, PERIOD_D1, 14, 0);
   double iwpr_144 = iWPR(NULL, PERIOD_D1, 14, 1);
   double ibands_16 = iBands(NULL, PERIOD_M5, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, 0);
   double ibands_24 = iBands(NULL, PERIOD_M5, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, 0);
   double ibands_0 = iBands(NULL, PERIOD_M15, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, 0);
   double ibands_8 = iBands(NULL, PERIOD_M15, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, 0);
   double istochastic_184 = iStochastic(NULL, PERIOD_M1, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);
   double istochastic_192 = iStochastic(NULL, PERIOD_M1, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
   double istochastic_200 = iStochastic(NULL, PERIOD_M5, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);
   double istochastic_208 = iStochastic(NULL, PERIOD_M5, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
   double istochastic_216 = iStochastic(NULL, PERIOD_M15, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);
   double istochastic_224 = iStochastic(NULL, PERIOD_M15, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
   double istochastic_232 = iStochastic(NULL, PERIOD_M30, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);
   double istochastic_240 = iStochastic(NULL, PERIOD_M30, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
   double istochastic_248 = iStochastic(NULL, PERIOD_H1, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);
   double istochastic_256 = iStochastic(NULL, PERIOD_H1, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
   double istochastic_264 = iStochastic(NULL, PERIOD_H4, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);
   double istochastic_272 = iStochastic(NULL, PERIOD_H4, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
   double istochastic_280 = iStochastic(NULL, PERIOD_D1, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);
   double istochastic_288 = iStochastic(NULL, PERIOD_D1, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);*/
   TesterHideIndicators(false);

   double level=NormalizeDouble(data[pos][1],_Digits);
   ObjectDelete(0,"level");
   MakeLine(level);

   if(data[pos][1]>iOpen(_Symbol,PERIOD_CURRENT,0))
      Comment("BUY - ", data[pos][1]);
   if(data[pos][1]<iOpen(_Symbol,PERIOD_CURRENT,0))
      Comment("SELL - ", data[pos][1]);

   if(SymbolInfoInteger(_Symbol,SYMBOL_SPREAD)>150)
      return;

   int TB=0,TS=0;
   for(int i=0; i<OrdersTotal(); i++)
     {
      xxx=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicID)
        {
         continue;
        }
      if(OrderType()==0)
        {
         TB++;
        }
      if(OrderType()==1)
        {
         TS++;
        }
     }

В mql5 вот такая ошибка выходит

'iWPR' - wrong parameters count   
   built-in: int iWPR(const string,ENUM_TIMEFRAMES,int)   
'iAO' - wrong parameters count   
   built-in: int iAO(const string,ENUM_TIMEFRAMES)  
 

Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано

Здравствуйте! Я скачал(купил) этот советник из интернета и не знаю, какие настройки ему нужны. Не могли бы опытные трейдеры или программисты модифицировать его и проверить на работоспособность? Советник работает только на золоте. Спасибо!

GOLD.ex5

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Доброго дня. Может и наглый вопрос, но помогите понять, что вычисляет следующий код

 

int index = HistoryTotal() - 1;
      if(index >= 0)
        {
         do
           {
            if(OrderSelect(index, 0, 1) && (OrderProfit() != 0))
              {

               if((OrderClosePrice() != OrderOpenPrice()) && OrderSymbol() == _Symbol)
                 {
                  
                  res = (-OrderCommission() / MathAbs((OrderProfit() / (OrderClosePrice() - OrderOpenPrice()))));
                  break;
                 }
              }
            index = index - 1;
           }
         while(index >= 0);
        }
Изменено пользователем sportoman
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

 

 

В 29.10.2024 в 14:58, sportoman сказал:

Доброго дня. Может и наглый вопрос, но помогите понять, что вычисляет следующий код

 

int index = HistoryTotal() - 1;  /// проход по истории
      if(index >= 0)
        {
         do
           {
            if(OrderSelect(index, 0, 1) && (OrderProfit() != 0))  /// перебор ордеров если не равні нулю
              {

               if((OrderClosePrice() != OrderOpenPrice()) && OrderSymbol() == _Symbol) /// фильтр по символу
                 {
                  
                  res = (-OrderCommission() / MathAbs((OrderProfit() / (OrderClosePrice() - OrderOpenPrice())))); ///  отнимание комисси от профита по каждой сделке
                  break;
                 }
              }
            index = index - 1;
           }
         while(index >= 0);
        }

вісчитівает общий баланс по символу по истории с вичетам комиссии

 

В 26.09.2024 в 20:53, booker2121 сказал:

Привет
Я работаю над простым кодом мартингейла, но по какой-то причине размер умноженного лота не учитывается. Сделки всегда одного и того же размера.

 

//--- Global Variables (Editable inputs)
input double initialLotSize = 0.01;   // Initial lot size (editable)
input double maxLotSize = 3.2;        // Max lot size (editable)
input double takeProfitPips = 10;     // Take profit in pips (editable)
input double stopLossPips = 10;       // Stop loss in pips (editable)
input int emaPeriod = 20;             // EMA period (editable)
input int MAGIC_NUMBER = 123456;      // Unique identifier for this EA's trades (editable)
input double lotMultiplier = 2.0;     // Multiplier for lot size after a loss (editable)

//--- Other Variables
double lotSize;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   // Get the current price and the EMA
   double price = iClose(Symbol(), 0, 0);
   double ema = iMA(Symbol(), 0, emaPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
   
   // Check if there are no open positions
   if (OrdersTotal() == 0)
   {
      // Buy Condition: Price is above EMA
      if (price > ema)
      {
         OpenBuyOrder();
      }
      // Sell Condition: Price is below EMA
      else if (price < ema)
      {
         OpenSellOrder();
      }
   }
  }
//+------------------------------------------------------------------+
//| Function to open a buy order                                     |
//+------------------------------------------------------------------+
void OpenBuyOrder()
  {
   double sl = NormalizeDouble(Bid - stopLossPips * Point, Digits);
   double tp = NormalizeDouble(Bid + takeProfitPips * Point, Digits);

   if (lotSize <= maxLotSize)
   {


      int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, sl, tp, "Buy Order", MAGIC_NUMBER, 0, Green);
      if (ticket < 0)
      {
         Print("Error opening buy order: ", GetLastError());
      }
   }
  }
//+------------------------------------------------------------------+
//| Function to open a sell order                                    |
//+------------------------------------------------------------------+
void OpenSellOrder()
  {
   double sl = NormalizeDouble(Ask + stopLossPips * Point, Digits);
   double tp = NormalizeDouble(Ask - takeProfitPips * Point, Digits);

   if (lotSize <= maxLotSize)
   {
      int ticket = OrderSend(Symbol(), OP_SELL, lotSize, Bid, 3, sl, tp, "Sell Order", MAGIC_NUMBER, 0, Red);
      if (ticket < 0)
      {
         Print("Error opening sell order: ", GetLastError());
      }
   }
  }
//+------------------------------------------------------------------+
//| Function to check the last closed trade                          |
//+------------------------------------------------------------------+
void CheckLastTrade()
  {
   // Check if the last trade was a loss
   if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() < 0)
      {
         // Increase lot size according to the Martingale strategy with multiplier
         lotSize *= lotMultiplier;
         if (lotSize > maxLotSize)
         {
            lotSize = maxLotSize;
         }
      }
      else
      {
         // Reset to initial lot size after a win
         lotSize = initialLotSize;
      }
   }
  }

 

хотел написать но много переписівать , поєтому раскажу по єтапам а ті там сам. 

1 мартингейл учет закрітой сделки в минус должен стоять с фильтрами по магику и валюте.

2 коефициент умножения лота для увеличения . с ограничением на максимум 

3 могу сказать что то что у тебя для входа эти индикаторы работать не будут, стратегия убыточна. просто сальет или не будет преносить достатучную приьыль в соотношению к риску

 

 

Изменено пользователем rahu
Ссылка на сообщение
Поделиться на другие сайты

  • 5 weeks later...
Доработка советников: общая тема Опубликовано
В 26.09.2024 в 21:53, booker2121 сказал:

Привет
Я работаю над простым кодом мартингейла, но по какой-то причине размер умноженного лота не учитывается. Сделки всегда одного и того же размера.

 

//--- Global Variables (Editable inputs)
input double initialLotSize = 0.01;   // Initial lot size (editable)
input double maxLotSize = 3.2;        // Max lot size (editable)
input double takeProfitPips = 10;     // Take profit in pips (editable)
input double stopLossPips = 10;       // Stop loss in pips (editable)
input int emaPeriod = 20;             // EMA period (editable)
input int MAGIC_NUMBER = 123456;      // Unique identifier for this EA's trades (editable)
input double lotMultiplier = 2.0;     // Multiplier for lot size after a loss (editable)

//--- Other Variables
double lotSize;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   lotSize = initialLotSize;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   // Get the current price and the EMA
   double price = iClose(Symbol(), 0, 0);
   double ema = iMA(Symbol(), 0, emaPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
   
   // Check if there are no open positions
   if (OrdersTotal() == 0)
   {
      // Buy Condition: Price is above EMA
      if (price > ema)
      {
         OpenBuyOrder();
      }
      // Sell Condition: Price is below EMA
      else if (price < ema)
      {
         OpenSellOrder();
      }
   }
  }
//+------------------------------------------------------------------+
//| Function to open a buy order                                     |
//+------------------------------------------------------------------+
void OpenBuyOrder()
  {
   double sl = NormalizeDouble(Bid - stopLossPips * Point, Digits);
   double tp = NormalizeDouble(Bid + takeProfitPips * Point, Digits);

   if (lotSize <= maxLotSize)
   {
      int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, sl, tp, "Buy Order", MAGIC_NUMBER, 0, Green);
      if (ticket < 0)
      {
         Print("Error opening buy order: ", GetLastError());
      }
   }
  }
//+------------------------------------------------------------------+
//| Function to open a sell order                                    |
//+------------------------------------------------------------------+
void OpenSellOrder()
  {
   double sl = NormalizeDouble(Ask + stopLossPips * Point, Digits);
   double tp = NormalizeDouble(Ask - takeProfitPips * Point, Digits);

   if (lotSize <= maxLotSize)
   {
      int ticket = OrderSend(Symbol(), OP_SELL, lotSize, Bid, 3, sl, tp, "Sell Order", MAGIC_NUMBER, 0, Red);
      if (ticket < 0)
      {
         Print("Error opening sell order: ", GetLastError());
      }
   }
  }
//+------------------------------------------------------------------+
//| Function to check the last closed trade                          |
//+------------------------------------------------------------------+
void CheckLastTrade()
  {
   // Check if the last trade was a loss
   if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() < 0)
      {
         // Increase lot size according to the Martingale strategy with multiplier
         lotSize *= lotMultiplier;
         if (lotSize > maxLotSize)
         {
            lotSize = maxLotSize;
         }
      }
      else
      {
         // Reset to initial lot size after a win
         lotSize = initialLotSize;
      }
   }
  }

 

 

 

image.png.c8a16cf43b3fce3b2e00369d7a28cdcc.png

 

image.png.a89e81bc54ac4eb55080718e6a25aced.png

 

 

Ошибка была в том, что у Вас в коде не было вызова функции проверки лота  CheckLastTrade()
Он и не рассчитывался, а ставился стандартный. 

Вызов нужно было установить перед функцией открытия первой позиции в серии 


 

if (OrdersTotal() == 0)
   {
      CheckLastTrade();

...

...

 

 

Booker EA.mq4

Изменено пользователем Capital Plus
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано

Здравствуйте, это советник MY EXPERT.ex4 тот же Gold Coin fix.ex4 не открывается продажа только покупка может кто нибудь это исправить спасибо. Пожалуйста, найдите прикрепленные файлы.

MY EXPERT.ex4 MY EXPERT.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Доброго всем уважаемые, можно ли добавить к простому скрипту функцию открытия одновременно нескольких ордеров,если возможно добавить ступенчатый трейлинг,спасибо

Crazy_Max.ex4 Crazy_Max.mq4

Изменено пользователем Doni
Ссылка на сообщение
Поделиться на другие сайты

  • 3 weeks later...
Доработка советников: общая тема Опубликовано

Грааль вот такой кто нибудь создавал?

У меня вышло переделать, но нужна доработка, просадки даёт моя переделка....

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Добрый день! Кто может помочь? Есть советник. нужно сделать ограничение по времени торговли.

EA-FX Sniper 24 - Autopilot.ex4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
В 28.12.2024 в 10:16, K218ac5 сказал:

Добрый день! Кто может помочь? Есть советник. нужно сделать ограничение по времени торговли.

Привет, надо файл .mq4

Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • ×
    ×
    • Создать...