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

Little Martingale EA

unnomguaiv1.132.mq4
Вы автор или правообладатель?

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

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

О программе

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

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

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

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

НастройкаОписание
__c1 Разделитель: Управление капиталом — Разделитель для группировки параметров управления капиталом.
__c11 Заголовок: Управление капиталом — Заголовок группы параметров управления капиталом.
MM Управление капиталом — Включает автоматический расчёт размера лота на основе риска и свободной маржи.
Risk Риск, % — Процент риска от свободной маржи, используемый при включённом управлении капиталом.
Lots Размер лота — Фиксированный размер лота для торговли, если управление капиталом отключено.
__c2 Разделитель: Прибыль и убыток — Разделитель для группировки параметров прибыли и убытка.
multiplier Множитель лота — Множитель для увеличения размера лота при добавлении ордеров в сетке. Если 0, используется фиксированный размер из параметров spaceLots.
profit Целевая прибыль — Целевой уровень прибыли для закрытия всех ордеров на покупку или продажу по отдельности.
globalprofit Глобальная прибыль — Целевой уровень общей прибыли по всем парам для закрытия всех ордеров и остановки торговли.
pairglobalprofit Прибыль по паре — Целевой уровень общей прибыли по текущему символу для закрытия всех ордеров по нему.
maximaloss Максимальный убыток — Максимально допустимый убыток по всем парам для закрытия всех ордеров и остановки торговли.
tradesperday Сделок в день — Максимальное количество сделок в день.
openonnewcandle Открывать на новой свече — Разрешает открытие новых ордеров только при появлении новой свечи.
__c3 Разделитель: Сетка ордеров — Разделитель для группировки параметров сеточных ордеров.
spacePips Отступ в пунктах для диапазона 0 — Расстояние в пунктах для первого диапазона сетки.
spaceOrders Количество ордеров в диапазоне 0 — Количество ордеров в первом диапазоне сетки.
spaceLots Лот для диапазона 0 — Размер лота для ордеров в первом диапазоне сетки.
space1Pips Отступ в пунктах для диапазона 1 — Расстояние в пунктах для второго диапазона сетки.
space1Orders Количество ордеров в диапазоне 1 — Количество ордеров во втором диапазоне сетки.
space1Lots Лот для диапазона 1 — Размер лота для ордеров во втором диапазоне сетки.
space2Pips Отступ в пунктах для диапазона 2 — Расстояние в пунктах для третьего диапазона сетки.
space2Orders Количество ордеров в диапазоне 2 — Количество ордеров в третьем диапазоне сетки.
space2Lots Лот для диапазона 2 — Размер лота для ордеров в третьем диапазоне сетки.
space3Pips Отступ в пунктах для диапазона 3 — Расстояние в пунктах для четвёртого диапазона сетки.
space3Orders Количество ордеров в диапазоне 3 — Количество ордеров в четвёртом диапазоне сетки.
space3Lots Лот для диапазона 3 — Размер лота для ордеров в четвёртом диапазоне сетки.
__c4 Разделитель: Магические номера и комментарии — Разделитель для группировки параметров магических номеров и комментариев.
magicbuy Магический номер покупок — Магический номер для идентификации ордеров на покупку.
buycomment Комментарий для покупок — Комментарий, добавляемый к ордерам на покупку.
magicsell Магический номер продаж — Магический номер для идентификации ордеров на продажу.
sellcomment Комментарий для продаж — Комментарий, добавляемый к ордерам на продажу.
__c5 Разделитель: Временной фильтр — Разделитель для группировки параметров временного фильтра.
__c51 Заголовок: Временной фильтр — Заголовок группы параметров временного фильтра.
Start_Hour Час начала торговли — Час начала торгового периода (0-24).
Start_Minute Минута начала торговли — Минута начала торгового периода (0-59).
Finish_Hour Час окончания торговли — Час окончания торгового периода (0-24).
Finish_Minute Минута окончания торговли — Минута окончания торгового периода (0-59).
__c6 Разделитель: Определение входа — Разделитель для группировки параметров определения входа.
__c61 Заголовок: Вход по SMA/Parabolic — Заголовок группы параметров определения входа по SMA/Parabolic.
UseSmaParabolicEntry Использовать вход по SMA/Parabolic — Включает определение входа на основе скользящей средней и Parabolic SAR.
__entry2 Заголовок: Вход по CCI — Заголовок группы параметров определения входа по CCI.
cciperiod Период CCI — Период индикатора CCI для определения входа. Если 0, вход по CCI отключён.
ccimax Максимум CCI — Верхний порог CCI для определения сигнала на покупку.
ccimin Минимум CCI — Нижний порог CCI для определения сигнала на продажу.
__c7 Разделитель: Управление торговлей — Разделитель для группировки параметров управления торговлей.
suspendtrades Приостановить торговлю — Приостанавливает открытие новых ордеров.
closeallsellsnow Закрыть все продажи сейчас — Немедленно закрыть все открытые ордера на продажу по текущему символу.
closeallbuysnow Закрыть все покупки сейчас — Немедленно закрыть все открытые ордера на покупку по текущему символу.
closeallnow Закрыть все сейчас — Запрещает открытие новых ордеров и инициирует закрытие всех ордеров.
__c8 Разделитель: Отображение — Разделитель для группировки параметров отображения.
Disable the chart in foreground CrapTx setting so the candles do not obscure the text (KeepTextOnTop) Текст поверх графика — Отключает настройку графика 'Chart on foreground', чтобы свечи не перекрывали текст панели.
DisplayX Позиция панели по X — Горизонтальная координата для размещения информационной панели на графике.
DisplayY Позиция панели по Y — Вертикальная координата для размещения информационной панели на графике.
fontSise Размер шрифта — Размер шрифта для текста на информационной панели.
fontName Шрифт — Название шрифта для текста на информационной панели.
colour Цвет текста — Цвет текста на информационной панели.
Получить полный код

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

#property version   "1.13"
#property strict

extern string __c1="----------------------------------";
extern string __c11     = "Money management";
extern bool   MM        = false;               
extern double Risk      = 2;                
extern double Lots      = 0.01;  

extern string __c2="----------------------------------";
extern double multiplier      = 0;
extern double profit          = 0;
extern double globalprofit    = 0;
extern double pairglobalprofit= 8;
extern double maximaloss      = 0;
extern int    tradesperday    = 99;
extern bool   openonnewcandle = true;

extern string __c3="----------------------------------";
extern double spacePips       = 5;
extern int    spaceOrders     = 1;
extern double spaceLots       = 0.02;

extern double space1Pips      = 10;
extern int    space1Orders    = 9;
extern double space1Lots      = 0.03;

extern double space2Pips      = 5;
extern int    space2Orders    = 14;
extern double space2Lots      = 0.05;

extern double space3Pips      = 10;
extern int    space3Orders    = 99;
extern double space3Lots      = 0.07;

extern string __c4="----------------------------------";
extern int     magicbuy        = 1;
extern string  buycomment      = "buy";
extern int     magicsell       = 2;
extern string  sellcomment     = "sell";

extern string __c5="----------------------------------";
extern string __c51="Timer filter (Hour 0-24 Minute 0-59)";
extern int     Start_Hour      = 00;
extern int     Start_Minute    = 00;
extern int     Finish_Hour     = 24;
extern int     Finish_Minute   = 0;

extern string __c6="----------------------------------";
extern string __c61="Determine entry based on SMA/parabolic";
extern bool    UseSmaParabolicEntry = true;

extern string __entry2="Determine entry based on CCI";
extern int     cciperiod =     0;
extern double  ccimax    =   100;
extern double  ccimin    =  -100;

extern string __c7="----------------------------------";
extern bool    suspendtrades     = false;
extern bool    closeallsellsnow  = false;
extern bool    closeallbuysnow   = false;
extern bool    closeallnow       = false;

extern string __c8="----------------------------------";
extern bool    KeepTextOnTop     = true;//Disable the chart in foreground CrapTx setting so the candles do not obscure the text
extern int     DisplayX          = 50;
extern int     DisplayY          = 50;
extern int     fontSise          = 8;
extern string  fontName          = "Courier New";
extern color   colour            = Yellow;

double totalprofit; 
bool   sellallowed=false;
bool   buyallowed=false;
bool   firebuy=true;
bool   firesell=true;
string stoptrading="0"; 
bool   validSetup=true;
string error;
int    DisplayCount      = 0;            
int    LotDigits = 2;   

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

void OnDeinit(const int reason)
{
}

void RemoveAllObjects()
{
   for(int i = ObjectsTotal() - 1; i >= 0; i--)
   {
      if (StringFind(ObjectName(i),"EA-",0) > -1)  ObjectDelete(ObjectName(i));
   }
}

void Display(string text, color textColor)
{
  string lab_str = "EA-" + IntegerToString(DisplayCount);  
  double ofset = 0;  

  ObjectCreate("EA-BG",OBJ_RECTANGLE_LABEL,0,0,0);
  ObjectSet("EA-BG", OBJPROP_XDISTANCE, DisplayX-20);
  ObjectSet("EA-BG", OBJPROP_YDISTANCE, DisplayY-20);
  ObjectSet("EA-BG", OBJPROP_XSIZE,700);
  ObjectSet("EA-BG", OBJPROP_YSIZE,500);
  ObjectSet("EA-BG", OBJPROP_BGCOLOR,C'50,50,50');
  ObjectSet("EA-BG", OBJPROP_BORDER_TYPE,BORDER_SUNKEN);
  ObjectSet("EA-BG", OBJPROP_CORNER,CORNER_LEFT_UPPER);
  ObjectSet("EA-BG", OBJPROP_STYLE,STYLE_SOLID);
  ObjectSet("EA-BG", OBJPROP_COLOR,clrWhite);
  ObjectSet("EA-BG", OBJPROP_WIDTH,1);
  ObjectSet("EA-BG", OBJPROP_BACK,false);

  ObjectCreate(lab_str, OBJ_LABEL, 0, 0, 0);
  ObjectSet(lab_str, OBJPROP_CORNER, 0);
  ObjectSet(lab_str, OBJPROP_XDISTANCE, DisplayX + ofset);
  ObjectSet(lab_str, OBJPROP_YDISTANCE, DisplayY + DisplayCount*(fontSise+9));
  ObjectSet(lab_str, OBJPROP_BACK, false);
  ObjectSetText(lab_str, text, fontSise, fontName, textColor);

}

void SM(string message)
{
   DisplayCount++;
   Display(message, colour);

}//End void SM()

void DisplayErrors()
{
   DisplayCount=0;
   colour=Red;
   SM("Trading turned OFF");
   SM("");
   SM("Invalid settings:");
   SM(error);
}

void ShowStatus()
{  
   DisplayCount = 0;
   int openBuyOrders  = 0;
   int openSellOrders = 0;
   double lotsTrading = 0;
   int openTrades = 0;
   double profitLoss=0; 
   for (int k = OrdersTotal();k >=0 ;k--)
   {  
      if (OrderSelect(k, SELECT_BY_POS))
      {
          if ( OrderSymbol() == Symbol() )
          {
               if (OrderMagicNumber() == magicbuy || OrderMagicNumber() == magicsell) 
               {
                  lotsTrading += OrderLots();
                  openTrades = openTrades + 1;
                  profitLoss += (OrderProfit() + OrderSwap() + OrderCommission());
                  if (OrderType() == OP_SELL) openSellOrders++;
                  else openBuyOrders++;
               }
          }
      }
   }

   int wonTrades=0;
   int lostTrades=0;
   double profitToday=0;
   double profitYesterday=0;   
   double profitTotal=0;  
   double totalLotsTraded=0;
   double maxLotsizeUsed=0;
   double profitFactor=-1;
   double totalAmountWon=0;
   double totalAmountLost=0;
   datetime today     = TimeCurrent() ;
   datetime yesterday = TimeCurrent() - (60 * 60 * 24);
   for (int l=OrdersHistoryTotal();l >= 0;l--)
   {
      if(OrderSelect(l, SELECT_BY_POS,MODE_HISTORY))
      {
        if ( OrderSymbol() == Symbol() )
        {
           if ( OrderMagicNumber() == magicbuy || OrderMagicNumber() == magicsell )
           {
               totalLotsTraded += OrderLots();
               maxLotsizeUsed   = MathMax(maxLotsizeUsed, OrderLots());
               if (OrderProfit() > 0) wonTrades++;
               else lostTrades++;

               double orderProfit = (OrderProfit() + OrderSwap() + OrderCommission());
               if (orderProfit<0) totalAmountLost += orderProfit;
               else totalAmountWon += orderProfit;

               profitTotal += orderProfit;

               if( TimeDay  (OrderCloseTime()) == TimeDay(today) &&
                   TimeMonth(OrderCloseTime()) == TimeMonth(today) &&
                   TimeYear (OrderCloseTime()) == TimeYear(today) )
               {
                  profitToday += orderProfit;
               }

               if( TimeDay  (OrderCloseTime()) == TimeDay(yesterday) &&
                   TimeMonth(OrderCloseTime()) == TimeMonth(yesterday) &&
                   TimeYear (OrderCloseTime()) == TimeYear(yesterday) )
               {
                  profitYesterday += orderProfit;
               }
            }
        }
      }
   }
   if (totalAmountWon!=0 && totalAmountLost!=0)
   {
      profitFactor=MathAbs(totalAmountWon / totalAmountLost);
   }

   double totalTradeCount=(wonTrades+lostTrades);

   SM("--- Little Martingale EA v1.132 ---");
   SM("");
   SM("Account balance         : " + DoubleToString(AccountBalance(),2) +" " + AccountCurrency());
   SM("Account equity          : " + DoubleToString(AccountEquity(),2) +" " + AccountCurrency());
   SM("Account free margin     : " + DoubleToString(AccountFreeMargin(),2) +" " + AccountCurrency());
   SM("Account margin          : " + DoubleToString(AccountMargin(),2) +" " + AccountCurrency());

   SM("");
   SM("Open trades             : " + IntegerToString(openBuyOrders + openSellOrders) + " ( "+DoubleToString(profitLoss,2)+" "+AccountCurrency()+" )" );
   SM("         buy trades     : " + IntegerToString(openBuyOrders));
   SM("         sell trades    : " + IntegerToString(openSellOrders));
   SM("         lots in trades : " + DoubleToString(lotsTrading, 2) + " lots");

   SM("");
   SM("Total trades today      : " + IntegerToString(TradesToday())+" / "+IntegerToString(tradesperday));
   SM("Total trades all time   : " + IntegerToString((wonTrades+lostTrades)) + ", Won:"+IntegerToString(wonTrades)+" / Lost:"+IntegerToString(lostTrades));
   double percentage=0;
   if (totalTradeCount >0) percentage=(wonTrades / totalTradeCount) * 100;
   SM("                winrate : " + DoubleToString( percentage, 2)+"%");
   SM("");
   SM("Profit today            : " + DoubleToString(profitToday, 2)+ " " + AccountCurrency() );
   SM("Profit yesterday        : " + DoubleToString(profitYesterday,2 )+ " " + AccountCurrency() );
   SM("Profit all time         : " + DoubleToString(profitTotal, 2)+ " " + AccountCurrency() );

   double payoff=0;
   if (totalTradeCount > 0 ) payoff=profitTotal / totalTradeCount;
   SM("Payoff expectancy/trade : " + DoubleToString(payoff, 2)+ " " + AccountCurrency() );
   if (profitFactor>=0)
      SM("Profit factor           : " + DoubleToString(profitFactor, 2));
   else SM("");
   SM("");

   double averageLots=0;
   if (totalTradeCount >0) averageLots = totalLotsTraded / totalTradeCount;
   SM("Overall volume traded   : " + DoubleToString(totalLotsTraded, 2) +" lots");
   SM("Average volume/trade    : " + DoubleToString(averageLots, 2) +" lots");
   SM("Max volume traded       : " + DoubleToString(maxLotsizeUsed, 2) +" lots");
}

double GetLotSize()
{
   double leverage    = AccountLeverage();
   double minlot      = MarketInfo(Symbol(), MODE_MINLOT);
   double maxlot      = MarketInfo(Symbol(), MODE_MAXLOT);
   double lotsize     = MarketInfo(Symbol(), MODE_LOTSIZE);
   double stoplevel   = MarketInfo(Symbol(), MODE_STOPLEVEL);
   double MinLots     = 0.01; 
   double MaximalLots = 50.0;
   double lots        = Lots;

   if(MM)
   {
      double amountToRisk = AccountFreeMargin() * Risk / 100.0;
      lots = NormalizeDouble( amountToRisk / 1000.0, LotDigits);
      if(lots < minlot) lots = minlot;
      if (lots > MaximalLots) lots = MaximalLots;
      if (AccountFreeMargin() < Ask * lots * lotsize / leverage) 
      {
         Print("We have no money. Lots = ", lots, " , Free Margin = ", AccountFreeMargin());
         Comment("We h

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

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

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

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

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

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

Стоимость полного кода
1 788,40₽ ≈ $21.86