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

RUBBERBANDS

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

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

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

О программе

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

В основе работы лежит система управления ордерами с возможностью установки целевой прибыли (sessionTP) и стоп-лосса (sessionSL) на сессию. При достижении заданных уровней советник закрывает все открытые позиции. Также реализован режим «safety mode» — защитный механизм, который активируется при достижении определённого уровня убытка и предусматривает открытие дополнительных ордеров с меньшим лотом.

Советник поддерживает ручное управление через переключатели: запуск сделок, приостановка, принудительное закрытие и остановка. Все параметры настраиваются пользователем, включая размеры лотов, целевые уровни прибыли и убытка.

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

НастройкаОписание
Lots Размер лота — Размер лота для открытия стандартных ордеров.
dollars per lot (dollar_profit) Целевая прибыль на лот — Целевая прибыль в долларах на лот для стандартных ордеров.
quiesce_now Приостановка работы — Переключатель для приостановки работы советника без закрытия ордеров.
do_now Открыть ордер — Переключатель для запуска открытия нового ордера.
stop_now Полная остановка — Переключатель для полной остановки советника с выводом сообщения об остановке.
close_now Закрыть все ордера — Переключатель для принудительного закрытия всех открытых ордеров.
use_sessionTP Включение тейк-профита сессии — Включение или отключение тейк-профита сессии.
dollars per lot (sessionTP) Тейк-профит сессии — Уровень тейк-профита сессии в долларах на лот.
use_sessionSL Включение стоп-лосса сессии — Включение или отключение стоп-лосса сессии.
dollars per lot (sessionSL) Стоп-лосс сессии — Уровень стоп-лосса сессии в долларах на лот.
set to true on restart (use_in_values) Восстановление значений при перезапуске — Переключатель для восстановления ранее сохранённых значений при перезапуске.
set profit so far if not zero (in_profit_sofar) Прибыль на момент перезапуска — Учтённая прибыль на момент перезапуска, используется для восстановления состояния.
set to true if already in safety mode (in_safety_mode) Режим safety mode при перезапуске — Флаг, указывающий, был ли активирован режим safety mode к моменту перезапуска.
set "safety_to_buy" or sell (in_safety_to_buy) Направление safety-ордера при перезапуске — Направление safety-ордера при перезапуске: true — покупка, false — продажа.
set "used safety count" (in_used_safety_count) Количество safety-ордеров при перезапуске — Количество уже использованных safety-ордеров на момент перезапуска.
use_safety_mode Включение safety mode — Включение или отключение защитного режима safety mode.
dollars per lot (safety_start) Уровень убытка для активации safety mode — Уровень убытка в долларах на лот, при котором активируется safety mode.
safety_lots Размер лота safety-ордеров — Размер лота для safety-ордеров.
=(1500*2) -- dollars per lot (safety_step) Шаг увеличения уровня убытка — Шаг увеличения уровня убытка для каждого дополнительного safety-ордера, в долларах на лот.
dollars per lot (safety_profit) Целевая прибыль на safety-лот — Целевая прибыль в долларах на safety-лот для закрытия отдельного ордера в safety mode.
dollars per lot (safety_modeTP) Целевая прибыль в safety mode — Целевая прибыль в долларах на лот для закрытия всех ордеров в safety mode.
Получить полный код

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

extern double Lots = 0.05;
extern double dollar_profit = 1000; // dollars per lot

extern bool quiesce_now = false;
extern bool do_now = false;
extern bool stop_now = false;
extern bool close_now = false;

extern bool use_sessionTP = true;
extern double sessionTP = 1300; // dollars per lot
extern bool use_sessionSL = false;
extern double sessionSL = 300; // dollars per lot

extern bool use_in_values = false; // set to true on restart
extern int in_profit_sofar = 0; // set profit so far if not zero
extern int in_safety_mode = false; // set to true if already in safety mode
extern int in_safety_to_buy = false; // set "safety_to_buy" or sell
extern int in_used_safety_count = 0; // set "used safety count"

extern bool use_safety_mode = true;
extern double safety_start = 2000; // dollars per lot
extern double safety_lots = 0.05;

extern double safety_step = 3000; // =(1500*2) -- dollars per lot
extern double safety_profit = 1300; // dollars per lot
extern double safety_modeTP = 500; // dollars per lot

double GLBprofit;
bool GLBclose_all;
bool GLBbuy_now;
bool GLBsell_now;
bool GLBuse_in_values;
bool GLBsafety_mode;
bool GLBsafety_to_buy;
int GLBused_safety_count;

bool GLBsafety_buy_now;
bool GLBsafety_sell_now;

int Magic_Number_Buy = 1111;
int Magic_Number_Sell = 2222;
int Magic_Number_Safety_Buy = 3333;
int Magic_Number_Safety_Sell = 4444;

int Is_Trade_Allowed(int MaxWaiting_sec = 30)
{
  if(!IsTradeAllowed())
  {
    int StartWaitingTime = GetTickCount();
    Print("Trade context is busy! Wait until it is free...");
    while(true)
    {
      if(IsStopped()) 
      { 
        Print("The expert was terminated by the user!"); 
        return(-1); 
      }
      if(GetTickCount() - StartWaitingTime > MaxWaiting_sec * 1000)
      {
        Print("The waiting limit exceeded (" + MaxWaiting_sec + " seconds.)!");
        return(-2);
      }
      if(IsTradeAllowed())
      {
        Print("Trade context has become free!");
        return(0);
      }
    }
  }
  else
  {
    return(1);
  }
}

double Calculate_Profit()
{
double myprofit=0;
int total=OrdersTotal();

   for(int cnt=0;cnt<total;cnt++)
   {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
     {
       myprofit+=OrderProfit();
     } //-if
    }  //-for
    return(myprofit);
}

int Count_All()
{
int cnt, total, xcnt;

   total=OrdersTotal();

  if (total==0)
  {
    return(0);
  }

   xcnt=0;

   for(cnt=0;cnt<total;cnt++)
   {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     if(OrderSymbol()==Symbol())
     {
       xcnt++;
     }
  } // for
       return(xcnt);
}

bool Close_Single_Order()
{
int cnt, total, xcnt;
bool result;

  total=OrdersTotal();

  if (total==0)
  {
    return(false);
  }

  for(cnt=0;cnt<total;cnt++)
  {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_BUY)
      {
        result=OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
        return(result);
      }
      else /*OP_SELL*/
      {
        result=OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
        return(result);
      }
    } // if ordertype
  } // for
  return(false);
}

bool Open_Buy(string magicnumber, double lots)
{
int ticket;
  ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,3,0,0,"RUBBERBANDS",magicnumber,0,Green);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
    {
      Print("BUY order opened : ",OrderOpenPrice());
      return(true); 
    }
  }
  else
  {
    Print("Error opening BUY order : ",GetLastError()); 
    return(false);
  }
}

bool Open_Sell(string magicnumber, double lots)
{
int ticket;
  ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,3,0,0,"RUBBERBANDS",magicnumber,0,Red);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
    {
      Print("SELL order opened : ",OrderOpenPrice());
      return(true); 
    }
  }
  else
  {
    Print("Error opening SELL order : ",GetLastError()); 
    return(false);
  }
}

void Comment_Stopped()
{
Comment(
"SummerSoft Labs","\n",
"Lots = "+DoubleToStr(Lots,2),"\n",
"dollar_profit = "+DoubleToStr(dollar_profit,0),"\n",
"sessionTP = "+DoubleToStr(sessionTP,0),"\n",
"sessionSL = "+DoubleToStr(sessionSL,0)+" ("+use_sessionSL+")","\n",
"use safety mode = "+use_safety_mode,"\n",
"safety mode = "+GLBsafety_mode,"\n",
"safety to buy = "+GLBsafety_to_buy,"\n",
"used safety count = "+GLBused_safety_count,"\n",
"Profit So Far = "+DoubleToStr(GLBprofit,2),"\n","\n",
"STOPPED BY USER"
);
}

void Comment_Quiesced()
{
Comment(
"SummerSoft Labs","\n",
"Lots = "+DoubleToStr(Lots,2),"\n",
"dollar_profit = "+DoubleToStr(dollar_profit,0),"\n",
"sessionTP = "+DoubleToStr(sessionTP,0),"\n",
"sessionSL = "+DoubleToStr(sessionSL,0)+" ("+use_sessionSL+")","\n",
"use safety mode = "+use_safety_mode,"\n",
"safety mode = "+GLBsafety_mode,"\n",
"safety to buy = "+GLBsafety_to_buy,"\n",
"used safety count = "+GLBused_safety_count,"\n",
"Profit So Far = "+DoubleToStr(GLBprofit,2),"\n","\n",
"QUIESCED BY USER"
);
}

void Comment_Idle()
{
Comment(
"SummerSoft Labs","\n",
"Lots = "+DoubleToStr(Lots,2),"\n",
"dollar_profit = "+DoubleToStr(dollar_profit,0),"\n",
"sessionTP = "+DoubleToStr(sessionTP,0),"\n",
"sessionSL = "+DoubleToStr(sessionSL,0)+" ("+use_sessionSL+")","\n",
"use safety mode = "+use_safety_mode,"\n",
"safety mode = "+GLBsafety_mode,"\n",
"safety to buy = "+GLBsafety_to_buy,"\n",
"used safety count = "+GLBused_safety_count,"\n",
"Profit So Far = "+DoubleToStr(GLBprofi

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

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

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

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

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

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

Стоимость полного кода
869₽ ≈ $10.62